massive update, probably broken
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-tsserver / lib / index.js
1 var __create = Object.create;
2 var __defProp = Object.defineProperty;
3 var __getProtoOf = Object.getPrototypeOf;
4 var __hasOwnProp = Object.prototype.hasOwnProperty;
5 var __getOwnPropNames = Object.getOwnPropertyNames;
6 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7 var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
8 var __commonJS = (callback, module2) => () => {
9   if (!module2) {
10     module2 = {exports: {}};
11     callback(module2.exports, module2);
12   }
13   return module2.exports;
14 };
15 var __export = (target, all) => {
16   __markAsModule(target);
17   for (var name in all)
18     __defProp(target, name, {get: all[name], enumerable: true});
19 };
20 var __exportStar = (target, module2, desc) => {
21   __markAsModule(target);
22   if (module2 && typeof module2 === "object" || typeof module2 === "function") {
23     for (let key of __getOwnPropNames(module2))
24       if (!__hasOwnProp.call(target, key) && key !== "default")
25         __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
26   }
27   return target;
28 };
29 var __toModule = (module2) => {
30   if (module2 && module2.__esModule)
31     return module2;
32   return __exportStar(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", {value: module2, enumerable: true}), module2);
33 };
34
35 // node_modules/vscode-jsonrpc/lib/common/ral.js
36 var require_ral = __commonJS((exports2) => {
37   "use strict";
38   Object.defineProperty(exports2, "__esModule", {value: true});
39   var _ral;
40   function RAL() {
41     if (_ral === void 0) {
42       throw new Error(`No runtime abstraction layer installed`);
43     }
44     return _ral;
45   }
46   (function(RAL2) {
47     function install(ral) {
48       if (ral === void 0) {
49         throw new Error(`No runtime abstraction layer provided`);
50       }
51       _ral = ral;
52     }
53     RAL2.install = install;
54   })(RAL || (RAL = {}));
55   exports2.default = RAL;
56 });
57
58 // node_modules/vscode-jsonrpc/lib/common/disposable.js
59 var require_disposable = __commonJS((exports2) => {
60   "use strict";
61   Object.defineProperty(exports2, "__esModule", {value: true});
62   exports2.Disposable = void 0;
63   var Disposable13;
64   (function(Disposable14) {
65     function create(func) {
66       return {
67         dispose: func
68       };
69     }
70     Disposable14.create = create;
71   })(Disposable13 = exports2.Disposable || (exports2.Disposable = {}));
72 });
73
74 // node_modules/vscode-jsonrpc/lib/common/messageBuffer.js
75 var require_messageBuffer = __commonJS((exports2) => {
76   "use strict";
77   Object.defineProperty(exports2, "__esModule", {value: true});
78   exports2.AbstractMessageBuffer = void 0;
79   var CR = 13;
80   var LF = 10;
81   var CRLF = "\r\n";
82   var AbstractMessageBuffer = class {
83     constructor(encoding = "utf-8") {
84       this._encoding = encoding;
85       this._chunks = [];
86       this._totalLength = 0;
87     }
88     get encoding() {
89       return this._encoding;
90     }
91     append(chunk) {
92       const toAppend = typeof chunk === "string" ? this.fromString(chunk, this._encoding) : chunk;
93       this._chunks.push(toAppend);
94       this._totalLength += toAppend.byteLength;
95     }
96     tryReadHeaders() {
97       if (this._chunks.length === 0) {
98         return void 0;
99       }
100       let state = 0;
101       let chunkIndex = 0;
102       let offset = 0;
103       let chunkBytesRead = 0;
104       row:
105         while (chunkIndex < this._chunks.length) {
106           const chunk = this._chunks[chunkIndex];
107           offset = 0;
108           column:
109             while (offset < chunk.length) {
110               const value = chunk[offset];
111               switch (value) {
112                 case CR:
113                   switch (state) {
114                     case 0:
115                       state = 1;
116                       break;
117                     case 2:
118                       state = 3;
119                       break;
120                     default:
121                       state = 0;
122                   }
123                   break;
124                 case LF:
125                   switch (state) {
126                     case 1:
127                       state = 2;
128                       break;
129                     case 3:
130                       state = 4;
131                       offset++;
132                       break row;
133                     default:
134                       state = 0;
135                   }
136                   break;
137                 default:
138                   state = 0;
139               }
140               offset++;
141             }
142           chunkBytesRead += chunk.byteLength;
143           chunkIndex++;
144         }
145       if (state !== 4) {
146         return void 0;
147       }
148       const buffer = this._read(chunkBytesRead + offset);
149       const result = new Map();
150       const headers = this.toString(buffer, "ascii").split(CRLF);
151       if (headers.length < 2) {
152         return result;
153       }
154       for (let i = 0; i < headers.length - 2; i++) {
155         const header = headers[i];
156         const index = header.indexOf(":");
157         if (index === -1) {
158           throw new Error("Message header must separate key and value using :");
159         }
160         const key = header.substr(0, index);
161         const value = header.substr(index + 1).trim();
162         result.set(key, value);
163       }
164       return result;
165     }
166     tryReadBody(length) {
167       if (this._totalLength < length) {
168         return void 0;
169       }
170       return this._read(length);
171     }
172     get numberOfBytes() {
173       return this._totalLength;
174     }
175     _read(byteCount) {
176       if (byteCount === 0) {
177         return this.emptyBuffer();
178       }
179       if (byteCount > this._totalLength) {
180         throw new Error(`Cannot read so many bytes!`);
181       }
182       if (this._chunks[0].byteLength === byteCount) {
183         const chunk = this._chunks[0];
184         this._chunks.shift();
185         this._totalLength -= byteCount;
186         return this.asNative(chunk);
187       }
188       if (this._chunks[0].byteLength > byteCount) {
189         const chunk = this._chunks[0];
190         const result2 = this.asNative(chunk, byteCount);
191         this._chunks[0] = chunk.slice(byteCount);
192         this._totalLength -= byteCount;
193         return result2;
194       }
195       const result = this.allocNative(byteCount);
196       let resultOffset = 0;
197       let chunkIndex = 0;
198       while (byteCount > 0) {
199         const chunk = this._chunks[chunkIndex];
200         if (chunk.byteLength > byteCount) {
201           const chunkPart = chunk.slice(0, byteCount);
202           result.set(chunkPart, resultOffset);
203           resultOffset += byteCount;
204           this._chunks[chunkIndex] = chunk.slice(byteCount);
205           this._totalLength -= byteCount;
206           byteCount -= byteCount;
207         } else {
208           result.set(chunk, resultOffset);
209           resultOffset += chunk.byteLength;
210           this._chunks.shift();
211           this._totalLength -= chunk.byteLength;
212           byteCount -= chunk.byteLength;
213         }
214       }
215       return result;
216     }
217   };
218   exports2.AbstractMessageBuffer = AbstractMessageBuffer;
219 });
220
221 // node_modules/vscode-jsonrpc/lib/node/ril.js
222 var require_ril = __commonJS((exports2) => {
223   "use strict";
224   Object.defineProperty(exports2, "__esModule", {value: true});
225   var ral_1 = require_ral();
226   var util_1 = require("util");
227   var disposable_1 = require_disposable();
228   var messageBuffer_1 = require_messageBuffer();
229   var MessageBuffer = class extends messageBuffer_1.AbstractMessageBuffer {
230     constructor(encoding = "utf-8") {
231       super(encoding);
232     }
233     emptyBuffer() {
234       return MessageBuffer.emptyBuffer;
235     }
236     fromString(value, encoding) {
237       return Buffer.from(value, encoding);
238     }
239     toString(value, encoding) {
240       if (value instanceof Buffer) {
241         return value.toString(encoding);
242       } else {
243         return new util_1.TextDecoder(encoding).decode(value);
244       }
245     }
246     asNative(buffer, length) {
247       if (length === void 0) {
248         return buffer instanceof Buffer ? buffer : Buffer.from(buffer);
249       } else {
250         return buffer instanceof Buffer ? buffer.slice(0, length) : Buffer.from(buffer, 0, length);
251       }
252     }
253     allocNative(length) {
254       return Buffer.allocUnsafe(length);
255     }
256   };
257   MessageBuffer.emptyBuffer = Buffer.allocUnsafe(0);
258   var ReadableStreamWrapper = class {
259     constructor(stream) {
260       this.stream = stream;
261     }
262     onClose(listener) {
263       this.stream.on("close", listener);
264       return disposable_1.Disposable.create(() => this.stream.off("close", listener));
265     }
266     onError(listener) {
267       this.stream.on("error", listener);
268       return disposable_1.Disposable.create(() => this.stream.off("error", listener));
269     }
270     onEnd(listener) {
271       this.stream.on("end", listener);
272       return disposable_1.Disposable.create(() => this.stream.off("end", listener));
273     }
274     onData(listener) {
275       this.stream.on("data", listener);
276       return disposable_1.Disposable.create(() => this.stream.off("data", listener));
277     }
278   };
279   var WritableStreamWrapper = class {
280     constructor(stream) {
281       this.stream = stream;
282     }
283     onClose(listener) {
284       this.stream.on("close", listener);
285       return disposable_1.Disposable.create(() => this.stream.off("close", listener));
286     }
287     onError(listener) {
288       this.stream.on("error", listener);
289       return disposable_1.Disposable.create(() => this.stream.off("error", listener));
290     }
291     onEnd(listener) {
292       this.stream.on("end", listener);
293       return disposable_1.Disposable.create(() => this.stream.off("end", listener));
294     }
295     write(data, encoding) {
296       return new Promise((resolve, reject) => {
297         const callback = (error) => {
298           if (error === void 0 || error === null) {
299             resolve();
300           } else {
301             reject(error);
302           }
303         };
304         if (typeof data === "string") {
305           this.stream.write(data, encoding, callback);
306         } else {
307           this.stream.write(data, callback);
308         }
309       });
310     }
311     end() {
312       this.stream.end();
313     }
314   };
315   var _ril = Object.freeze({
316     messageBuffer: Object.freeze({
317       create: (encoding) => new MessageBuffer(encoding)
318     }),
319     applicationJson: Object.freeze({
320       encoder: Object.freeze({
321         name: "application/json",
322         encode: (msg, options) => {
323           try {
324             return Promise.resolve(Buffer.from(JSON.stringify(msg, void 0, 0), options.charset));
325           } catch (err) {
326             return Promise.reject(err);
327           }
328         }
329       }),
330       decoder: Object.freeze({
331         name: "application/json",
332         decode: (buffer, options) => {
333           try {
334             if (buffer instanceof Buffer) {
335               return Promise.resolve(JSON.parse(buffer.toString(options.charset)));
336             } else {
337               return Promise.resolve(JSON.parse(new util_1.TextDecoder(options.charset).decode(buffer)));
338             }
339           } catch (err) {
340             return Promise.reject(err);
341           }
342         }
343       })
344     }),
345     stream: Object.freeze({
346       asReadableStream: (stream) => new ReadableStreamWrapper(stream),
347       asWritableStream: (stream) => new WritableStreamWrapper(stream)
348     }),
349     console,
350     timer: Object.freeze({
351       setTimeout(callback, ms, ...args) {
352         return setTimeout(callback, ms, ...args);
353       },
354       clearTimeout(handle) {
355         clearTimeout(handle);
356       },
357       setImmediate(callback, ...args) {
358         return setImmediate(callback, ...args);
359       },
360       clearImmediate(handle) {
361         clearImmediate(handle);
362       }
363     })
364   });
365   function RIL() {
366     return _ril;
367   }
368   (function(RIL2) {
369     function install() {
370       ral_1.default.install(_ril);
371     }
372     RIL2.install = install;
373   })(RIL || (RIL = {}));
374   exports2.default = RIL;
375 });
376
377 // node_modules/vscode-jsonrpc/lib/common/is.js
378 var require_is = __commonJS((exports2) => {
379   "use strict";
380   Object.defineProperty(exports2, "__esModule", {value: true});
381   exports2.stringArray = exports2.array = exports2.func = exports2.error = exports2.number = exports2.string = exports2.boolean = void 0;
382   function boolean2(value) {
383     return value === true || value === false;
384   }
385   exports2.boolean = boolean2;
386   function string2(value) {
387     return typeof value === "string" || value instanceof String;
388   }
389   exports2.string = string2;
390   function number(value) {
391     return typeof value === "number" || value instanceof Number;
392   }
393   exports2.number = number;
394   function error(value) {
395     return value instanceof Error;
396   }
397   exports2.error = error;
398   function func(value) {
399     return typeof value === "function";
400   }
401   exports2.func = func;
402   function array(value) {
403     return Array.isArray(value);
404   }
405   exports2.array = array;
406   function stringArray(value) {
407     return array(value) && value.every((elem) => string2(elem));
408   }
409   exports2.stringArray = stringArray;
410 });
411
412 // node_modules/vscode-jsonrpc/lib/common/messages.js
413 var require_messages = __commonJS((exports2) => {
414   "use strict";
415   Object.defineProperty(exports2, "__esModule", {value: true});
416   exports2.isResponseMessage = exports2.isNotificationMessage = exports2.isRequestMessage = exports2.NotificationType9 = exports2.NotificationType8 = exports2.NotificationType7 = exports2.NotificationType6 = exports2.NotificationType5 = exports2.NotificationType4 = exports2.NotificationType3 = exports2.NotificationType2 = exports2.NotificationType1 = exports2.NotificationType0 = exports2.NotificationType = exports2.RequestType9 = exports2.RequestType8 = exports2.RequestType7 = exports2.RequestType6 = exports2.RequestType5 = exports2.RequestType4 = exports2.RequestType3 = exports2.RequestType2 = exports2.RequestType1 = exports2.RequestType = exports2.RequestType0 = exports2.AbstractMessageSignature = exports2.ParameterStructures = exports2.ResponseError = exports2.ErrorCodes = void 0;
417   var is2 = require_is();
418   var ErrorCodes;
419   (function(ErrorCodes2) {
420     ErrorCodes2.ParseError = -32700;
421     ErrorCodes2.InvalidRequest = -32600;
422     ErrorCodes2.MethodNotFound = -32601;
423     ErrorCodes2.InvalidParams = -32602;
424     ErrorCodes2.InternalError = -32603;
425     ErrorCodes2.jsonrpcReservedErrorRangeStart = -32099;
426     ErrorCodes2.serverErrorStart = ErrorCodes2.jsonrpcReservedErrorRangeStart;
427     ErrorCodes2.MessageWriteError = -32099;
428     ErrorCodes2.MessageReadError = -32098;
429     ErrorCodes2.ServerNotInitialized = -32002;
430     ErrorCodes2.UnknownErrorCode = -32001;
431     ErrorCodes2.jsonrpcReservedErrorRangeEnd = -32e3;
432     ErrorCodes2.serverErrorEnd = ErrorCodes2.jsonrpcReservedErrorRangeEnd;
433   })(ErrorCodes = exports2.ErrorCodes || (exports2.ErrorCodes = {}));
434   var ResponseError = class extends Error {
435     constructor(code, message, data) {
436       super(message);
437       this.code = is2.number(code) ? code : ErrorCodes.UnknownErrorCode;
438       this.data = data;
439       Object.setPrototypeOf(this, ResponseError.prototype);
440     }
441     toJson() {
442       return {
443         code: this.code,
444         message: this.message,
445         data: this.data
446       };
447     }
448   };
449   exports2.ResponseError = ResponseError;
450   var ParameterStructures = class {
451     constructor(kind) {
452       this.kind = kind;
453     }
454     static is(value) {
455       return value === ParameterStructures.auto || value === ParameterStructures.byName || value === ParameterStructures.byPosition;
456     }
457     toString() {
458       return this.kind;
459     }
460   };
461   exports2.ParameterStructures = ParameterStructures;
462   ParameterStructures.auto = new ParameterStructures("auto");
463   ParameterStructures.byPosition = new ParameterStructures("byPosition");
464   ParameterStructures.byName = new ParameterStructures("byName");
465   var AbstractMessageSignature = class {
466     constructor(method, numberOfParams) {
467       this.method = method;
468       this.numberOfParams = numberOfParams;
469     }
470     get parameterStructures() {
471       return ParameterStructures.auto;
472     }
473   };
474   exports2.AbstractMessageSignature = AbstractMessageSignature;
475   var RequestType0 = class extends AbstractMessageSignature {
476     constructor(method) {
477       super(method, 0);
478     }
479   };
480   exports2.RequestType0 = RequestType0;
481   var RequestType = class extends AbstractMessageSignature {
482     constructor(method, _parameterStructures = ParameterStructures.auto) {
483       super(method, 1);
484       this._parameterStructures = _parameterStructures;
485     }
486     get parameterStructures() {
487       return this._parameterStructures;
488     }
489   };
490   exports2.RequestType = RequestType;
491   var RequestType1 = class extends AbstractMessageSignature {
492     constructor(method, _parameterStructures = ParameterStructures.auto) {
493       super(method, 1);
494       this._parameterStructures = _parameterStructures;
495     }
496     get parameterStructures() {
497       return this._parameterStructures;
498     }
499   };
500   exports2.RequestType1 = RequestType1;
501   var RequestType2 = class extends AbstractMessageSignature {
502     constructor(method) {
503       super(method, 2);
504     }
505   };
506   exports2.RequestType2 = RequestType2;
507   var RequestType3 = class extends AbstractMessageSignature {
508     constructor(method) {
509       super(method, 3);
510     }
511   };
512   exports2.RequestType3 = RequestType3;
513   var RequestType4 = class extends AbstractMessageSignature {
514     constructor(method) {
515       super(method, 4);
516     }
517   };
518   exports2.RequestType4 = RequestType4;
519   var RequestType5 = class extends AbstractMessageSignature {
520     constructor(method) {
521       super(method, 5);
522     }
523   };
524   exports2.RequestType5 = RequestType5;
525   var RequestType6 = class extends AbstractMessageSignature {
526     constructor(method) {
527       super(method, 6);
528     }
529   };
530   exports2.RequestType6 = RequestType6;
531   var RequestType7 = class extends AbstractMessageSignature {
532     constructor(method) {
533       super(method, 7);
534     }
535   };
536   exports2.RequestType7 = RequestType7;
537   var RequestType8 = class extends AbstractMessageSignature {
538     constructor(method) {
539       super(method, 8);
540     }
541   };
542   exports2.RequestType8 = RequestType8;
543   var RequestType9 = class extends AbstractMessageSignature {
544     constructor(method) {
545       super(method, 9);
546     }
547   };
548   exports2.RequestType9 = RequestType9;
549   var NotificationType = class extends AbstractMessageSignature {
550     constructor(method, _parameterStructures = ParameterStructures.auto) {
551       super(method, 1);
552       this._parameterStructures = _parameterStructures;
553     }
554     get parameterStructures() {
555       return this._parameterStructures;
556     }
557   };
558   exports2.NotificationType = NotificationType;
559   var NotificationType0 = class extends AbstractMessageSignature {
560     constructor(method) {
561       super(method, 0);
562     }
563   };
564   exports2.NotificationType0 = NotificationType0;
565   var NotificationType1 = class extends AbstractMessageSignature {
566     constructor(method, _parameterStructures = ParameterStructures.auto) {
567       super(method, 1);
568       this._parameterStructures = _parameterStructures;
569     }
570     get parameterStructures() {
571       return this._parameterStructures;
572     }
573   };
574   exports2.NotificationType1 = NotificationType1;
575   var NotificationType2 = class extends AbstractMessageSignature {
576     constructor(method) {
577       super(method, 2);
578     }
579   };
580   exports2.NotificationType2 = NotificationType2;
581   var NotificationType3 = class extends AbstractMessageSignature {
582     constructor(method) {
583       super(method, 3);
584     }
585   };
586   exports2.NotificationType3 = NotificationType3;
587   var NotificationType4 = class extends AbstractMessageSignature {
588     constructor(method) {
589       super(method, 4);
590     }
591   };
592   exports2.NotificationType4 = NotificationType4;
593   var NotificationType5 = class extends AbstractMessageSignature {
594     constructor(method) {
595       super(method, 5);
596     }
597   };
598   exports2.NotificationType5 = NotificationType5;
599   var NotificationType6 = class extends AbstractMessageSignature {
600     constructor(method) {
601       super(method, 6);
602     }
603   };
604   exports2.NotificationType6 = NotificationType6;
605   var NotificationType7 = class extends AbstractMessageSignature {
606     constructor(method) {
607       super(method, 7);
608     }
609   };
610   exports2.NotificationType7 = NotificationType7;
611   var NotificationType8 = class extends AbstractMessageSignature {
612     constructor(method) {
613       super(method, 8);
614     }
615   };
616   exports2.NotificationType8 = NotificationType8;
617   var NotificationType9 = class extends AbstractMessageSignature {
618     constructor(method) {
619       super(method, 9);
620     }
621   };
622   exports2.NotificationType9 = NotificationType9;
623   function isRequestMessage(message) {
624     const candidate = message;
625     return candidate && is2.string(candidate.method) && (is2.string(candidate.id) || is2.number(candidate.id));
626   }
627   exports2.isRequestMessage = isRequestMessage;
628   function isNotificationMessage(message) {
629     const candidate = message;
630     return candidate && is2.string(candidate.method) && message.id === void 0;
631   }
632   exports2.isNotificationMessage = isNotificationMessage;
633   function isResponseMessage(message) {
634     const candidate = message;
635     return candidate && (candidate.result !== void 0 || !!candidate.error) && (is2.string(candidate.id) || is2.number(candidate.id) || candidate.id === null);
636   }
637   exports2.isResponseMessage = isResponseMessage;
638 });
639
640 // node_modules/vscode-jsonrpc/lib/common/events.js
641 var require_events = __commonJS((exports2) => {
642   "use strict";
643   Object.defineProperty(exports2, "__esModule", {value: true});
644   exports2.Emitter = exports2.Event = void 0;
645   var ral_1 = require_ral();
646   var Event5;
647   (function(Event6) {
648     const _disposable = {dispose() {
649     }};
650     Event6.None = function() {
651       return _disposable;
652     };
653   })(Event5 = exports2.Event || (exports2.Event = {}));
654   var CallbackList = class {
655     add(callback, context = null, bucket) {
656       if (!this._callbacks) {
657         this._callbacks = [];
658         this._contexts = [];
659       }
660       this._callbacks.push(callback);
661       this._contexts.push(context);
662       if (Array.isArray(bucket)) {
663         bucket.push({dispose: () => this.remove(callback, context)});
664       }
665     }
666     remove(callback, context = null) {
667       if (!this._callbacks) {
668         return;
669       }
670       let foundCallbackWithDifferentContext = false;
671       for (let i = 0, len = this._callbacks.length; i < len; i++) {
672         if (this._callbacks[i] === callback) {
673           if (this._contexts[i] === context) {
674             this._callbacks.splice(i, 1);
675             this._contexts.splice(i, 1);
676             return;
677           } else {
678             foundCallbackWithDifferentContext = true;
679           }
680         }
681       }
682       if (foundCallbackWithDifferentContext) {
683         throw new Error("When adding a listener with a context, you should remove it with the same context");
684       }
685     }
686     invoke(...args) {
687       if (!this._callbacks) {
688         return [];
689       }
690       const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
691       for (let i = 0, len = callbacks.length; i < len; i++) {
692         try {
693           ret.push(callbacks[i].apply(contexts[i], args));
694         } catch (e) {
695           ral_1.default().console.error(e);
696         }
697       }
698       return ret;
699     }
700     isEmpty() {
701       return !this._callbacks || this._callbacks.length === 0;
702     }
703     dispose() {
704       this._callbacks = void 0;
705       this._contexts = void 0;
706     }
707   };
708   var Emitter6 = class {
709     constructor(_options) {
710       this._options = _options;
711     }
712     get event() {
713       if (!this._event) {
714         this._event = (listener, thisArgs, disposables) => {
715           if (!this._callbacks) {
716             this._callbacks = new CallbackList();
717           }
718           if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
719             this._options.onFirstListenerAdd(this);
720           }
721           this._callbacks.add(listener, thisArgs);
722           const result = {
723             dispose: () => {
724               if (!this._callbacks) {
725                 return;
726               }
727               this._callbacks.remove(listener, thisArgs);
728               result.dispose = Emitter6._noop;
729               if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
730                 this._options.onLastListenerRemove(this);
731               }
732             }
733           };
734           if (Array.isArray(disposables)) {
735             disposables.push(result);
736           }
737           return result;
738         };
739       }
740       return this._event;
741     }
742     fire(event) {
743       if (this._callbacks) {
744         this._callbacks.invoke.call(this._callbacks, event);
745       }
746     }
747     dispose() {
748       if (this._callbacks) {
749         this._callbacks.dispose();
750         this._callbacks = void 0;
751       }
752     }
753   };
754   exports2.Emitter = Emitter6;
755   Emitter6._noop = function() {
756   };
757 });
758
759 // node_modules/vscode-jsonrpc/lib/common/cancellation.js
760 var require_cancellation = __commonJS((exports2) => {
761   "use strict";
762   Object.defineProperty(exports2, "__esModule", {value: true});
763   exports2.CancellationTokenSource = exports2.CancellationToken = void 0;
764   var ral_1 = require_ral();
765   var Is = require_is();
766   var events_1 = require_events();
767   var CancellationToken20;
768   (function(CancellationToken21) {
769     CancellationToken21.None = Object.freeze({
770       isCancellationRequested: false,
771       onCancellationRequested: events_1.Event.None
772     });
773     CancellationToken21.Cancelled = Object.freeze({
774       isCancellationRequested: true,
775       onCancellationRequested: events_1.Event.None
776     });
777     function is2(value) {
778       const candidate = value;
779       return candidate && (candidate === CancellationToken21.None || candidate === CancellationToken21.Cancelled || Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
780     }
781     CancellationToken21.is = is2;
782   })(CancellationToken20 = exports2.CancellationToken || (exports2.CancellationToken = {}));
783   var shortcutEvent = Object.freeze(function(callback, context) {
784     const handle = ral_1.default().timer.setTimeout(callback.bind(context), 0);
785     return {dispose() {
786       ral_1.default().timer.clearTimeout(handle);
787     }};
788   });
789   var MutableToken = class {
790     constructor() {
791       this._isCancelled = false;
792     }
793     cancel() {
794       if (!this._isCancelled) {
795         this._isCancelled = true;
796         if (this._emitter) {
797           this._emitter.fire(void 0);
798           this.dispose();
799         }
800       }
801     }
802     get isCancellationRequested() {
803       return this._isCancelled;
804     }
805     get onCancellationRequested() {
806       if (this._isCancelled) {
807         return shortcutEvent;
808       }
809       if (!this._emitter) {
810         this._emitter = new events_1.Emitter();
811       }
812       return this._emitter.event;
813     }
814     dispose() {
815       if (this._emitter) {
816         this._emitter.dispose();
817         this._emitter = void 0;
818       }
819     }
820   };
821   var CancellationTokenSource4 = class {
822     get token() {
823       if (!this._token) {
824         this._token = new MutableToken();
825       }
826       return this._token;
827     }
828     cancel() {
829       if (!this._token) {
830         this._token = CancellationToken20.Cancelled;
831       } else {
832         this._token.cancel();
833       }
834     }
835     dispose() {
836       if (!this._token) {
837         this._token = CancellationToken20.None;
838       } else if (this._token instanceof MutableToken) {
839         this._token.dispose();
840       }
841     }
842   };
843   exports2.CancellationTokenSource = CancellationTokenSource4;
844 });
845
846 // node_modules/vscode-jsonrpc/lib/common/messageReader.js
847 var require_messageReader = __commonJS((exports2) => {
848   "use strict";
849   Object.defineProperty(exports2, "__esModule", {value: true});
850   exports2.ReadableStreamMessageReader = exports2.AbstractMessageReader = exports2.MessageReader = void 0;
851   var ral_1 = require_ral();
852   var Is = require_is();
853   var events_1 = require_events();
854   var MessageReader;
855   (function(MessageReader2) {
856     function is2(value) {
857       let candidate = value;
858       return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) && Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
859     }
860     MessageReader2.is = is2;
861   })(MessageReader = exports2.MessageReader || (exports2.MessageReader = {}));
862   var AbstractMessageReader = class {
863     constructor() {
864       this.errorEmitter = new events_1.Emitter();
865       this.closeEmitter = new events_1.Emitter();
866       this.partialMessageEmitter = new events_1.Emitter();
867     }
868     dispose() {
869       this.errorEmitter.dispose();
870       this.closeEmitter.dispose();
871     }
872     get onError() {
873       return this.errorEmitter.event;
874     }
875     fireError(error) {
876       this.errorEmitter.fire(this.asError(error));
877     }
878     get onClose() {
879       return this.closeEmitter.event;
880     }
881     fireClose() {
882       this.closeEmitter.fire(void 0);
883     }
884     get onPartialMessage() {
885       return this.partialMessageEmitter.event;
886     }
887     firePartialMessage(info) {
888       this.partialMessageEmitter.fire(info);
889     }
890     asError(error) {
891       if (error instanceof Error) {
892         return error;
893       } else {
894         return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
895       }
896     }
897   };
898   exports2.AbstractMessageReader = AbstractMessageReader;
899   var ResolvedMessageReaderOptions;
900   (function(ResolvedMessageReaderOptions2) {
901     function fromOptions(options) {
902       var _a;
903       let charset;
904       let result;
905       let contentDecoder;
906       const contentDecoders = new Map();
907       let contentTypeDecoder;
908       const contentTypeDecoders = new Map();
909       if (options === void 0 || typeof options === "string") {
910         charset = options !== null && options !== void 0 ? options : "utf-8";
911       } else {
912         charset = (_a = options.charset) !== null && _a !== void 0 ? _a : "utf-8";
913         if (options.contentDecoder !== void 0) {
914           contentDecoder = options.contentDecoder;
915           contentDecoders.set(contentDecoder.name, contentDecoder);
916         }
917         if (options.contentDecoders !== void 0) {
918           for (const decoder of options.contentDecoders) {
919             contentDecoders.set(decoder.name, decoder);
920           }
921         }
922         if (options.contentTypeDecoder !== void 0) {
923           contentTypeDecoder = options.contentTypeDecoder;
924           contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
925         }
926         if (options.contentTypeDecoders !== void 0) {
927           for (const decoder of options.contentTypeDecoders) {
928             contentTypeDecoders.set(decoder.name, decoder);
929           }
930         }
931       }
932       if (contentTypeDecoder === void 0) {
933         contentTypeDecoder = ral_1.default().applicationJson.decoder;
934         contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
935       }
936       return {charset, contentDecoder, contentDecoders, contentTypeDecoder, contentTypeDecoders};
937     }
938     ResolvedMessageReaderOptions2.fromOptions = fromOptions;
939   })(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));
940   var ReadableStreamMessageReader = class extends AbstractMessageReader {
941     constructor(readable, options) {
942       super();
943       this.readable = readable;
944       this.options = ResolvedMessageReaderOptions.fromOptions(options);
945       this.buffer = ral_1.default().messageBuffer.create(this.options.charset);
946       this._partialMessageTimeout = 1e4;
947       this.nextMessageLength = -1;
948       this.messageToken = 0;
949     }
950     set partialMessageTimeout(timeout) {
951       this._partialMessageTimeout = timeout;
952     }
953     get partialMessageTimeout() {
954       return this._partialMessageTimeout;
955     }
956     listen(callback) {
957       this.nextMessageLength = -1;
958       this.messageToken = 0;
959       this.partialMessageTimer = void 0;
960       this.callback = callback;
961       const result = this.readable.onData((data) => {
962         this.onData(data);
963       });
964       this.readable.onError((error) => this.fireError(error));
965       this.readable.onClose(() => this.fireClose());
966       return result;
967     }
968     onData(data) {
969       this.buffer.append(data);
970       while (true) {
971         if (this.nextMessageLength === -1) {
972           const headers = this.buffer.tryReadHeaders();
973           if (!headers) {
974             return;
975           }
976           const contentLength = headers.get("Content-Length");
977           if (!contentLength) {
978             throw new Error("Header must provide a Content-Length property.");
979           }
980           const length = parseInt(contentLength);
981           if (isNaN(length)) {
982             throw new Error("Content-Length value must be a number.");
983           }
984           this.nextMessageLength = length;
985         }
986         const body = this.buffer.tryReadBody(this.nextMessageLength);
987         if (body === void 0) {
988           this.setPartialMessageTimer();
989           return;
990         }
991         this.clearPartialMessageTimer();
992         this.nextMessageLength = -1;
993         let p;
994         if (this.options.contentDecoder !== void 0) {
995           p = this.options.contentDecoder.decode(body);
996         } else {
997           p = Promise.resolve(body);
998         }
999         p.then((value) => {
1000           this.options.contentTypeDecoder.decode(value, this.options).then((msg) => {
1001             this.callback(msg);
1002           }, (error) => {
1003             this.fireError(error);
1004           });
1005         }, (error) => {
1006           this.fireError(error);
1007         });
1008       }
1009     }
1010     clearPartialMessageTimer() {
1011       if (this.partialMessageTimer) {
1012         ral_1.default().timer.clearTimeout(this.partialMessageTimer);
1013         this.partialMessageTimer = void 0;
1014       }
1015     }
1016     setPartialMessageTimer() {
1017       this.clearPartialMessageTimer();
1018       if (this._partialMessageTimeout <= 0) {
1019         return;
1020       }
1021       this.partialMessageTimer = ral_1.default().timer.setTimeout((token, timeout) => {
1022         this.partialMessageTimer = void 0;
1023         if (token === this.messageToken) {
1024           this.firePartialMessage({messageToken: token, waitingTime: timeout});
1025           this.setPartialMessageTimer();
1026         }
1027       }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
1028     }
1029   };
1030   exports2.ReadableStreamMessageReader = ReadableStreamMessageReader;
1031 });
1032
1033 // node_modules/vscode-jsonrpc/lib/common/semaphore.js
1034 var require_semaphore = __commonJS((exports2) => {
1035   "use strict";
1036   Object.defineProperty(exports2, "__esModule", {value: true});
1037   exports2.Semaphore = void 0;
1038   var ral_1 = require_ral();
1039   var Semaphore = class {
1040     constructor(capacity = 1) {
1041       if (capacity <= 0) {
1042         throw new Error("Capacity must be greater than 0");
1043       }
1044       this._capacity = capacity;
1045       this._active = 0;
1046       this._waiting = [];
1047     }
1048     lock(thunk) {
1049       return new Promise((resolve, reject) => {
1050         this._waiting.push({thunk, resolve, reject});
1051         this.runNext();
1052       });
1053     }
1054     get active() {
1055       return this._active;
1056     }
1057     runNext() {
1058       if (this._waiting.length === 0 || this._active === this._capacity) {
1059         return;
1060       }
1061       ral_1.default().timer.setImmediate(() => this.doRunNext());
1062     }
1063     doRunNext() {
1064       if (this._waiting.length === 0 || this._active === this._capacity) {
1065         return;
1066       }
1067       const next = this._waiting.shift();
1068       this._active++;
1069       if (this._active > this._capacity) {
1070         throw new Error(`To many thunks active`);
1071       }
1072       try {
1073         const result = next.thunk();
1074         if (result instanceof Promise) {
1075           result.then((value) => {
1076             this._active--;
1077             next.resolve(value);
1078             this.runNext();
1079           }, (err) => {
1080             this._active--;
1081             next.reject(err);
1082             this.runNext();
1083           });
1084         } else {
1085           this._active--;
1086           next.resolve(result);
1087           this.runNext();
1088         }
1089       } catch (err) {
1090         this._active--;
1091         next.reject(err);
1092         this.runNext();
1093       }
1094     }
1095   };
1096   exports2.Semaphore = Semaphore;
1097 });
1098
1099 // node_modules/vscode-jsonrpc/lib/common/messageWriter.js
1100 var require_messageWriter = __commonJS((exports2) => {
1101   "use strict";
1102   Object.defineProperty(exports2, "__esModule", {value: true});
1103   exports2.WriteableStreamMessageWriter = exports2.AbstractMessageWriter = exports2.MessageWriter = void 0;
1104   var ral_1 = require_ral();
1105   var Is = require_is();
1106   var semaphore_1 = require_semaphore();
1107   var events_1 = require_events();
1108   var ContentLength2 = "Content-Length: ";
1109   var CRLF = "\r\n";
1110   var MessageWriter;
1111   (function(MessageWriter2) {
1112     function is2(value) {
1113       let candidate = value;
1114       return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) && Is.func(candidate.onError) && Is.func(candidate.write);
1115     }
1116     MessageWriter2.is = is2;
1117   })(MessageWriter = exports2.MessageWriter || (exports2.MessageWriter = {}));
1118   var AbstractMessageWriter = class {
1119     constructor() {
1120       this.errorEmitter = new events_1.Emitter();
1121       this.closeEmitter = new events_1.Emitter();
1122     }
1123     dispose() {
1124       this.errorEmitter.dispose();
1125       this.closeEmitter.dispose();
1126     }
1127     get onError() {
1128       return this.errorEmitter.event;
1129     }
1130     fireError(error, message, count) {
1131       this.errorEmitter.fire([this.asError(error), message, count]);
1132     }
1133     get onClose() {
1134       return this.closeEmitter.event;
1135     }
1136     fireClose() {
1137       this.closeEmitter.fire(void 0);
1138     }
1139     asError(error) {
1140       if (error instanceof Error) {
1141         return error;
1142       } else {
1143         return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
1144       }
1145     }
1146   };
1147   exports2.AbstractMessageWriter = AbstractMessageWriter;
1148   var ResolvedMessageWriterOptions;
1149   (function(ResolvedMessageWriterOptions2) {
1150     function fromOptions(options) {
1151       var _a, _b;
1152       if (options === void 0 || typeof options === "string") {
1153         return {charset: options !== null && options !== void 0 ? options : "utf-8", contentTypeEncoder: ral_1.default().applicationJson.encoder};
1154       } else {
1155         return {charset: (_a = options.charset) !== null && _a !== void 0 ? _a : "utf-8", contentEncoder: options.contentEncoder, contentTypeEncoder: (_b = options.contentTypeEncoder) !== null && _b !== void 0 ? _b : ral_1.default().applicationJson.encoder};
1156       }
1157     }
1158     ResolvedMessageWriterOptions2.fromOptions = fromOptions;
1159   })(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));
1160   var WriteableStreamMessageWriter = class extends AbstractMessageWriter {
1161     constructor(writable, options) {
1162       super();
1163       this.writable = writable;
1164       this.options = ResolvedMessageWriterOptions.fromOptions(options);
1165       this.errorCount = 0;
1166       this.writeSemaphore = new semaphore_1.Semaphore(1);
1167       this.writable.onError((error) => this.fireError(error));
1168       this.writable.onClose(() => this.fireClose());
1169     }
1170     async write(msg) {
1171       return this.writeSemaphore.lock(async () => {
1172         const payload = this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {
1173           if (this.options.contentEncoder !== void 0) {
1174             return this.options.contentEncoder.encode(buffer);
1175           } else {
1176             return buffer;
1177           }
1178         });
1179         return payload.then((buffer) => {
1180           const headers = [];
1181           headers.push(ContentLength2, buffer.byteLength.toString(), CRLF);
1182           headers.push(CRLF);
1183           return this.doWrite(msg, headers, buffer);
1184         }, (error) => {
1185           this.fireError(error);
1186           throw error;
1187         });
1188       });
1189     }
1190     async doWrite(msg, headers, data) {
1191       try {
1192         await this.writable.write(headers.join(""), "ascii");
1193         return this.writable.write(data);
1194       } catch (error) {
1195         this.handleError(error, msg);
1196         return Promise.reject(error);
1197       }
1198     }
1199     handleError(error, msg) {
1200       this.errorCount++;
1201       this.fireError(error, msg, this.errorCount);
1202     }
1203     end() {
1204       this.writable.end();
1205     }
1206   };
1207   exports2.WriteableStreamMessageWriter = WriteableStreamMessageWriter;
1208 });
1209
1210 // node_modules/vscode-jsonrpc/lib/common/linkedMap.js
1211 var require_linkedMap = __commonJS((exports2) => {
1212   "use strict";
1213   Object.defineProperty(exports2, "__esModule", {value: true});
1214   exports2.LRUCache = exports2.LinkedMap = exports2.Touch = void 0;
1215   var Touch;
1216   (function(Touch2) {
1217     Touch2.None = 0;
1218     Touch2.First = 1;
1219     Touch2.AsOld = Touch2.First;
1220     Touch2.Last = 2;
1221     Touch2.AsNew = Touch2.Last;
1222   })(Touch = exports2.Touch || (exports2.Touch = {}));
1223   var LinkedMap = class {
1224     constructor() {
1225       this[Symbol.toStringTag] = "LinkedMap";
1226       this._map = new Map();
1227       this._head = void 0;
1228       this._tail = void 0;
1229       this._size = 0;
1230       this._state = 0;
1231     }
1232     clear() {
1233       this._map.clear();
1234       this._head = void 0;
1235       this._tail = void 0;
1236       this._size = 0;
1237       this._state++;
1238     }
1239     isEmpty() {
1240       return !this._head && !this._tail;
1241     }
1242     get size() {
1243       return this._size;
1244     }
1245     get first() {
1246       var _a;
1247       return (_a = this._head) === null || _a === void 0 ? void 0 : _a.value;
1248     }
1249     get last() {
1250       var _a;
1251       return (_a = this._tail) === null || _a === void 0 ? void 0 : _a.value;
1252     }
1253     has(key) {
1254       return this._map.has(key);
1255     }
1256     get(key, touch = Touch.None) {
1257       const item = this._map.get(key);
1258       if (!item) {
1259         return void 0;
1260       }
1261       if (touch !== Touch.None) {
1262         this.touch(item, touch);
1263       }
1264       return item.value;
1265     }
1266     set(key, value, touch = Touch.None) {
1267       let item = this._map.get(key);
1268       if (item) {
1269         item.value = value;
1270         if (touch !== Touch.None) {
1271           this.touch(item, touch);
1272         }
1273       } else {
1274         item = {key, value, next: void 0, previous: void 0};
1275         switch (touch) {
1276           case Touch.None:
1277             this.addItemLast(item);
1278             break;
1279           case Touch.First:
1280             this.addItemFirst(item);
1281             break;
1282           case Touch.Last:
1283             this.addItemLast(item);
1284             break;
1285           default:
1286             this.addItemLast(item);
1287             break;
1288         }
1289         this._map.set(key, item);
1290         this._size++;
1291       }
1292       return this;
1293     }
1294     delete(key) {
1295       return !!this.remove(key);
1296     }
1297     remove(key) {
1298       const item = this._map.get(key);
1299       if (!item) {
1300         return void 0;
1301       }
1302       this._map.delete(key);
1303       this.removeItem(item);
1304       this._size--;
1305       return item.value;
1306     }
1307     shift() {
1308       if (!this._head && !this._tail) {
1309         return void 0;
1310       }
1311       if (!this._head || !this._tail) {
1312         throw new Error("Invalid list");
1313       }
1314       const item = this._head;
1315       this._map.delete(item.key);
1316       this.removeItem(item);
1317       this._size--;
1318       return item.value;
1319     }
1320     forEach(callbackfn, thisArg) {
1321       const state = this._state;
1322       let current = this._head;
1323       while (current) {
1324         if (thisArg) {
1325           callbackfn.bind(thisArg)(current.value, current.key, this);
1326         } else {
1327           callbackfn(current.value, current.key, this);
1328         }
1329         if (this._state !== state) {
1330           throw new Error(`LinkedMap got modified during iteration.`);
1331         }
1332         current = current.next;
1333       }
1334     }
1335     keys() {
1336       const map = this;
1337       const state = this._state;
1338       let current = this._head;
1339       const iterator = {
1340         [Symbol.iterator]() {
1341           return iterator;
1342         },
1343         next() {
1344           if (map._state !== state) {
1345             throw new Error(`LinkedMap got modified during iteration.`);
1346           }
1347           if (current) {
1348             const result = {value: current.key, done: false};
1349             current = current.next;
1350             return result;
1351           } else {
1352             return {value: void 0, done: true};
1353           }
1354         }
1355       };
1356       return iterator;
1357     }
1358     values() {
1359       const map = this;
1360       const state = this._state;
1361       let current = this._head;
1362       const iterator = {
1363         [Symbol.iterator]() {
1364           return iterator;
1365         },
1366         next() {
1367           if (map._state !== state) {
1368             throw new Error(`LinkedMap got modified during iteration.`);
1369           }
1370           if (current) {
1371             const result = {value: current.value, done: false};
1372             current = current.next;
1373             return result;
1374           } else {
1375             return {value: void 0, done: true};
1376           }
1377         }
1378       };
1379       return iterator;
1380     }
1381     entries() {
1382       const map = this;
1383       const state = this._state;
1384       let current = this._head;
1385       const iterator = {
1386         [Symbol.iterator]() {
1387           return iterator;
1388         },
1389         next() {
1390           if (map._state !== state) {
1391             throw new Error(`LinkedMap got modified during iteration.`);
1392           }
1393           if (current) {
1394             const result = {value: [current.key, current.value], done: false};
1395             current = current.next;
1396             return result;
1397           } else {
1398             return {value: void 0, done: true};
1399           }
1400         }
1401       };
1402       return iterator;
1403     }
1404     [Symbol.iterator]() {
1405       return this.entries();
1406     }
1407     trimOld(newSize) {
1408       if (newSize >= this.size) {
1409         return;
1410       }
1411       if (newSize === 0) {
1412         this.clear();
1413         return;
1414       }
1415       let current = this._head;
1416       let currentSize = this.size;
1417       while (current && currentSize > newSize) {
1418         this._map.delete(current.key);
1419         current = current.next;
1420         currentSize--;
1421       }
1422       this._head = current;
1423       this._size = currentSize;
1424       if (current) {
1425         current.previous = void 0;
1426       }
1427       this._state++;
1428     }
1429     addItemFirst(item) {
1430       if (!this._head && !this._tail) {
1431         this._tail = item;
1432       } else if (!this._head) {
1433         throw new Error("Invalid list");
1434       } else {
1435         item.next = this._head;
1436         this._head.previous = item;
1437       }
1438       this._head = item;
1439       this._state++;
1440     }
1441     addItemLast(item) {
1442       if (!this._head && !this._tail) {
1443         this._head = item;
1444       } else if (!this._tail) {
1445         throw new Error("Invalid list");
1446       } else {
1447         item.previous = this._tail;
1448         this._tail.next = item;
1449       }
1450       this._tail = item;
1451       this._state++;
1452     }
1453     removeItem(item) {
1454       if (item === this._head && item === this._tail) {
1455         this._head = void 0;
1456         this._tail = void 0;
1457       } else if (item === this._head) {
1458         if (!item.next) {
1459           throw new Error("Invalid list");
1460         }
1461         item.next.previous = void 0;
1462         this._head = item.next;
1463       } else if (item === this._tail) {
1464         if (!item.previous) {
1465           throw new Error("Invalid list");
1466         }
1467         item.previous.next = void 0;
1468         this._tail = item.previous;
1469       } else {
1470         const next = item.next;
1471         const previous = item.previous;
1472         if (!next || !previous) {
1473           throw new Error("Invalid list");
1474         }
1475         next.previous = previous;
1476         previous.next = next;
1477       }
1478       item.next = void 0;
1479       item.previous = void 0;
1480       this._state++;
1481     }
1482     touch(item, touch) {
1483       if (!this._head || !this._tail) {
1484         throw new Error("Invalid list");
1485       }
1486       if (touch !== Touch.First && touch !== Touch.Last) {
1487         return;
1488       }
1489       if (touch === Touch.First) {
1490         if (item === this._head) {
1491           return;
1492         }
1493         const next = item.next;
1494         const previous = item.previous;
1495         if (item === this._tail) {
1496           previous.next = void 0;
1497           this._tail = previous;
1498         } else {
1499           next.previous = previous;
1500           previous.next = next;
1501         }
1502         item.previous = void 0;
1503         item.next = this._head;
1504         this._head.previous = item;
1505         this._head = item;
1506         this._state++;
1507       } else if (touch === Touch.Last) {
1508         if (item === this._tail) {
1509           return;
1510         }
1511         const next = item.next;
1512         const previous = item.previous;
1513         if (item === this._head) {
1514           next.previous = void 0;
1515           this._head = next;
1516         } else {
1517           next.previous = previous;
1518           previous.next = next;
1519         }
1520         item.next = void 0;
1521         item.previous = this._tail;
1522         this._tail.next = item;
1523         this._tail = item;
1524         this._state++;
1525       }
1526     }
1527     toJSON() {
1528       const data = [];
1529       this.forEach((value, key) => {
1530         data.push([key, value]);
1531       });
1532       return data;
1533     }
1534     fromJSON(data) {
1535       this.clear();
1536       for (const [key, value] of data) {
1537         this.set(key, value);
1538       }
1539     }
1540   };
1541   exports2.LinkedMap = LinkedMap;
1542   var LRUCache = class extends LinkedMap {
1543     constructor(limit, ratio = 1) {
1544       super();
1545       this._limit = limit;
1546       this._ratio = Math.min(Math.max(0, ratio), 1);
1547     }
1548     get limit() {
1549       return this._limit;
1550     }
1551     set limit(limit) {
1552       this._limit = limit;
1553       this.checkTrim();
1554     }
1555     get ratio() {
1556       return this._ratio;
1557     }
1558     set ratio(ratio) {
1559       this._ratio = Math.min(Math.max(0, ratio), 1);
1560       this.checkTrim();
1561     }
1562     get(key, touch = Touch.AsNew) {
1563       return super.get(key, touch);
1564     }
1565     peek(key) {
1566       return super.get(key, Touch.None);
1567     }
1568     set(key, value) {
1569       super.set(key, value, Touch.Last);
1570       this.checkTrim();
1571       return this;
1572     }
1573     checkTrim() {
1574       if (this.size > this._limit) {
1575         this.trimOld(Math.round(this._limit * this._ratio));
1576       }
1577     }
1578   };
1579   exports2.LRUCache = LRUCache;
1580 });
1581
1582 // node_modules/vscode-jsonrpc/lib/common/connection.js
1583 var require_connection = __commonJS((exports2) => {
1584   "use strict";
1585   Object.defineProperty(exports2, "__esModule", {value: true});
1586   exports2.createMessageConnection = exports2.ConnectionOptions = exports2.CancellationStrategy = exports2.CancellationSenderStrategy = exports2.CancellationReceiverStrategy = exports2.ConnectionStrategy = exports2.ConnectionError = exports2.ConnectionErrors = exports2.LogTraceNotification = exports2.SetTraceNotification = exports2.TraceFormat = exports2.Trace = exports2.NullLogger = exports2.ProgressType = void 0;
1587   var ral_1 = require_ral();
1588   var Is = require_is();
1589   var messages_1 = require_messages();
1590   var linkedMap_1 = require_linkedMap();
1591   var events_1 = require_events();
1592   var cancellation_1 = require_cancellation();
1593   var CancelNotification;
1594   (function(CancelNotification2) {
1595     CancelNotification2.type = new messages_1.NotificationType("$/cancelRequest");
1596   })(CancelNotification || (CancelNotification = {}));
1597   var ProgressNotification;
1598   (function(ProgressNotification2) {
1599     ProgressNotification2.type = new messages_1.NotificationType("$/progress");
1600   })(ProgressNotification || (ProgressNotification = {}));
1601   var ProgressType = class {
1602     constructor() {
1603     }
1604   };
1605   exports2.ProgressType = ProgressType;
1606   var StarRequestHandler;
1607   (function(StarRequestHandler2) {
1608     function is2(value) {
1609       return Is.func(value);
1610     }
1611     StarRequestHandler2.is = is2;
1612   })(StarRequestHandler || (StarRequestHandler = {}));
1613   exports2.NullLogger = Object.freeze({
1614     error: () => {
1615     },
1616     warn: () => {
1617     },
1618     info: () => {
1619     },
1620     log: () => {
1621     }
1622   });
1623   var Trace2;
1624   (function(Trace3) {
1625     Trace3[Trace3["Off"] = 0] = "Off";
1626     Trace3[Trace3["Messages"] = 1] = "Messages";
1627     Trace3[Trace3["Verbose"] = 2] = "Verbose";
1628   })(Trace2 = exports2.Trace || (exports2.Trace = {}));
1629   (function(Trace3) {
1630     function fromString(value) {
1631       if (!Is.string(value)) {
1632         return Trace3.Off;
1633       }
1634       value = value.toLowerCase();
1635       switch (value) {
1636         case "off":
1637           return Trace3.Off;
1638         case "messages":
1639           return Trace3.Messages;
1640         case "verbose":
1641           return Trace3.Verbose;
1642         default:
1643           return Trace3.Off;
1644       }
1645     }
1646     Trace3.fromString = fromString;
1647     function toString2(value) {
1648       switch (value) {
1649         case Trace3.Off:
1650           return "off";
1651         case Trace3.Messages:
1652           return "messages";
1653         case Trace3.Verbose:
1654           return "verbose";
1655         default:
1656           return "off";
1657       }
1658     }
1659     Trace3.toString = toString2;
1660   })(Trace2 = exports2.Trace || (exports2.Trace = {}));
1661   var TraceFormat;
1662   (function(TraceFormat2) {
1663     TraceFormat2["Text"] = "text";
1664     TraceFormat2["JSON"] = "json";
1665   })(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
1666   (function(TraceFormat2) {
1667     function fromString(value) {
1668       value = value.toLowerCase();
1669       if (value === "json") {
1670         return TraceFormat2.JSON;
1671       } else {
1672         return TraceFormat2.Text;
1673       }
1674     }
1675     TraceFormat2.fromString = fromString;
1676   })(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
1677   var SetTraceNotification;
1678   (function(SetTraceNotification2) {
1679     SetTraceNotification2.type = new messages_1.NotificationType("$/setTrace");
1680   })(SetTraceNotification = exports2.SetTraceNotification || (exports2.SetTraceNotification = {}));
1681   var LogTraceNotification;
1682   (function(LogTraceNotification2) {
1683     LogTraceNotification2.type = new messages_1.NotificationType("$/logTrace");
1684   })(LogTraceNotification = exports2.LogTraceNotification || (exports2.LogTraceNotification = {}));
1685   var ConnectionErrors;
1686   (function(ConnectionErrors2) {
1687     ConnectionErrors2[ConnectionErrors2["Closed"] = 1] = "Closed";
1688     ConnectionErrors2[ConnectionErrors2["Disposed"] = 2] = "Disposed";
1689     ConnectionErrors2[ConnectionErrors2["AlreadyListening"] = 3] = "AlreadyListening";
1690   })(ConnectionErrors = exports2.ConnectionErrors || (exports2.ConnectionErrors = {}));
1691   var ConnectionError = class extends Error {
1692     constructor(code, message) {
1693       super(message);
1694       this.code = code;
1695       Object.setPrototypeOf(this, ConnectionError.prototype);
1696     }
1697   };
1698   exports2.ConnectionError = ConnectionError;
1699   var ConnectionStrategy;
1700   (function(ConnectionStrategy2) {
1701     function is2(value) {
1702       const candidate = value;
1703       return candidate && Is.func(candidate.cancelUndispatched);
1704     }
1705     ConnectionStrategy2.is = is2;
1706   })(ConnectionStrategy = exports2.ConnectionStrategy || (exports2.ConnectionStrategy = {}));
1707   var CancellationReceiverStrategy;
1708   (function(CancellationReceiverStrategy2) {
1709     CancellationReceiverStrategy2.Message = Object.freeze({
1710       createCancellationTokenSource(_) {
1711         return new cancellation_1.CancellationTokenSource();
1712       }
1713     });
1714     function is2(value) {
1715       const candidate = value;
1716       return candidate && Is.func(candidate.createCancellationTokenSource);
1717     }
1718     CancellationReceiverStrategy2.is = is2;
1719   })(CancellationReceiverStrategy = exports2.CancellationReceiverStrategy || (exports2.CancellationReceiverStrategy = {}));
1720   var CancellationSenderStrategy;
1721   (function(CancellationSenderStrategy2) {
1722     CancellationSenderStrategy2.Message = Object.freeze({
1723       sendCancellation(conn, id) {
1724         conn.sendNotification(CancelNotification.type, {id});
1725       },
1726       cleanup(_) {
1727       }
1728     });
1729     function is2(value) {
1730       const candidate = value;
1731       return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);
1732     }
1733     CancellationSenderStrategy2.is = is2;
1734   })(CancellationSenderStrategy = exports2.CancellationSenderStrategy || (exports2.CancellationSenderStrategy = {}));
1735   var CancellationStrategy;
1736   (function(CancellationStrategy2) {
1737     CancellationStrategy2.Message = Object.freeze({
1738       receiver: CancellationReceiverStrategy.Message,
1739       sender: CancellationSenderStrategy.Message
1740     });
1741     function is2(value) {
1742       const candidate = value;
1743       return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
1744     }
1745     CancellationStrategy2.is = is2;
1746   })(CancellationStrategy = exports2.CancellationStrategy || (exports2.CancellationStrategy = {}));
1747   var ConnectionOptions;
1748   (function(ConnectionOptions2) {
1749     function is2(value) {
1750       const candidate = value;
1751       return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy));
1752     }
1753     ConnectionOptions2.is = is2;
1754   })(ConnectionOptions = exports2.ConnectionOptions || (exports2.ConnectionOptions = {}));
1755   var ConnectionState;
1756   (function(ConnectionState2) {
1757     ConnectionState2[ConnectionState2["New"] = 1] = "New";
1758     ConnectionState2[ConnectionState2["Listening"] = 2] = "Listening";
1759     ConnectionState2[ConnectionState2["Closed"] = 3] = "Closed";
1760     ConnectionState2[ConnectionState2["Disposed"] = 4] = "Disposed";
1761   })(ConnectionState || (ConnectionState = {}));
1762   function createMessageConnection(messageReader, messageWriter, _logger, options) {
1763     const logger = _logger !== void 0 ? _logger : exports2.NullLogger;
1764     let sequenceNumber = 0;
1765     let notificationSquenceNumber = 0;
1766     let unknownResponseSquenceNumber = 0;
1767     const version = "2.0";
1768     let starRequestHandler = void 0;
1769     const requestHandlers = Object.create(null);
1770     let starNotificationHandler = void 0;
1771     const notificationHandlers = Object.create(null);
1772     const progressHandlers = new Map();
1773     let timer;
1774     let messageQueue = new linkedMap_1.LinkedMap();
1775     let responsePromises = Object.create(null);
1776     let requestTokens = Object.create(null);
1777     let trace = Trace2.Off;
1778     let traceFormat = TraceFormat.Text;
1779     let tracer;
1780     let state = ConnectionState.New;
1781     const errorEmitter = new events_1.Emitter();
1782     const closeEmitter = new events_1.Emitter();
1783     const unhandledNotificationEmitter = new events_1.Emitter();
1784     const unhandledProgressEmitter = new events_1.Emitter();
1785     const disposeEmitter = new events_1.Emitter();
1786     const cancellationStrategy = options && options.cancellationStrategy ? options.cancellationStrategy : CancellationStrategy.Message;
1787     function createRequestQueueKey(id) {
1788       if (id === null) {
1789         throw new Error(`Can't send requests with id null since the response can't be correlated.`);
1790       }
1791       return "req-" + id.toString();
1792     }
1793     function createResponseQueueKey(id) {
1794       if (id === null) {
1795         return "res-unknown-" + (++unknownResponseSquenceNumber).toString();
1796       } else {
1797         return "res-" + id.toString();
1798       }
1799     }
1800     function createNotificationQueueKey() {
1801       return "not-" + (++notificationSquenceNumber).toString();
1802     }
1803     function addMessageToQueue(queue, message) {
1804       if (messages_1.isRequestMessage(message)) {
1805         queue.set(createRequestQueueKey(message.id), message);
1806       } else if (messages_1.isResponseMessage(message)) {
1807         queue.set(createResponseQueueKey(message.id), message);
1808       } else {
1809         queue.set(createNotificationQueueKey(), message);
1810       }
1811     }
1812     function cancelUndispatched(_message) {
1813       return void 0;
1814     }
1815     function isListening() {
1816       return state === ConnectionState.Listening;
1817     }
1818     function isClosed() {
1819       return state === ConnectionState.Closed;
1820     }
1821     function isDisposed() {
1822       return state === ConnectionState.Disposed;
1823     }
1824     function closeHandler() {
1825       if (state === ConnectionState.New || state === ConnectionState.Listening) {
1826         state = ConnectionState.Closed;
1827         closeEmitter.fire(void 0);
1828       }
1829     }
1830     function readErrorHandler(error) {
1831       errorEmitter.fire([error, void 0, void 0]);
1832     }
1833     function writeErrorHandler(data) {
1834       errorEmitter.fire(data);
1835     }
1836     messageReader.onClose(closeHandler);
1837     messageReader.onError(readErrorHandler);
1838     messageWriter.onClose(closeHandler);
1839     messageWriter.onError(writeErrorHandler);
1840     function triggerMessageQueue() {
1841       if (timer || messageQueue.size === 0) {
1842         return;
1843       }
1844       timer = ral_1.default().timer.setImmediate(() => {
1845         timer = void 0;
1846         processMessageQueue();
1847       });
1848     }
1849     function processMessageQueue() {
1850       if (messageQueue.size === 0) {
1851         return;
1852       }
1853       const message = messageQueue.shift();
1854       try {
1855         if (messages_1.isRequestMessage(message)) {
1856           handleRequest(message);
1857         } else if (messages_1.isNotificationMessage(message)) {
1858           handleNotification(message);
1859         } else if (messages_1.isResponseMessage(message)) {
1860           handleResponse(message);
1861         } else {
1862           handleInvalidMessage(message);
1863         }
1864       } finally {
1865         triggerMessageQueue();
1866       }
1867     }
1868     const callback = (message) => {
1869       try {
1870         if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
1871           const key = createRequestQueueKey(message.params.id);
1872           const toCancel = messageQueue.get(key);
1873           if (messages_1.isRequestMessage(toCancel)) {
1874             const strategy = options === null || options === void 0 ? void 0 : options.connectionStrategy;
1875             const response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
1876             if (response && (response.error !== void 0 || response.result !== void 0)) {
1877               messageQueue.delete(key);
1878               response.id = toCancel.id;
1879               traceSendingResponse(response, message.method, Date.now());
1880               messageWriter.write(response);
1881               return;
1882             }
1883           }
1884         }
1885         addMessageToQueue(messageQueue, message);
1886       } finally {
1887         triggerMessageQueue();
1888       }
1889     };
1890     function handleRequest(requestMessage) {
1891       if (isDisposed()) {
1892         return;
1893       }
1894       function reply(resultOrError, method, startTime2) {
1895         const message = {
1896           jsonrpc: version,
1897           id: requestMessage.id
1898         };
1899         if (resultOrError instanceof messages_1.ResponseError) {
1900           message.error = resultOrError.toJson();
1901         } else {
1902           message.result = resultOrError === void 0 ? null : resultOrError;
1903         }
1904         traceSendingResponse(message, method, startTime2);
1905         messageWriter.write(message);
1906       }
1907       function replyError(error, method, startTime2) {
1908         const message = {
1909           jsonrpc: version,
1910           id: requestMessage.id,
1911           error: error.toJson()
1912         };
1913         traceSendingResponse(message, method, startTime2);
1914         messageWriter.write(message);
1915       }
1916       function replySuccess(result, method, startTime2) {
1917         if (result === void 0) {
1918           result = null;
1919         }
1920         const message = {
1921           jsonrpc: version,
1922           id: requestMessage.id,
1923           result
1924         };
1925         traceSendingResponse(message, method, startTime2);
1926         messageWriter.write(message);
1927       }
1928       traceReceivedRequest(requestMessage);
1929       const element = requestHandlers[requestMessage.method];
1930       let type;
1931       let requestHandler;
1932       if (element) {
1933         type = element.type;
1934         requestHandler = element.handler;
1935       }
1936       const startTime = Date.now();
1937       if (requestHandler || starRequestHandler) {
1938         const tokenKey = String(requestMessage.id);
1939         const cancellationSource = cancellationStrategy.receiver.createCancellationTokenSource(tokenKey);
1940         requestTokens[tokenKey] = cancellationSource;
1941         try {
1942           let handlerResult;
1943           if (requestHandler) {
1944             if (requestMessage.params === void 0) {
1945               if (type !== void 0 && type.numberOfParams !== 0) {
1946                 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but recevied none.`), requestMessage.method, startTime);
1947                 return;
1948               }
1949               handlerResult = requestHandler(cancellationSource.token);
1950             } else if (Array.isArray(requestMessage.params)) {
1951               if (type !== void 0 && type.parameterStructures === messages_1.ParameterStructures.byName) {
1952                 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
1953                 return;
1954               }
1955               handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
1956             } else {
1957               if (type !== void 0 && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
1958                 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
1959                 return;
1960               }
1961               handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
1962             }
1963           } else if (starRequestHandler) {
1964             handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
1965           }
1966           const promise = handlerResult;
1967           if (!handlerResult) {
1968             delete requestTokens[tokenKey];
1969             replySuccess(handlerResult, requestMessage.method, startTime);
1970           } else if (promise.then) {
1971             promise.then((resultOrError) => {
1972               delete requestTokens[tokenKey];
1973               reply(resultOrError, requestMessage.method, startTime);
1974             }, (error) => {
1975               delete requestTokens[tokenKey];
1976               if (error instanceof messages_1.ResponseError) {
1977                 replyError(error, requestMessage.method, startTime);
1978               } else if (error && Is.string(error.message)) {
1979                 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1980               } else {
1981                 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1982               }
1983             });
1984           } else {
1985             delete requestTokens[tokenKey];
1986             reply(handlerResult, requestMessage.method, startTime);
1987           }
1988         } catch (error) {
1989           delete requestTokens[tokenKey];
1990           if (error instanceof messages_1.ResponseError) {
1991             reply(error, requestMessage.method, startTime);
1992           } else if (error && Is.string(error.message)) {
1993             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1994           } else {
1995             replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1996           }
1997         }
1998       } else {
1999         replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
2000       }
2001     }
2002     function handleResponse(responseMessage) {
2003       if (isDisposed()) {
2004         return;
2005       }
2006       if (responseMessage.id === null) {
2007         if (responseMessage.error) {
2008           logger.error(`Received response message without id: Error is: 
2009 ${JSON.stringify(responseMessage.error, void 0, 4)}`);
2010         } else {
2011           logger.error(`Received response message without id. No further error information provided.`);
2012         }
2013       } else {
2014         const key = String(responseMessage.id);
2015         const responsePromise = responsePromises[key];
2016         traceReceivedResponse(responseMessage, responsePromise);
2017         if (responsePromise) {
2018           delete responsePromises[key];
2019           try {
2020             if (responseMessage.error) {
2021               const error = responseMessage.error;
2022               responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
2023             } else if (responseMessage.result !== void 0) {
2024               responsePromise.resolve(responseMessage.result);
2025             } else {
2026               throw new Error("Should never happen.");
2027             }
2028           } catch (error) {
2029             if (error.message) {
2030               logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
2031             } else {
2032               logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
2033             }
2034           }
2035         }
2036       }
2037     }
2038     function handleNotification(message) {
2039       if (isDisposed()) {
2040         return;
2041       }
2042       let type = void 0;
2043       let notificationHandler;
2044       if (message.method === CancelNotification.type.method) {
2045         notificationHandler = (params) => {
2046           const id = params.id;
2047           const source = requestTokens[String(id)];
2048           if (source) {
2049             source.cancel();
2050           }
2051         };
2052       } else {
2053         const element = notificationHandlers[message.method];
2054         if (element) {
2055           notificationHandler = element.handler;
2056           type = element.type;
2057         }
2058       }
2059       if (notificationHandler || starNotificationHandler) {
2060         try {
2061           traceReceivedNotification(message);
2062           if (notificationHandler) {
2063             if (message.params === void 0) {
2064               if (type !== void 0) {
2065                 if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) {
2066                   logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but recevied none.`);
2067                 }
2068               }
2069               notificationHandler();
2070             } else if (Array.isArray(message.params)) {
2071               if (type !== void 0) {
2072                 if (type.parameterStructures === messages_1.ParameterStructures.byName) {
2073                   logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
2074                 }
2075                 if (type.numberOfParams !== message.params.length) {
2076                   logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${message.params.length} argumennts`);
2077                 }
2078               }
2079               notificationHandler(...message.params);
2080             } else {
2081               if (type !== void 0 && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
2082                 logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
2083               }
2084               notificationHandler(message.params);
2085             }
2086           } else if (starNotificationHandler) {
2087             starNotificationHandler(message.method, message.params);
2088           }
2089         } catch (error) {
2090           if (error.message) {
2091             logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
2092           } else {
2093             logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
2094           }
2095         }
2096       } else {
2097         unhandledNotificationEmitter.fire(message);
2098       }
2099     }
2100     function handleInvalidMessage(message) {
2101       if (!message) {
2102         logger.error("Received empty message.");
2103         return;
2104       }
2105       logger.error(`Received message which is neither a response nor a notification message:
2106 ${JSON.stringify(message, null, 4)}`);
2107       const responseMessage = message;
2108       if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
2109         const key = String(responseMessage.id);
2110         const responseHandler = responsePromises[key];
2111         if (responseHandler) {
2112           responseHandler.reject(new Error("The received response has neither a result nor an error property."));
2113         }
2114       }
2115     }
2116     function traceSendingRequest(message) {
2117       if (trace === Trace2.Off || !tracer) {
2118         return;
2119       }
2120       if (traceFormat === TraceFormat.Text) {
2121         let data = void 0;
2122         if (trace === Trace2.Verbose && message.params) {
2123           data = `Params: ${JSON.stringify(message.params, null, 4)}
2124
2125 `;
2126         }
2127         tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
2128       } else {
2129         logLSPMessage("send-request", message);
2130       }
2131     }
2132     function traceSendingNotification(message) {
2133       if (trace === Trace2.Off || !tracer) {
2134         return;
2135       }
2136       if (traceFormat === TraceFormat.Text) {
2137         let data = void 0;
2138         if (trace === Trace2.Verbose) {
2139           if (message.params) {
2140             data = `Params: ${JSON.stringify(message.params, null, 4)}
2141
2142 `;
2143           } else {
2144             data = "No parameters provided.\n\n";
2145           }
2146         }
2147         tracer.log(`Sending notification '${message.method}'.`, data);
2148       } else {
2149         logLSPMessage("send-notification", message);
2150       }
2151     }
2152     function traceSendingResponse(message, method, startTime) {
2153       if (trace === Trace2.Off || !tracer) {
2154         return;
2155       }
2156       if (traceFormat === TraceFormat.Text) {
2157         let data = void 0;
2158         if (trace === Trace2.Verbose) {
2159           if (message.error && message.error.data) {
2160             data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
2161
2162 `;
2163           } else {
2164             if (message.result) {
2165               data = `Result: ${JSON.stringify(message.result, null, 4)}
2166
2167 `;
2168             } else if (message.error === void 0) {
2169               data = "No result returned.\n\n";
2170             }
2171           }
2172         }
2173         tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
2174       } else {
2175         logLSPMessage("send-response", message);
2176       }
2177     }
2178     function traceReceivedRequest(message) {
2179       if (trace === Trace2.Off || !tracer) {
2180         return;
2181       }
2182       if (traceFormat === TraceFormat.Text) {
2183         let data = void 0;
2184         if (trace === Trace2.Verbose && message.params) {
2185           data = `Params: ${JSON.stringify(message.params, null, 4)}
2186
2187 `;
2188         }
2189         tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
2190       } else {
2191         logLSPMessage("receive-request", message);
2192       }
2193     }
2194     function traceReceivedNotification(message) {
2195       if (trace === Trace2.Off || !tracer || message.method === LogTraceNotification.type.method) {
2196         return;
2197       }
2198       if (traceFormat === TraceFormat.Text) {
2199         let data = void 0;
2200         if (trace === Trace2.Verbose) {
2201           if (message.params) {
2202             data = `Params: ${JSON.stringify(message.params, null, 4)}
2203
2204 `;
2205           } else {
2206             data = "No parameters provided.\n\n";
2207           }
2208         }
2209         tracer.log(`Received notification '${message.method}'.`, data);
2210       } else {
2211         logLSPMessage("receive-notification", message);
2212       }
2213     }
2214     function traceReceivedResponse(message, responsePromise) {
2215       if (trace === Trace2.Off || !tracer) {
2216         return;
2217       }
2218       if (traceFormat === TraceFormat.Text) {
2219         let data = void 0;
2220         if (trace === Trace2.Verbose) {
2221           if (message.error && message.error.data) {
2222             data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
2223
2224 `;
2225           } else {
2226             if (message.result) {
2227               data = `Result: ${JSON.stringify(message.result, null, 4)}
2228
2229 `;
2230             } else if (message.error === void 0) {
2231               data = "No result returned.\n\n";
2232             }
2233           }
2234         }
2235         if (responsePromise) {
2236           const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
2237           tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
2238         } else {
2239           tracer.log(`Received response ${message.id} without active response promise.`, data);
2240         }
2241       } else {
2242         logLSPMessage("receive-response", message);
2243       }
2244     }
2245     function logLSPMessage(type, message) {
2246       if (!tracer || trace === Trace2.Off) {
2247         return;
2248       }
2249       const lspMessage = {
2250         isLSPMessage: true,
2251         type,
2252         message,
2253         timestamp: Date.now()
2254       };
2255       tracer.log(lspMessage);
2256     }
2257     function throwIfClosedOrDisposed() {
2258       if (isClosed()) {
2259         throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
2260       }
2261       if (isDisposed()) {
2262         throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
2263       }
2264     }
2265     function throwIfListening() {
2266       if (isListening()) {
2267         throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
2268       }
2269     }
2270     function throwIfNotListening() {
2271       if (!isListening()) {
2272         throw new Error("Call listen() first.");
2273       }
2274     }
2275     function undefinedToNull(param) {
2276       if (param === void 0) {
2277         return null;
2278       } else {
2279         return param;
2280       }
2281     }
2282     function nullToUndefined(param) {
2283       if (param === null) {
2284         return void 0;
2285       } else {
2286         return param;
2287       }
2288     }
2289     function isNamedParam(param) {
2290       return param !== void 0 && param !== null && !Array.isArray(param) && typeof param === "object";
2291     }
2292     function computeSingleParam(parameterStructures, param) {
2293       switch (parameterStructures) {
2294         case messages_1.ParameterStructures.auto:
2295           if (isNamedParam(param)) {
2296             return nullToUndefined(param);
2297           } else {
2298             return [undefinedToNull(param)];
2299           }
2300           break;
2301         case messages_1.ParameterStructures.byName:
2302           if (!isNamedParam(param)) {
2303             throw new Error(`Recevied parameters by name but param is not an object literal.`);
2304           }
2305           return nullToUndefined(param);
2306         case messages_1.ParameterStructures.byPosition:
2307           return [undefinedToNull(param)];
2308         default:
2309           throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
2310       }
2311     }
2312     function computeMessageParams(type, params) {
2313       let result;
2314       const numberOfParams = type.numberOfParams;
2315       switch (numberOfParams) {
2316         case 0:
2317           result = void 0;
2318           break;
2319         case 1:
2320           result = computeSingleParam(type.parameterStructures, params[0]);
2321           break;
2322         default:
2323           result = [];
2324           for (let i = 0; i < params.length && i < numberOfParams; i++) {
2325             result.push(undefinedToNull(params[i]));
2326           }
2327           if (params.length < numberOfParams) {
2328             for (let i = params.length; i < numberOfParams; i++) {
2329               result.push(null);
2330             }
2331           }
2332           break;
2333       }
2334       return result;
2335     }
2336     const connection = {
2337       sendNotification: (type, ...args) => {
2338         throwIfClosedOrDisposed();
2339         let method;
2340         let messageParams;
2341         if (Is.string(type)) {
2342           method = type;
2343           const first = args[0];
2344           let paramStart = 0;
2345           let parameterStructures = messages_1.ParameterStructures.auto;
2346           if (messages_1.ParameterStructures.is(first)) {
2347             paramStart = 1;
2348             parameterStructures = first;
2349           }
2350           let paramEnd = args.length;
2351           const numberOfParams = paramEnd - paramStart;
2352           switch (numberOfParams) {
2353             case 0:
2354               messageParams = void 0;
2355               break;
2356             case 1:
2357               messageParams = computeSingleParam(parameterStructures, args[paramStart]);
2358               break;
2359             default:
2360               if (parameterStructures === messages_1.ParameterStructures.byName) {
2361                 throw new Error(`Recevied ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
2362               }
2363               messageParams = args.slice(paramStart, paramEnd).map((value) => undefinedToNull(value));
2364               break;
2365           }
2366         } else {
2367           const params = args;
2368           method = type.method;
2369           messageParams = computeMessageParams(type, params);
2370         }
2371         const notificationMessage = {
2372           jsonrpc: version,
2373           method,
2374           params: messageParams
2375         };
2376         traceSendingNotification(notificationMessage);
2377         messageWriter.write(notificationMessage);
2378       },
2379       onNotification: (type, handler) => {
2380         throwIfClosedOrDisposed();
2381         let method;
2382         if (Is.func(type)) {
2383           starNotificationHandler = type;
2384         } else if (handler) {
2385           if (Is.string(type)) {
2386             method = type;
2387             notificationHandlers[type] = {type: void 0, handler};
2388           } else {
2389             method = type.method;
2390             notificationHandlers[type.method] = {type, handler};
2391           }
2392         }
2393         return {
2394           dispose: () => {
2395             if (method !== void 0) {
2396               delete notificationHandlers[method];
2397             } else {
2398               starNotificationHandler = void 0;
2399             }
2400           }
2401         };
2402       },
2403       onProgress: (_type, token, handler) => {
2404         if (progressHandlers.has(token)) {
2405           throw new Error(`Progress handler for token ${token} already registered`);
2406         }
2407         progressHandlers.set(token, handler);
2408         return {
2409           dispose: () => {
2410             progressHandlers.delete(token);
2411           }
2412         };
2413       },
2414       sendProgress: (_type, token, value) => {
2415         connection.sendNotification(ProgressNotification.type, {token, value});
2416       },
2417       onUnhandledProgress: unhandledProgressEmitter.event,
2418       sendRequest: (type, ...args) => {
2419         throwIfClosedOrDisposed();
2420         throwIfNotListening();
2421         let method;
2422         let messageParams;
2423         let token = void 0;
2424         if (Is.string(type)) {
2425           method = type;
2426           const first = args[0];
2427           const last = args[args.length - 1];
2428           let paramStart = 0;
2429           let parameterStructures = messages_1.ParameterStructures.auto;
2430           if (messages_1.ParameterStructures.is(first)) {
2431             paramStart = 1;
2432             parameterStructures = first;
2433           }
2434           let paramEnd = args.length;
2435           if (cancellation_1.CancellationToken.is(last)) {
2436             paramEnd = paramEnd - 1;
2437             token = last;
2438           }
2439           const numberOfParams = paramEnd - paramStart;
2440           switch (numberOfParams) {
2441             case 0:
2442               messageParams = void 0;
2443               break;
2444             case 1:
2445               messageParams = computeSingleParam(parameterStructures, args[paramStart]);
2446               break;
2447             default:
2448               if (parameterStructures === messages_1.ParameterStructures.byName) {
2449                 throw new Error(`Recevied ${numberOfParams} parameters for 'by Name' request parameter structure.`);
2450               }
2451               messageParams = args.slice(paramStart, paramEnd).map((value) => undefinedToNull(value));
2452               break;
2453           }
2454         } else {
2455           const params = args;
2456           method = type.method;
2457           messageParams = computeMessageParams(type, params);
2458           const numberOfParams = type.numberOfParams;
2459           token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : void 0;
2460         }
2461         const id = sequenceNumber++;
2462         let disposable;
2463         if (token) {
2464           disposable = token.onCancellationRequested(() => {
2465             cancellationStrategy.sender.sendCancellation(connection, id);
2466           });
2467         }
2468         const result = new Promise((resolve, reject) => {
2469           const requestMessage = {
2470             jsonrpc: version,
2471             id,
2472             method,
2473             params: messageParams
2474           };
2475           const resolveWithCleanup = (r) => {
2476             resolve(r);
2477             cancellationStrategy.sender.cleanup(id);
2478             disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
2479           };
2480           const rejectWithCleanup = (r) => {
2481             reject(r);
2482             cancellationStrategy.sender.cleanup(id);
2483             disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
2484           };
2485           let responsePromise = {method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup};
2486           traceSendingRequest(requestMessage);
2487           try {
2488             messageWriter.write(requestMessage);
2489           } catch (e) {
2490             responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : "Unknown reason"));
2491             responsePromise = null;
2492           }
2493           if (responsePromise) {
2494             responsePromises[String(id)] = responsePromise;
2495           }
2496         });
2497         return result;
2498       },
2499       onRequest: (type, handler) => {
2500         throwIfClosedOrDisposed();
2501         let method = null;
2502         if (StarRequestHandler.is(type)) {
2503           method = void 0;
2504           starRequestHandler = type;
2505         } else if (Is.string(type)) {
2506           method = null;
2507           if (handler !== void 0) {
2508             method = type;
2509             requestHandlers[type] = {handler, type: void 0};
2510           }
2511         } else {
2512           if (handler !== void 0) {
2513             method = type.method;
2514             requestHandlers[type.method] = {type, handler};
2515           }
2516         }
2517         return {
2518           dispose: () => {
2519             if (method === null) {
2520               return;
2521             }
2522             if (method !== void 0) {
2523               delete requestHandlers[method];
2524             } else {
2525               starRequestHandler = void 0;
2526             }
2527           }
2528         };
2529       },
2530       trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
2531         let _sendNotification = false;
2532         let _traceFormat = TraceFormat.Text;
2533         if (sendNotificationOrTraceOptions !== void 0) {
2534           if (Is.boolean(sendNotificationOrTraceOptions)) {
2535             _sendNotification = sendNotificationOrTraceOptions;
2536           } else {
2537             _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
2538             _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
2539           }
2540         }
2541         trace = _value;
2542         traceFormat = _traceFormat;
2543         if (trace === Trace2.Off) {
2544           tracer = void 0;
2545         } else {
2546           tracer = _tracer;
2547         }
2548         if (_sendNotification && !isClosed() && !isDisposed()) {
2549           connection.sendNotification(SetTraceNotification.type, {value: Trace2.toString(_value)});
2550         }
2551       },
2552       onError: errorEmitter.event,
2553       onClose: closeEmitter.event,
2554       onUnhandledNotification: unhandledNotificationEmitter.event,
2555       onDispose: disposeEmitter.event,
2556       end: () => {
2557         messageWriter.end();
2558       },
2559       dispose: () => {
2560         if (isDisposed()) {
2561           return;
2562         }
2563         state = ConnectionState.Disposed;
2564         disposeEmitter.fire(void 0);
2565         const error = new Error("Connection got disposed.");
2566         Object.keys(responsePromises).forEach((key) => {
2567           responsePromises[key].reject(error);
2568         });
2569         responsePromises = Object.create(null);
2570         requestTokens = Object.create(null);
2571         messageQueue = new linkedMap_1.LinkedMap();
2572         if (Is.func(messageWriter.dispose)) {
2573           messageWriter.dispose();
2574         }
2575         if (Is.func(messageReader.dispose)) {
2576           messageReader.dispose();
2577         }
2578       },
2579       listen: () => {
2580         throwIfClosedOrDisposed();
2581         throwIfListening();
2582         state = ConnectionState.Listening;
2583         messageReader.listen(callback);
2584       },
2585       inspect: () => {
2586         ral_1.default().console.log("inspect");
2587       }
2588     };
2589     connection.onNotification(LogTraceNotification.type, (params) => {
2590       if (trace === Trace2.Off || !tracer) {
2591         return;
2592       }
2593       tracer.log(params.message, trace === Trace2.Verbose ? params.verbose : void 0);
2594     });
2595     connection.onNotification(ProgressNotification.type, (params) => {
2596       const handler = progressHandlers.get(params.token);
2597       if (handler) {
2598         handler(params.value);
2599       } else {
2600         unhandledProgressEmitter.fire(params);
2601       }
2602     });
2603     return connection;
2604   }
2605   exports2.createMessageConnection = createMessageConnection;
2606 });
2607
2608 // node_modules/vscode-jsonrpc/lib/common/api.js
2609 var require_api = __commonJS((exports2) => {
2610   "use strict";
2611   Object.defineProperty(exports2, "__esModule", {value: true});
2612   exports2.CancellationSenderStrategy = exports2.CancellationReceiverStrategy = exports2.ConnectionError = exports2.ConnectionErrors = exports2.LogTraceNotification = exports2.SetTraceNotification = exports2.TraceFormat = exports2.Trace = exports2.ProgressType = exports2.createMessageConnection = exports2.NullLogger = exports2.ConnectionOptions = exports2.ConnectionStrategy = exports2.WriteableStreamMessageWriter = exports2.AbstractMessageWriter = exports2.MessageWriter = exports2.ReadableStreamMessageReader = exports2.AbstractMessageReader = exports2.MessageReader = exports2.CancellationToken = exports2.CancellationTokenSource = exports2.Emitter = exports2.Event = exports2.Disposable = exports2.ParameterStructures = exports2.NotificationType9 = exports2.NotificationType8 = exports2.NotificationType7 = exports2.NotificationType6 = exports2.NotificationType5 = exports2.NotificationType4 = exports2.NotificationType3 = exports2.NotificationType2 = exports2.NotificationType1 = exports2.NotificationType0 = exports2.NotificationType = exports2.ErrorCodes = exports2.ResponseError = exports2.RequestType9 = exports2.RequestType8 = exports2.RequestType7 = exports2.RequestType6 = exports2.RequestType5 = exports2.RequestType4 = exports2.RequestType3 = exports2.RequestType2 = exports2.RequestType1 = exports2.RequestType0 = exports2.RequestType = exports2.RAL = void 0;
2613   exports2.CancellationStrategy = void 0;
2614   var messages_1 = require_messages();
2615   Object.defineProperty(exports2, "RequestType", {enumerable: true, get: function() {
2616     return messages_1.RequestType;
2617   }});
2618   Object.defineProperty(exports2, "RequestType0", {enumerable: true, get: function() {
2619     return messages_1.RequestType0;
2620   }});
2621   Object.defineProperty(exports2, "RequestType1", {enumerable: true, get: function() {
2622     return messages_1.RequestType1;
2623   }});
2624   Object.defineProperty(exports2, "RequestType2", {enumerable: true, get: function() {
2625     return messages_1.RequestType2;
2626   }});
2627   Object.defineProperty(exports2, "RequestType3", {enumerable: true, get: function() {
2628     return messages_1.RequestType3;
2629   }});
2630   Object.defineProperty(exports2, "RequestType4", {enumerable: true, get: function() {
2631     return messages_1.RequestType4;
2632   }});
2633   Object.defineProperty(exports2, "RequestType5", {enumerable: true, get: function() {
2634     return messages_1.RequestType5;
2635   }});
2636   Object.defineProperty(exports2, "RequestType6", {enumerable: true, get: function() {
2637     return messages_1.RequestType6;
2638   }});
2639   Object.defineProperty(exports2, "RequestType7", {enumerable: true, get: function() {
2640     return messages_1.RequestType7;
2641   }});
2642   Object.defineProperty(exports2, "RequestType8", {enumerable: true, get: function() {
2643     return messages_1.RequestType8;
2644   }});
2645   Object.defineProperty(exports2, "RequestType9", {enumerable: true, get: function() {
2646     return messages_1.RequestType9;
2647   }});
2648   Object.defineProperty(exports2, "ResponseError", {enumerable: true, get: function() {
2649     return messages_1.ResponseError;
2650   }});
2651   Object.defineProperty(exports2, "ErrorCodes", {enumerable: true, get: function() {
2652     return messages_1.ErrorCodes;
2653   }});
2654   Object.defineProperty(exports2, "NotificationType", {enumerable: true, get: function() {
2655     return messages_1.NotificationType;
2656   }});
2657   Object.defineProperty(exports2, "NotificationType0", {enumerable: true, get: function() {
2658     return messages_1.NotificationType0;
2659   }});
2660   Object.defineProperty(exports2, "NotificationType1", {enumerable: true, get: function() {
2661     return messages_1.NotificationType1;
2662   }});
2663   Object.defineProperty(exports2, "NotificationType2", {enumerable: true, get: function() {
2664     return messages_1.NotificationType2;
2665   }});
2666   Object.defineProperty(exports2, "NotificationType3", {enumerable: true, get: function() {
2667     return messages_1.NotificationType3;
2668   }});
2669   Object.defineProperty(exports2, "NotificationType4", {enumerable: true, get: function() {
2670     return messages_1.NotificationType4;
2671   }});
2672   Object.defineProperty(exports2, "NotificationType5", {enumerable: true, get: function() {
2673     return messages_1.NotificationType5;
2674   }});
2675   Object.defineProperty(exports2, "NotificationType6", {enumerable: true, get: function() {
2676     return messages_1.NotificationType6;
2677   }});
2678   Object.defineProperty(exports2, "NotificationType7", {enumerable: true, get: function() {
2679     return messages_1.NotificationType7;
2680   }});
2681   Object.defineProperty(exports2, "NotificationType8", {enumerable: true, get: function() {
2682     return messages_1.NotificationType8;
2683   }});
2684   Object.defineProperty(exports2, "NotificationType9", {enumerable: true, get: function() {
2685     return messages_1.NotificationType9;
2686   }});
2687   Object.defineProperty(exports2, "ParameterStructures", {enumerable: true, get: function() {
2688     return messages_1.ParameterStructures;
2689   }});
2690   var disposable_1 = require_disposable();
2691   Object.defineProperty(exports2, "Disposable", {enumerable: true, get: function() {
2692     return disposable_1.Disposable;
2693   }});
2694   var events_1 = require_events();
2695   Object.defineProperty(exports2, "Event", {enumerable: true, get: function() {
2696     return events_1.Event;
2697   }});
2698   Object.defineProperty(exports2, "Emitter", {enumerable: true, get: function() {
2699     return events_1.Emitter;
2700   }});
2701   var cancellation_1 = require_cancellation();
2702   Object.defineProperty(exports2, "CancellationTokenSource", {enumerable: true, get: function() {
2703     return cancellation_1.CancellationTokenSource;
2704   }});
2705   Object.defineProperty(exports2, "CancellationToken", {enumerable: true, get: function() {
2706     return cancellation_1.CancellationToken;
2707   }});
2708   var messageReader_1 = require_messageReader();
2709   Object.defineProperty(exports2, "MessageReader", {enumerable: true, get: function() {
2710     return messageReader_1.MessageReader;
2711   }});
2712   Object.defineProperty(exports2, "AbstractMessageReader", {enumerable: true, get: function() {
2713     return messageReader_1.AbstractMessageReader;
2714   }});
2715   Object.defineProperty(exports2, "ReadableStreamMessageReader", {enumerable: true, get: function() {
2716     return messageReader_1.ReadableStreamMessageReader;
2717   }});
2718   var messageWriter_1 = require_messageWriter();
2719   Object.defineProperty(exports2, "MessageWriter", {enumerable: true, get: function() {
2720     return messageWriter_1.MessageWriter;
2721   }});
2722   Object.defineProperty(exports2, "AbstractMessageWriter", {enumerable: true, get: function() {
2723     return messageWriter_1.AbstractMessageWriter;
2724   }});
2725   Object.defineProperty(exports2, "WriteableStreamMessageWriter", {enumerable: true, get: function() {
2726     return messageWriter_1.WriteableStreamMessageWriter;
2727   }});
2728   var connection_1 = require_connection();
2729   Object.defineProperty(exports2, "ConnectionStrategy", {enumerable: true, get: function() {
2730     return connection_1.ConnectionStrategy;
2731   }});
2732   Object.defineProperty(exports2, "ConnectionOptions", {enumerable: true, get: function() {
2733     return connection_1.ConnectionOptions;
2734   }});
2735   Object.defineProperty(exports2, "NullLogger", {enumerable: true, get: function() {
2736     return connection_1.NullLogger;
2737   }});
2738   Object.defineProperty(exports2, "createMessageConnection", {enumerable: true, get: function() {
2739     return connection_1.createMessageConnection;
2740   }});
2741   Object.defineProperty(exports2, "ProgressType", {enumerable: true, get: function() {
2742     return connection_1.ProgressType;
2743   }});
2744   Object.defineProperty(exports2, "Trace", {enumerable: true, get: function() {
2745     return connection_1.Trace;
2746   }});
2747   Object.defineProperty(exports2, "TraceFormat", {enumerable: true, get: function() {
2748     return connection_1.TraceFormat;
2749   }});
2750   Object.defineProperty(exports2, "SetTraceNotification", {enumerable: true, get: function() {
2751     return connection_1.SetTraceNotification;
2752   }});
2753   Object.defineProperty(exports2, "LogTraceNotification", {enumerable: true, get: function() {
2754     return connection_1.LogTraceNotification;
2755   }});
2756   Object.defineProperty(exports2, "ConnectionErrors", {enumerable: true, get: function() {
2757     return connection_1.ConnectionErrors;
2758   }});
2759   Object.defineProperty(exports2, "ConnectionError", {enumerable: true, get: function() {
2760     return connection_1.ConnectionError;
2761   }});
2762   Object.defineProperty(exports2, "CancellationReceiverStrategy", {enumerable: true, get: function() {
2763     return connection_1.CancellationReceiverStrategy;
2764   }});
2765   Object.defineProperty(exports2, "CancellationSenderStrategy", {enumerable: true, get: function() {
2766     return connection_1.CancellationSenderStrategy;
2767   }});
2768   Object.defineProperty(exports2, "CancellationStrategy", {enumerable: true, get: function() {
2769     return connection_1.CancellationStrategy;
2770   }});
2771   var ral_1 = require_ral();
2772   exports2.RAL = ral_1.default;
2773 });
2774
2775 // node_modules/vscode-jsonrpc/lib/node/main.js
2776 var require_main = __commonJS((exports2) => {
2777   "use strict";
2778   var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
2779     if (k2 === void 0)
2780       k2 = k;
2781     Object.defineProperty(o, k2, {enumerable: true, get: function() {
2782       return m[k];
2783     }});
2784   } : function(o, m, k, k2) {
2785     if (k2 === void 0)
2786       k2 = k;
2787     o[k2] = m[k];
2788   });
2789   var __exportStar2 = exports2 && exports2.__exportStar || function(m, exports3) {
2790     for (var p in m)
2791       if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
2792         __createBinding(exports3, m, p);
2793   };
2794   Object.defineProperty(exports2, "__esModule", {value: true});
2795   exports2.createMessageConnection = exports2.createServerSocketTransport = exports2.createClientSocketTransport = exports2.createServerPipeTransport = exports2.createClientPipeTransport = exports2.generateRandomPipeName = exports2.StreamMessageWriter = exports2.StreamMessageReader = exports2.SocketMessageWriter = exports2.SocketMessageReader = exports2.IPCMessageWriter = exports2.IPCMessageReader = void 0;
2796   var ril_1 = require_ril();
2797   ril_1.default.install();
2798   var api_1 = require_api();
2799   var path9 = require("path");
2800   var os3 = require("os");
2801   var crypto_1 = require("crypto");
2802   var net_1 = require("net");
2803   __exportStar2(require_api(), exports2);
2804   var IPCMessageReader = class extends api_1.AbstractMessageReader {
2805     constructor(process2) {
2806       super();
2807       this.process = process2;
2808       let eventEmitter = this.process;
2809       eventEmitter.on("error", (error) => this.fireError(error));
2810       eventEmitter.on("close", () => this.fireClose());
2811     }
2812     listen(callback) {
2813       this.process.on("message", callback);
2814       return api_1.Disposable.create(() => this.process.off("message", callback));
2815     }
2816   };
2817   exports2.IPCMessageReader = IPCMessageReader;
2818   var IPCMessageWriter = class extends api_1.AbstractMessageWriter {
2819     constructor(process2) {
2820       super();
2821       this.process = process2;
2822       this.errorCount = 0;
2823       let eventEmitter = this.process;
2824       eventEmitter.on("error", (error) => this.fireError(error));
2825       eventEmitter.on("close", () => this.fireClose);
2826     }
2827     write(msg) {
2828       try {
2829         if (typeof this.process.send === "function") {
2830           this.process.send(msg, void 0, void 0, (error) => {
2831             if (error) {
2832               this.errorCount++;
2833               this.handleError(error, msg);
2834             } else {
2835               this.errorCount = 0;
2836             }
2837           });
2838         }
2839         return Promise.resolve();
2840       } catch (error) {
2841         this.handleError(error, msg);
2842         return Promise.reject(error);
2843       }
2844     }
2845     handleError(error, msg) {
2846       this.errorCount++;
2847       this.fireError(error, msg, this.errorCount);
2848     }
2849     end() {
2850     }
2851   };
2852   exports2.IPCMessageWriter = IPCMessageWriter;
2853   var SocketMessageReader = class extends api_1.ReadableStreamMessageReader {
2854     constructor(socket, encoding = "utf-8") {
2855       super(ril_1.default().stream.asReadableStream(socket), encoding);
2856     }
2857   };
2858   exports2.SocketMessageReader = SocketMessageReader;
2859   var SocketMessageWriter = class extends api_1.WriteableStreamMessageWriter {
2860     constructor(socket, options) {
2861       super(ril_1.default().stream.asWritableStream(socket), options);
2862       this.socket = socket;
2863     }
2864     dispose() {
2865       super.dispose();
2866       this.socket.destroy();
2867     }
2868   };
2869   exports2.SocketMessageWriter = SocketMessageWriter;
2870   var StreamMessageReader = class extends api_1.ReadableStreamMessageReader {
2871     constructor(readble, encoding) {
2872       super(ril_1.default().stream.asReadableStream(readble), encoding);
2873     }
2874   };
2875   exports2.StreamMessageReader = StreamMessageReader;
2876   var StreamMessageWriter = class extends api_1.WriteableStreamMessageWriter {
2877     constructor(writable, options) {
2878       super(ril_1.default().stream.asWritableStream(writable), options);
2879     }
2880   };
2881   exports2.StreamMessageWriter = StreamMessageWriter;
2882   var XDG_RUNTIME_DIR = process.env["XDG_RUNTIME_DIR"];
2883   var safeIpcPathLengths = new Map([
2884     ["linux", 107],
2885     ["darwin", 103]
2886   ]);
2887   function generateRandomPipeName() {
2888     const randomSuffix = crypto_1.randomBytes(21).toString("hex");
2889     if (process.platform === "win32") {
2890       return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
2891     }
2892     let result;
2893     if (XDG_RUNTIME_DIR) {
2894       result = path9.join(XDG_RUNTIME_DIR, `vscode-ipc-${randomSuffix}.sock`);
2895     } else {
2896       result = path9.join(os3.tmpdir(), `vscode-${randomSuffix}.sock`);
2897     }
2898     const limit = safeIpcPathLengths.get(process.platform);
2899     if (limit !== void 0 && result.length >= limit) {
2900       ril_1.default().console.warn(`WARNING: IPC handle "${result}" is longer than ${limit} characters.`);
2901     }
2902     return result;
2903   }
2904   exports2.generateRandomPipeName = generateRandomPipeName;
2905   function createClientPipeTransport(pipeName, encoding = "utf-8") {
2906     let connectResolve;
2907     const connected = new Promise((resolve, _reject) => {
2908       connectResolve = resolve;
2909     });
2910     return new Promise((resolve, reject) => {
2911       let server = net_1.createServer((socket) => {
2912         server.close();
2913         connectResolve([
2914           new SocketMessageReader(socket, encoding),
2915           new SocketMessageWriter(socket, encoding)
2916         ]);
2917       });
2918       server.on("error", reject);
2919       server.listen(pipeName, () => {
2920         server.removeListener("error", reject);
2921         resolve({
2922           onConnected: () => {
2923             return connected;
2924           }
2925         });
2926       });
2927     });
2928   }
2929   exports2.createClientPipeTransport = createClientPipeTransport;
2930   function createServerPipeTransport(pipeName, encoding = "utf-8") {
2931     const socket = net_1.createConnection(pipeName);
2932     return [
2933       new SocketMessageReader(socket, encoding),
2934       new SocketMessageWriter(socket, encoding)
2935     ];
2936   }
2937   exports2.createServerPipeTransport = createServerPipeTransport;
2938   function createClientSocketTransport(port, encoding = "utf-8") {
2939     let connectResolve;
2940     const connected = new Promise((resolve, _reject) => {
2941       connectResolve = resolve;
2942     });
2943     return new Promise((resolve, reject) => {
2944       const server = net_1.createServer((socket) => {
2945         server.close();
2946         connectResolve([
2947           new SocketMessageReader(socket, encoding),
2948           new SocketMessageWriter(socket, encoding)
2949         ]);
2950       });
2951       server.on("error", reject);
2952       server.listen(port, "127.0.0.1", () => {
2953         server.removeListener("error", reject);
2954         resolve({
2955           onConnected: () => {
2956             return connected;
2957           }
2958         });
2959       });
2960     });
2961   }
2962   exports2.createClientSocketTransport = createClientSocketTransport;
2963   function createServerSocketTransport(port, encoding = "utf-8") {
2964     const socket = net_1.createConnection(port, "127.0.0.1");
2965     return [
2966       new SocketMessageReader(socket, encoding),
2967       new SocketMessageWriter(socket, encoding)
2968     ];
2969   }
2970   exports2.createServerSocketTransport = createServerSocketTransport;
2971   function isReadableStream(value) {
2972     const candidate = value;
2973     return candidate.read !== void 0 && candidate.addListener !== void 0;
2974   }
2975   function isWritableStream(value) {
2976     const candidate = value;
2977     return candidate.write !== void 0 && candidate.addListener !== void 0;
2978   }
2979   function createMessageConnection(input, output, logger, options) {
2980     if (!logger) {
2981       logger = api_1.NullLogger;
2982     }
2983     const reader = isReadableStream(input) ? new StreamMessageReader(input) : input;
2984     const writer = isWritableStream(output) ? new StreamMessageWriter(output) : output;
2985     if (api_1.ConnectionStrategy.is(options)) {
2986       options = {connectionStrategy: options};
2987     }
2988     return api_1.createMessageConnection(reader, writer, logger, options);
2989   }
2990   exports2.createMessageConnection = createMessageConnection;
2991 });
2992
2993 // node_modules/vscode-jsonrpc/node.js
2994 var require_node = __commonJS((exports2, module2) => {
2995   "use strict";
2996   module2.exports = require_main();
2997 });
2998
2999 // node_modules/vscode-languageserver-types/lib/esm/main.js
3000 var require_main2 = __commonJS((exports2) => {
3001   __export(exports2, {
3002     AnnotatedTextEdit: () => AnnotatedTextEdit,
3003     ChangeAnnotation: () => ChangeAnnotation,
3004     ChangeAnnotationIdentifier: () => ChangeAnnotationIdentifier,
3005     CodeAction: () => CodeAction6,
3006     CodeActionContext: () => CodeActionContext6,
3007     CodeActionKind: () => CodeActionKind6,
3008     CodeDescription: () => CodeDescription,
3009     CodeLens: () => CodeLens2,
3010     Color: () => Color,
3011     ColorInformation: () => ColorInformation,
3012     ColorPresentation: () => ColorPresentation,
3013     Command: () => Command5,
3014     CompletionItem: () => CompletionItem4,
3015     CompletionItemKind: () => CompletionItemKind3,
3016     CompletionItemTag: () => CompletionItemTag2,
3017     CompletionList: () => CompletionList3,
3018     CreateFile: () => CreateFile,
3019     DeleteFile: () => DeleteFile,
3020     Diagnostic: () => Diagnostic6,
3021     DiagnosticRelatedInformation: () => DiagnosticRelatedInformation2,
3022     DiagnosticSeverity: () => DiagnosticSeverity3,
3023     DiagnosticTag: () => DiagnosticTag3,
3024     DocumentHighlight: () => DocumentHighlight2,
3025     DocumentHighlightKind: () => DocumentHighlightKind2,
3026     DocumentLink: () => DocumentLink,
3027     DocumentSymbol: () => DocumentSymbol2,
3028     EOL: () => EOL,
3029     FoldingRange: () => FoldingRange2,
3030     FoldingRangeKind: () => FoldingRangeKind,
3031     FormattingOptions: () => FormattingOptions,
3032     Hover: () => Hover,
3033     InsertReplaceEdit: () => InsertReplaceEdit,
3034     InsertTextFormat: () => InsertTextFormat3,
3035     InsertTextMode: () => InsertTextMode,
3036     Location: () => Location4,
3037     LocationLink: () => LocationLink,
3038     MarkedString: () => MarkedString,
3039     MarkupContent: () => MarkupContent3,
3040     MarkupKind: () => MarkupKind3,
3041     OptionalVersionedTextDocumentIdentifier: () => OptionalVersionedTextDocumentIdentifier,
3042     ParameterInformation: () => ParameterInformation,
3043     Position: () => Position10,
3044     Range: () => Range17,
3045     RenameFile: () => RenameFile,
3046     SelectionRange: () => SelectionRange,
3047     SignatureInformation: () => SignatureInformation,
3048     SymbolInformation: () => SymbolInformation2,
3049     SymbolKind: () => SymbolKind5,
3050     SymbolTag: () => SymbolTag4,
3051     TextDocument: () => TextDocument13,
3052     TextDocumentEdit: () => TextDocumentEdit,
3053     TextDocumentIdentifier: () => TextDocumentIdentifier,
3054     TextDocumentItem: () => TextDocumentItem,
3055     TextEdit: () => TextEdit6,
3056     VersionedTextDocumentIdentifier: () => VersionedTextDocumentIdentifier,
3057     WorkspaceChange: () => WorkspaceChange,
3058     WorkspaceEdit: () => WorkspaceEdit6,
3059     integer: () => integer,
3060     uinteger: () => uinteger
3061   });
3062   "use strict";
3063   var integer;
3064   (function(integer2) {
3065     integer2.MIN_VALUE = -2147483648;
3066     integer2.MAX_VALUE = 2147483647;
3067   })(integer || (integer = {}));
3068   var uinteger;
3069   (function(uinteger2) {
3070     uinteger2.MIN_VALUE = 0;
3071     uinteger2.MAX_VALUE = 2147483647;
3072   })(uinteger || (uinteger = {}));
3073   var Position10;
3074   (function(Position11) {
3075     function create(line, character) {
3076       if (line === Number.MAX_VALUE) {
3077         line = uinteger.MAX_VALUE;
3078       }
3079       if (character === Number.MAX_VALUE) {
3080         character = uinteger.MAX_VALUE;
3081       }
3082       return {line, character};
3083     }
3084     Position11.create = create;
3085     function is2(value) {
3086       var candidate = value;
3087       return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
3088     }
3089     Position11.is = is2;
3090   })(Position10 || (Position10 = {}));
3091   var Range17;
3092   (function(Range18) {
3093     function create(one, two, three, four) {
3094       if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
3095         return {start: Position10.create(one, two), end: Position10.create(three, four)};
3096       } else if (Position10.is(one) && Position10.is(two)) {
3097         return {start: one, end: two};
3098       } else {
3099         throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
3100       }
3101     }
3102     Range18.create = create;
3103     function is2(value) {
3104       var candidate = value;
3105       return Is.objectLiteral(candidate) && Position10.is(candidate.start) && Position10.is(candidate.end);
3106     }
3107     Range18.is = is2;
3108   })(Range17 || (Range17 = {}));
3109   var Location4;
3110   (function(Location5) {
3111     function create(uri, range) {
3112       return {uri, range};
3113     }
3114     Location5.create = create;
3115     function is2(value) {
3116       var candidate = value;
3117       return Is.defined(candidate) && Range17.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
3118     }
3119     Location5.is = is2;
3120   })(Location4 || (Location4 = {}));
3121   var LocationLink;
3122   (function(LocationLink2) {
3123     function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
3124       return {targetUri, targetRange, targetSelectionRange, originSelectionRange};
3125     }
3126     LocationLink2.create = create;
3127     function is2(value) {
3128       var candidate = value;
3129       return Is.defined(candidate) && Range17.is(candidate.targetRange) && Is.string(candidate.targetUri) && (Range17.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange)) && (Range17.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
3130     }
3131     LocationLink2.is = is2;
3132   })(LocationLink || (LocationLink = {}));
3133   var Color;
3134   (function(Color2) {
3135     function create(red, green, blue, alpha) {
3136       return {
3137         red,
3138         green,
3139         blue,
3140         alpha
3141       };
3142     }
3143     Color2.create = create;
3144     function is2(value) {
3145       var candidate = value;
3146       return Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1);
3147     }
3148     Color2.is = is2;
3149   })(Color || (Color = {}));
3150   var ColorInformation;
3151   (function(ColorInformation2) {
3152     function create(range, color) {
3153       return {
3154         range,
3155         color
3156       };
3157     }
3158     ColorInformation2.create = create;
3159     function is2(value) {
3160       var candidate = value;
3161       return Range17.is(candidate.range) && Color.is(candidate.color);
3162     }
3163     ColorInformation2.is = is2;
3164   })(ColorInformation || (ColorInformation = {}));
3165   var ColorPresentation;
3166   (function(ColorPresentation2) {
3167     function create(label, textEdit, additionalTextEdits) {
3168       return {
3169         label,
3170         textEdit,
3171         additionalTextEdits
3172       };
3173     }
3174     ColorPresentation2.create = create;
3175     function is2(value) {
3176       var candidate = value;
3177       return Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit6.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit6.is));
3178     }
3179     ColorPresentation2.is = is2;
3180   })(ColorPresentation || (ColorPresentation = {}));
3181   var FoldingRangeKind;
3182   (function(FoldingRangeKind2) {
3183     FoldingRangeKind2["Comment"] = "comment";
3184     FoldingRangeKind2["Imports"] = "imports";
3185     FoldingRangeKind2["Region"] = "region";
3186   })(FoldingRangeKind || (FoldingRangeKind = {}));
3187   var FoldingRange2;
3188   (function(FoldingRange3) {
3189     function create(startLine, endLine, startCharacter, endCharacter, kind) {
3190       var result = {
3191         startLine,
3192         endLine
3193       };
3194       if (Is.defined(startCharacter)) {
3195         result.startCharacter = startCharacter;
3196       }
3197       if (Is.defined(endCharacter)) {
3198         result.endCharacter = endCharacter;
3199       }
3200       if (Is.defined(kind)) {
3201         result.kind = kind;
3202       }
3203       return result;
3204     }
3205     FoldingRange3.create = create;
3206     function is2(value) {
3207       var candidate = value;
3208       return Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
3209     }
3210     FoldingRange3.is = is2;
3211   })(FoldingRange2 || (FoldingRange2 = {}));
3212   var DiagnosticRelatedInformation2;
3213   (function(DiagnosticRelatedInformation3) {
3214     function create(location, message) {
3215       return {
3216         location,
3217         message
3218       };
3219     }
3220     DiagnosticRelatedInformation3.create = create;
3221     function is2(value) {
3222       var candidate = value;
3223       return Is.defined(candidate) && Location4.is(candidate.location) && Is.string(candidate.message);
3224     }
3225     DiagnosticRelatedInformation3.is = is2;
3226   })(DiagnosticRelatedInformation2 || (DiagnosticRelatedInformation2 = {}));
3227   var DiagnosticSeverity3;
3228   (function(DiagnosticSeverity4) {
3229     DiagnosticSeverity4.Error = 1;
3230     DiagnosticSeverity4.Warning = 2;
3231     DiagnosticSeverity4.Information = 3;
3232     DiagnosticSeverity4.Hint = 4;
3233   })(DiagnosticSeverity3 || (DiagnosticSeverity3 = {}));
3234   var DiagnosticTag3;
3235   (function(DiagnosticTag4) {
3236     DiagnosticTag4.Unnecessary = 1;
3237     DiagnosticTag4.Deprecated = 2;
3238   })(DiagnosticTag3 || (DiagnosticTag3 = {}));
3239   var CodeDescription;
3240   (function(CodeDescription2) {
3241     function is2(value) {
3242       var candidate = value;
3243       return candidate !== void 0 && candidate !== null && Is.string(candidate.href);
3244     }
3245     CodeDescription2.is = is2;
3246   })(CodeDescription || (CodeDescription = {}));
3247   var Diagnostic6;
3248   (function(Diagnostic7) {
3249     function create(range, message, severity, code, source, relatedInformation) {
3250       var result = {range, message};
3251       if (Is.defined(severity)) {
3252         result.severity = severity;
3253       }
3254       if (Is.defined(code)) {
3255         result.code = code;
3256       }
3257       if (Is.defined(source)) {
3258         result.source = source;
3259       }
3260       if (Is.defined(relatedInformation)) {
3261         result.relatedInformation = relatedInformation;
3262       }
3263       return result;
3264     }
3265     Diagnostic7.create = create;
3266     function is2(value) {
3267       var _a;
3268       var candidate = value;
3269       return Is.defined(candidate) && Range17.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation2.is));
3270     }
3271     Diagnostic7.is = is2;
3272   })(Diagnostic6 || (Diagnostic6 = {}));
3273   var Command5;
3274   (function(Command6) {
3275     function create(title, command) {
3276       var args = [];
3277       for (var _i = 2; _i < arguments.length; _i++) {
3278         args[_i - 2] = arguments[_i];
3279       }
3280       var result = {title, command};
3281       if (Is.defined(args) && args.length > 0) {
3282         result.arguments = args;
3283       }
3284       return result;
3285     }
3286     Command6.create = create;
3287     function is2(value) {
3288       var candidate = value;
3289       return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
3290     }
3291     Command6.is = is2;
3292   })(Command5 || (Command5 = {}));
3293   var TextEdit6;
3294   (function(TextEdit7) {
3295     function replace(range, newText) {
3296       return {range, newText};
3297     }
3298     TextEdit7.replace = replace;
3299     function insert(position, newText) {
3300       return {range: {start: position, end: position}, newText};
3301     }
3302     TextEdit7.insert = insert;
3303     function del(range) {
3304       return {range, newText: ""};
3305     }
3306     TextEdit7.del = del;
3307     function is2(value) {
3308       var candidate = value;
3309       return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range17.is(candidate.range);
3310     }
3311     TextEdit7.is = is2;
3312   })(TextEdit6 || (TextEdit6 = {}));
3313   var ChangeAnnotation;
3314   (function(ChangeAnnotation2) {
3315     function create(label, needsConfirmation, description) {
3316       var result = {label};
3317       if (needsConfirmation !== void 0) {
3318         result.needsConfirmation = needsConfirmation;
3319       }
3320       if (description !== void 0) {
3321         result.description = description;
3322       }
3323       return result;
3324     }
3325     ChangeAnnotation2.create = create;
3326     function is2(value) {
3327       var candidate = value;
3328       return candidate !== void 0 && Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0);
3329     }
3330     ChangeAnnotation2.is = is2;
3331   })(ChangeAnnotation || (ChangeAnnotation = {}));
3332   var ChangeAnnotationIdentifier;
3333   (function(ChangeAnnotationIdentifier2) {
3334     function is2(value) {
3335       var candidate = value;
3336       return typeof candidate === "string";
3337     }
3338     ChangeAnnotationIdentifier2.is = is2;
3339   })(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
3340   var AnnotatedTextEdit;
3341   (function(AnnotatedTextEdit2) {
3342     function replace(range, newText, annotation) {
3343       return {range, newText, annotationId: annotation};
3344     }
3345     AnnotatedTextEdit2.replace = replace;
3346     function insert(position, newText, annotation) {
3347       return {range: {start: position, end: position}, newText, annotationId: annotation};
3348     }
3349     AnnotatedTextEdit2.insert = insert;
3350     function del(range, annotation) {
3351       return {range, newText: "", annotationId: annotation};
3352     }
3353     AnnotatedTextEdit2.del = del;
3354     function is2(value) {
3355       var candidate = value;
3356       return TextEdit6.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
3357     }
3358     AnnotatedTextEdit2.is = is2;
3359   })(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
3360   var TextDocumentEdit;
3361   (function(TextDocumentEdit2) {
3362     function create(textDocument, edits) {
3363       return {textDocument, edits};
3364     }
3365     TextDocumentEdit2.create = create;
3366     function is2(value) {
3367       var candidate = value;
3368       return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);
3369     }
3370     TextDocumentEdit2.is = is2;
3371   })(TextDocumentEdit || (TextDocumentEdit = {}));
3372   var CreateFile;
3373   (function(CreateFile2) {
3374     function create(uri, options, annotation) {
3375       var result = {
3376         kind: "create",
3377         uri
3378       };
3379       if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
3380         result.options = options;
3381       }
3382       if (annotation !== void 0) {
3383         result.annotationId = annotation;
3384       }
3385       return result;
3386     }
3387     CreateFile2.create = create;
3388     function is2(value) {
3389       var candidate = value;
3390       return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
3391     }
3392     CreateFile2.is = is2;
3393   })(CreateFile || (CreateFile = {}));
3394   var RenameFile;
3395   (function(RenameFile2) {
3396     function create(oldUri, newUri, options, annotation) {
3397       var result = {
3398         kind: "rename",
3399         oldUri,
3400         newUri
3401       };
3402       if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
3403         result.options = options;
3404       }
3405       if (annotation !== void 0) {
3406         result.annotationId = annotation;
3407       }
3408       return result;
3409     }
3410     RenameFile2.create = create;
3411     function is2(value) {
3412       var candidate = value;
3413       return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
3414     }
3415     RenameFile2.is = is2;
3416   })(RenameFile || (RenameFile = {}));
3417   var DeleteFile;
3418   (function(DeleteFile2) {
3419     function create(uri, options, annotation) {
3420       var result = {
3421         kind: "delete",
3422         uri
3423       };
3424       if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
3425         result.options = options;
3426       }
3427       if (annotation !== void 0) {
3428         result.annotationId = annotation;
3429       }
3430       return result;
3431     }
3432     DeleteFile2.create = create;
3433     function is2(value) {
3434       var candidate = value;
3435       return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
3436     }
3437     DeleteFile2.is = is2;
3438   })(DeleteFile || (DeleteFile = {}));
3439   var WorkspaceEdit6;
3440   (function(WorkspaceEdit7) {
3441     function is2(value) {
3442       var candidate = value;
3443       return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every(function(change) {
3444         if (Is.string(change.kind)) {
3445           return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
3446         } else {
3447           return TextDocumentEdit.is(change);
3448         }
3449       }));
3450     }
3451     WorkspaceEdit7.is = is2;
3452   })(WorkspaceEdit6 || (WorkspaceEdit6 = {}));
3453   var TextEditChangeImpl = function() {
3454     function TextEditChangeImpl2(edits, changeAnnotations) {
3455       this.edits = edits;
3456       this.changeAnnotations = changeAnnotations;
3457     }
3458     TextEditChangeImpl2.prototype.insert = function(position, newText, annotation) {
3459       var edit;
3460       var id;
3461       if (annotation === void 0) {
3462         edit = TextEdit6.insert(position, newText);
3463       } else if (ChangeAnnotationIdentifier.is(annotation)) {
3464         id = annotation;
3465         edit = AnnotatedTextEdit.insert(position, newText, annotation);
3466       } else {
3467         this.assertChangeAnnotations(this.changeAnnotations);
3468         id = this.changeAnnotations.manage(annotation);
3469         edit = AnnotatedTextEdit.insert(position, newText, id);
3470       }
3471       this.edits.push(edit);
3472       if (id !== void 0) {
3473         return id;
3474       }
3475     };
3476     TextEditChangeImpl2.prototype.replace = function(range, newText, annotation) {
3477       var edit;
3478       var id;
3479       if (annotation === void 0) {
3480         edit = TextEdit6.replace(range, newText);
3481       } else if (ChangeAnnotationIdentifier.is(annotation)) {
3482         id = annotation;
3483         edit = AnnotatedTextEdit.replace(range, newText, annotation);
3484       } else {
3485         this.assertChangeAnnotations(this.changeAnnotations);
3486         id = this.changeAnnotations.manage(annotation);
3487         edit = AnnotatedTextEdit.replace(range, newText, id);
3488       }
3489       this.edits.push(edit);
3490       if (id !== void 0) {
3491         return id;
3492       }
3493     };
3494     TextEditChangeImpl2.prototype.delete = function(range, annotation) {
3495       var edit;
3496       var id;
3497       if (annotation === void 0) {
3498         edit = TextEdit6.del(range);
3499       } else if (ChangeAnnotationIdentifier.is(annotation)) {
3500         id = annotation;
3501         edit = AnnotatedTextEdit.del(range, annotation);
3502       } else {
3503         this.assertChangeAnnotations(this.changeAnnotations);
3504         id = this.changeAnnotations.manage(annotation);
3505         edit = AnnotatedTextEdit.del(range, id);
3506       }
3507       this.edits.push(edit);
3508       if (id !== void 0) {
3509         return id;
3510       }
3511     };
3512     TextEditChangeImpl2.prototype.add = function(edit) {
3513       this.edits.push(edit);
3514     };
3515     TextEditChangeImpl2.prototype.all = function() {
3516       return this.edits;
3517     };
3518     TextEditChangeImpl2.prototype.clear = function() {
3519       this.edits.splice(0, this.edits.length);
3520     };
3521     TextEditChangeImpl2.prototype.assertChangeAnnotations = function(value) {
3522       if (value === void 0) {
3523         throw new Error("Text edit change is not configured to manage change annotations.");
3524       }
3525     };
3526     return TextEditChangeImpl2;
3527   }();
3528   var ChangeAnnotations = function() {
3529     function ChangeAnnotations2(annotations) {
3530       this._annotations = annotations === void 0 ? Object.create(null) : annotations;
3531       this._counter = 0;
3532       this._size = 0;
3533     }
3534     ChangeAnnotations2.prototype.all = function() {
3535       return this._annotations;
3536     };
3537     Object.defineProperty(ChangeAnnotations2.prototype, "size", {
3538       get: function() {
3539         return this._size;
3540       },
3541       enumerable: false,
3542       configurable: true
3543     });
3544     ChangeAnnotations2.prototype.manage = function(idOrAnnotation, annotation) {
3545       var id;
3546       if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
3547         id = idOrAnnotation;
3548       } else {
3549         id = this.nextId();
3550         annotation = idOrAnnotation;
3551       }
3552       if (this._annotations[id] !== void 0) {
3553         throw new Error("Id " + id + " is already in use.");
3554       }
3555       if (annotation === void 0) {
3556         throw new Error("No annotation provided for id " + id);
3557       }
3558       this._annotations[id] = annotation;
3559       this._size++;
3560       return id;
3561     };
3562     ChangeAnnotations2.prototype.nextId = function() {
3563       this._counter++;
3564       return this._counter.toString();
3565     };
3566     return ChangeAnnotations2;
3567   }();
3568   var WorkspaceChange = function() {
3569     function WorkspaceChange2(workspaceEdit) {
3570       var _this = this;
3571       this._textEditChanges = Object.create(null);
3572       if (workspaceEdit !== void 0) {
3573         this._workspaceEdit = workspaceEdit;
3574         if (workspaceEdit.documentChanges) {
3575           this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
3576           workspaceEdit.changeAnnotations = this._changeAnnotations.all();
3577           workspaceEdit.documentChanges.forEach(function(change) {
3578             if (TextDocumentEdit.is(change)) {
3579               var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);
3580               _this._textEditChanges[change.textDocument.uri] = textEditChange;
3581             }
3582           });
3583         } else if (workspaceEdit.changes) {
3584           Object.keys(workspaceEdit.changes).forEach(function(key) {
3585             var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
3586             _this._textEditChanges[key] = textEditChange;
3587           });
3588         }
3589       } else {
3590         this._workspaceEdit = {};
3591       }
3592     }
3593     Object.defineProperty(WorkspaceChange2.prototype, "edit", {
3594       get: function() {
3595         this.initDocumentChanges();
3596         if (this._changeAnnotations !== void 0) {
3597           if (this._changeAnnotations.size === 0) {
3598             this._workspaceEdit.changeAnnotations = void 0;
3599           } else {
3600             this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
3601           }
3602         }
3603         return this._workspaceEdit;
3604       },
3605       enumerable: false,
3606       configurable: true
3607     });
3608     WorkspaceChange2.prototype.getTextEditChange = function(key) {
3609       if (OptionalVersionedTextDocumentIdentifier.is(key)) {
3610         this.initDocumentChanges();
3611         if (this._workspaceEdit.documentChanges === void 0) {
3612           throw new Error("Workspace edit is not configured for document changes.");
3613         }
3614         var textDocument = {uri: key.uri, version: key.version};
3615         var result = this._textEditChanges[textDocument.uri];
3616         if (!result) {
3617           var edits = [];
3618           var textDocumentEdit = {
3619             textDocument,
3620             edits
3621           };
3622           this._workspaceEdit.documentChanges.push(textDocumentEdit);
3623           result = new TextEditChangeImpl(edits, this._changeAnnotations);
3624           this._textEditChanges[textDocument.uri] = result;
3625         }
3626         return result;
3627       } else {
3628         this.initChanges();
3629         if (this._workspaceEdit.changes === void 0) {
3630           throw new Error("Workspace edit is not configured for normal text edit changes.");
3631         }
3632         var result = this._textEditChanges[key];
3633         if (!result) {
3634           var edits = [];
3635           this._workspaceEdit.changes[key] = edits;
3636           result = new TextEditChangeImpl(edits);
3637           this._textEditChanges[key] = result;
3638         }
3639         return result;
3640       }
3641     };
3642     WorkspaceChange2.prototype.initDocumentChanges = function() {
3643       if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) {
3644         this._changeAnnotations = new ChangeAnnotations();
3645         this._workspaceEdit.documentChanges = [];
3646         this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
3647       }
3648     };
3649     WorkspaceChange2.prototype.initChanges = function() {
3650       if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) {
3651         this._workspaceEdit.changes = Object.create(null);
3652       }
3653     };
3654     WorkspaceChange2.prototype.createFile = function(uri, optionsOrAnnotation, options) {
3655       this.initDocumentChanges();
3656       if (this._workspaceEdit.documentChanges === void 0) {
3657         throw new Error("Workspace edit is not configured for document changes.");
3658       }
3659       var annotation;
3660       if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
3661         annotation = optionsOrAnnotation;
3662       } else {
3663         options = optionsOrAnnotation;
3664       }
3665       var operation;
3666       var id;
3667       if (annotation === void 0) {
3668         operation = CreateFile.create(uri, options);
3669       } else {
3670         id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
3671         operation = CreateFile.create(uri, options, id);
3672       }
3673       this._workspaceEdit.documentChanges.push(operation);
3674       if (id !== void 0) {
3675         return id;
3676       }
3677     };
3678     WorkspaceChange2.prototype.renameFile = function(oldUri, newUri, optionsOrAnnotation, options) {
3679       this.initDocumentChanges();
3680       if (this._workspaceEdit.documentChanges === void 0) {
3681         throw new Error("Workspace edit is not configured for document changes.");
3682       }
3683       var annotation;
3684       if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
3685         annotation = optionsOrAnnotation;
3686       } else {
3687         options = optionsOrAnnotation;
3688       }
3689       var operation;
3690       var id;
3691       if (annotation === void 0) {
3692         operation = RenameFile.create(oldUri, newUri, options);
3693       } else {
3694         id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
3695         operation = RenameFile.create(oldUri, newUri, options, id);
3696       }
3697       this._workspaceEdit.documentChanges.push(operation);
3698       if (id !== void 0) {
3699         return id;
3700       }
3701     };
3702     WorkspaceChange2.prototype.deleteFile = function(uri, optionsOrAnnotation, options) {
3703       this.initDocumentChanges();
3704       if (this._workspaceEdit.documentChanges === void 0) {
3705         throw new Error("Workspace edit is not configured for document changes.");
3706       }
3707       var annotation;
3708       if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
3709         annotation = optionsOrAnnotation;
3710       } else {
3711         options = optionsOrAnnotation;
3712       }
3713       var operation;
3714       var id;
3715       if (annotation === void 0) {
3716         operation = DeleteFile.create(uri, options);
3717       } else {
3718         id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
3719         operation = DeleteFile.create(uri, options, id);
3720       }
3721       this._workspaceEdit.documentChanges.push(operation);
3722       if (id !== void 0) {
3723         return id;
3724       }
3725     };
3726     return WorkspaceChange2;
3727   }();
3728   var TextDocumentIdentifier;
3729   (function(TextDocumentIdentifier2) {
3730     function create(uri) {
3731       return {uri};
3732     }
3733     TextDocumentIdentifier2.create = create;
3734     function is2(value) {
3735       var candidate = value;
3736       return Is.defined(candidate) && Is.string(candidate.uri);
3737     }
3738     TextDocumentIdentifier2.is = is2;
3739   })(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
3740   var VersionedTextDocumentIdentifier;
3741   (function(VersionedTextDocumentIdentifier2) {
3742     function create(uri, version) {
3743       return {uri, version};
3744     }
3745     VersionedTextDocumentIdentifier2.create = create;
3746     function is2(value) {
3747       var candidate = value;
3748       return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
3749     }
3750     VersionedTextDocumentIdentifier2.is = is2;
3751   })(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
3752   var OptionalVersionedTextDocumentIdentifier;
3753   (function(OptionalVersionedTextDocumentIdentifier2) {
3754     function create(uri, version) {
3755       return {uri, version};
3756     }
3757     OptionalVersionedTextDocumentIdentifier2.create = create;
3758     function is2(value) {
3759       var candidate = value;
3760       return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
3761     }
3762     OptionalVersionedTextDocumentIdentifier2.is = is2;
3763   })(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
3764   var TextDocumentItem;
3765   (function(TextDocumentItem2) {
3766     function create(uri, languageId, version, text) {
3767       return {uri, languageId, version, text};
3768     }
3769     TextDocumentItem2.create = create;
3770     function is2(value) {
3771       var candidate = value;
3772       return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
3773     }
3774     TextDocumentItem2.is = is2;
3775   })(TextDocumentItem || (TextDocumentItem = {}));
3776   var MarkupKind3;
3777   (function(MarkupKind4) {
3778     MarkupKind4.PlainText = "plaintext";
3779     MarkupKind4.Markdown = "markdown";
3780   })(MarkupKind3 || (MarkupKind3 = {}));
3781   (function(MarkupKind4) {
3782     function is2(value) {
3783       var candidate = value;
3784       return candidate === MarkupKind4.PlainText || candidate === MarkupKind4.Markdown;
3785     }
3786     MarkupKind4.is = is2;
3787   })(MarkupKind3 || (MarkupKind3 = {}));
3788   var MarkupContent3;
3789   (function(MarkupContent4) {
3790     function is2(value) {
3791       var candidate = value;
3792       return Is.objectLiteral(value) && MarkupKind3.is(candidate.kind) && Is.string(candidate.value);
3793     }
3794     MarkupContent4.is = is2;
3795   })(MarkupContent3 || (MarkupContent3 = {}));
3796   var CompletionItemKind3;
3797   (function(CompletionItemKind4) {
3798     CompletionItemKind4.Text = 1;
3799     CompletionItemKind4.Method = 2;
3800     CompletionItemKind4.Function = 3;
3801     CompletionItemKind4.Constructor = 4;
3802     CompletionItemKind4.Field = 5;
3803     CompletionItemKind4.Variable = 6;
3804     CompletionItemKind4.Class = 7;
3805     CompletionItemKind4.Interface = 8;
3806     CompletionItemKind4.Module = 9;
3807     CompletionItemKind4.Property = 10;
3808     CompletionItemKind4.Unit = 11;
3809     CompletionItemKind4.Value = 12;
3810     CompletionItemKind4.Enum = 13;
3811     CompletionItemKind4.Keyword = 14;
3812     CompletionItemKind4.Snippet = 15;
3813     CompletionItemKind4.Color = 16;
3814     CompletionItemKind4.File = 17;
3815     CompletionItemKind4.Reference = 18;
3816     CompletionItemKind4.Folder = 19;
3817     CompletionItemKind4.EnumMember = 20;
3818     CompletionItemKind4.Constant = 21;
3819     CompletionItemKind4.Struct = 22;
3820     CompletionItemKind4.Event = 23;
3821     CompletionItemKind4.Operator = 24;
3822     CompletionItemKind4.TypeParameter = 25;
3823   })(CompletionItemKind3 || (CompletionItemKind3 = {}));
3824   var InsertTextFormat3;
3825   (function(InsertTextFormat4) {
3826     InsertTextFormat4.PlainText = 1;
3827     InsertTextFormat4.Snippet = 2;
3828   })(InsertTextFormat3 || (InsertTextFormat3 = {}));
3829   var CompletionItemTag2;
3830   (function(CompletionItemTag3) {
3831     CompletionItemTag3.Deprecated = 1;
3832   })(CompletionItemTag2 || (CompletionItemTag2 = {}));
3833   var InsertReplaceEdit;
3834   (function(InsertReplaceEdit2) {
3835     function create(newText, insert, replace) {
3836       return {newText, insert, replace};
3837     }
3838     InsertReplaceEdit2.create = create;
3839     function is2(value) {
3840       var candidate = value;
3841       return candidate && Is.string(candidate.newText) && Range17.is(candidate.insert) && Range17.is(candidate.replace);
3842     }
3843     InsertReplaceEdit2.is = is2;
3844   })(InsertReplaceEdit || (InsertReplaceEdit = {}));
3845   var InsertTextMode;
3846   (function(InsertTextMode2) {
3847     InsertTextMode2.asIs = 1;
3848     InsertTextMode2.adjustIndentation = 2;
3849   })(InsertTextMode || (InsertTextMode = {}));
3850   var CompletionItem4;
3851   (function(CompletionItem5) {
3852     function create(label) {
3853       return {label};
3854     }
3855     CompletionItem5.create = create;
3856   })(CompletionItem4 || (CompletionItem4 = {}));
3857   var CompletionList3;
3858   (function(CompletionList4) {
3859     function create(items, isIncomplete) {
3860       return {items: items ? items : [], isIncomplete: !!isIncomplete};
3861     }
3862     CompletionList4.create = create;
3863   })(CompletionList3 || (CompletionList3 = {}));
3864   var MarkedString;
3865   (function(MarkedString2) {
3866     function fromPlainText(plainText) {
3867       return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
3868     }
3869     MarkedString2.fromPlainText = fromPlainText;
3870     function is2(value) {
3871       var candidate = value;
3872       return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);
3873     }
3874     MarkedString2.is = is2;
3875   })(MarkedString || (MarkedString = {}));
3876   var Hover;
3877   (function(Hover2) {
3878     function is2(value) {
3879       var candidate = value;
3880       return !!candidate && Is.objectLiteral(candidate) && (MarkupContent3.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range17.is(value.range));
3881     }
3882     Hover2.is = is2;
3883   })(Hover || (Hover = {}));
3884   var ParameterInformation;
3885   (function(ParameterInformation2) {
3886     function create(label, documentation) {
3887       return documentation ? {label, documentation} : {label};
3888     }
3889     ParameterInformation2.create = create;
3890   })(ParameterInformation || (ParameterInformation = {}));
3891   var SignatureInformation;
3892   (function(SignatureInformation2) {
3893     function create(label, documentation) {
3894       var parameters = [];
3895       for (var _i = 2; _i < arguments.length; _i++) {
3896         parameters[_i - 2] = arguments[_i];
3897       }
3898       var result = {label};
3899       if (Is.defined(documentation)) {
3900         result.documentation = documentation;
3901       }
3902       if (Is.defined(parameters)) {
3903         result.parameters = parameters;
3904       } else {
3905         result.parameters = [];
3906       }
3907       return result;
3908     }
3909     SignatureInformation2.create = create;
3910   })(SignatureInformation || (SignatureInformation = {}));
3911   var DocumentHighlightKind2;
3912   (function(DocumentHighlightKind3) {
3913     DocumentHighlightKind3.Text = 1;
3914     DocumentHighlightKind3.Read = 2;
3915     DocumentHighlightKind3.Write = 3;
3916   })(DocumentHighlightKind2 || (DocumentHighlightKind2 = {}));
3917   var DocumentHighlight2;
3918   (function(DocumentHighlight3) {
3919     function create(range, kind) {
3920       var result = {range};
3921       if (Is.number(kind)) {
3922         result.kind = kind;
3923       }
3924       return result;
3925     }
3926     DocumentHighlight3.create = create;
3927   })(DocumentHighlight2 || (DocumentHighlight2 = {}));
3928   var SymbolKind5;
3929   (function(SymbolKind6) {
3930     SymbolKind6.File = 1;
3931     SymbolKind6.Module = 2;
3932     SymbolKind6.Namespace = 3;
3933     SymbolKind6.Package = 4;
3934     SymbolKind6.Class = 5;
3935     SymbolKind6.Method = 6;
3936     SymbolKind6.Property = 7;
3937     SymbolKind6.Field = 8;
3938     SymbolKind6.Constructor = 9;
3939     SymbolKind6.Enum = 10;
3940     SymbolKind6.Interface = 11;
3941     SymbolKind6.Function = 12;
3942     SymbolKind6.Variable = 13;
3943     SymbolKind6.Constant = 14;
3944     SymbolKind6.String = 15;
3945     SymbolKind6.Number = 16;
3946     SymbolKind6.Boolean = 17;
3947     SymbolKind6.Array = 18;
3948     SymbolKind6.Object = 19;
3949     SymbolKind6.Key = 20;
3950     SymbolKind6.Null = 21;
3951     SymbolKind6.EnumMember = 22;
3952     SymbolKind6.Struct = 23;
3953     SymbolKind6.Event = 24;
3954     SymbolKind6.Operator = 25;
3955     SymbolKind6.TypeParameter = 26;
3956   })(SymbolKind5 || (SymbolKind5 = {}));
3957   var SymbolTag4;
3958   (function(SymbolTag5) {
3959     SymbolTag5.Deprecated = 1;
3960   })(SymbolTag4 || (SymbolTag4 = {}));
3961   var SymbolInformation2;
3962   (function(SymbolInformation3) {
3963     function create(name, kind, range, uri, containerName) {
3964       var result = {
3965         name,
3966         kind,
3967         location: {uri, range}
3968       };
3969       if (containerName) {
3970         result.containerName = containerName;
3971       }
3972       return result;
3973     }
3974     SymbolInformation3.create = create;
3975   })(SymbolInformation2 || (SymbolInformation2 = {}));
3976   var DocumentSymbol2;
3977   (function(DocumentSymbol3) {
3978     function create(name, detail, kind, range, selectionRange, children) {
3979       var result = {
3980         name,
3981         detail,
3982         kind,
3983         range,
3984         selectionRange
3985       };
3986       if (children !== void 0) {
3987         result.children = children;
3988       }
3989       return result;
3990     }
3991     DocumentSymbol3.create = create;
3992     function is2(value) {
3993       var candidate = value;
3994       return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range17.is(candidate.range) && Range17.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags));
3995     }
3996     DocumentSymbol3.is = is2;
3997   })(DocumentSymbol2 || (DocumentSymbol2 = {}));
3998   var CodeActionKind6;
3999   (function(CodeActionKind7) {
4000     CodeActionKind7.Empty = "";
4001     CodeActionKind7.QuickFix = "quickfix";
4002     CodeActionKind7.Refactor = "refactor";
4003     CodeActionKind7.RefactorExtract = "refactor.extract";
4004     CodeActionKind7.RefactorInline = "refactor.inline";
4005     CodeActionKind7.RefactorRewrite = "refactor.rewrite";
4006     CodeActionKind7.Source = "source";
4007     CodeActionKind7.SourceOrganizeImports = "source.organizeImports";
4008     CodeActionKind7.SourceFixAll = "source.fixAll";
4009   })(CodeActionKind6 || (CodeActionKind6 = {}));
4010   var CodeActionContext6;
4011   (function(CodeActionContext7) {
4012     function create(diagnostics, only) {
4013       var result = {diagnostics};
4014       if (only !== void 0 && only !== null) {
4015         result.only = only;
4016       }
4017       return result;
4018     }
4019     CodeActionContext7.create = create;
4020     function is2(value) {
4021       var candidate = value;
4022       return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic6.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
4023     }
4024     CodeActionContext7.is = is2;
4025   })(CodeActionContext6 || (CodeActionContext6 = {}));
4026   var CodeAction6;
4027   (function(CodeAction7) {
4028     function create(title, kindOrCommandOrEdit, kind) {
4029       var result = {title};
4030       var checkKind = true;
4031       if (typeof kindOrCommandOrEdit === "string") {
4032         checkKind = false;
4033         result.kind = kindOrCommandOrEdit;
4034       } else if (Command5.is(kindOrCommandOrEdit)) {
4035         result.command = kindOrCommandOrEdit;
4036       } else {
4037         result.edit = kindOrCommandOrEdit;
4038       }
4039       if (checkKind && kind !== void 0) {
4040         result.kind = kind;
4041       }
4042       return result;
4043     }
4044     CodeAction7.create = create;
4045     function is2(value) {
4046       var candidate = value;
4047       return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic6.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command5.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit6.is(candidate.edit));
4048     }
4049     CodeAction7.is = is2;
4050   })(CodeAction6 || (CodeAction6 = {}));
4051   var CodeLens2;
4052   (function(CodeLens3) {
4053     function create(range, data) {
4054       var result = {range};
4055       if (Is.defined(data)) {
4056         result.data = data;
4057       }
4058       return result;
4059     }
4060     CodeLens3.create = create;
4061     function is2(value) {
4062       var candidate = value;
4063       return Is.defined(candidate) && Range17.is(candidate.range) && (Is.undefined(candidate.command) || Command5.is(candidate.command));
4064     }
4065     CodeLens3.is = is2;
4066   })(CodeLens2 || (CodeLens2 = {}));
4067   var FormattingOptions;
4068   (function(FormattingOptions2) {
4069     function create(tabSize, insertSpaces) {
4070       return {tabSize, insertSpaces};
4071     }
4072     FormattingOptions2.create = create;
4073     function is2(value) {
4074       var candidate = value;
4075       return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
4076     }
4077     FormattingOptions2.is = is2;
4078   })(FormattingOptions || (FormattingOptions = {}));
4079   var DocumentLink;
4080   (function(DocumentLink2) {
4081     function create(range, target, data) {
4082       return {range, target, data};
4083     }
4084     DocumentLink2.create = create;
4085     function is2(value) {
4086       var candidate = value;
4087       return Is.defined(candidate) && Range17.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
4088     }
4089     DocumentLink2.is = is2;
4090   })(DocumentLink || (DocumentLink = {}));
4091   var SelectionRange;
4092   (function(SelectionRange2) {
4093     function create(range, parent) {
4094       return {range, parent};
4095     }
4096     SelectionRange2.create = create;
4097     function is2(value) {
4098       var candidate = value;
4099       return candidate !== void 0 && Range17.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));
4100     }
4101     SelectionRange2.is = is2;
4102   })(SelectionRange || (SelectionRange = {}));
4103   var EOL = ["\n", "\r\n", "\r"];
4104   var TextDocument13;
4105   (function(TextDocument14) {
4106     function create(uri, languageId, version, content) {
4107       return new FullTextDocument(uri, languageId, version, content);
4108     }
4109     TextDocument14.create = create;
4110     function is2(value) {
4111       var candidate = value;
4112       return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
4113     }
4114     TextDocument14.is = is2;
4115     function applyEdits(document, edits) {
4116       var text = document.getText();
4117       var sortedEdits = mergeSort(edits, function(a, b) {
4118         var diff = a.range.start.line - b.range.start.line;
4119         if (diff === 0) {
4120           return a.range.start.character - b.range.start.character;
4121         }
4122         return diff;
4123       });
4124       var lastModifiedOffset = text.length;
4125       for (var i = sortedEdits.length - 1; i >= 0; i--) {
4126         var e = sortedEdits[i];
4127         var startOffset = document.offsetAt(e.range.start);
4128         var endOffset = document.offsetAt(e.range.end);
4129         if (endOffset <= lastModifiedOffset) {
4130           text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
4131         } else {
4132           throw new Error("Overlapping edit");
4133         }
4134         lastModifiedOffset = startOffset;
4135       }
4136       return text;
4137     }
4138     TextDocument14.applyEdits = applyEdits;
4139     function mergeSort(data, compare) {
4140       if (data.length <= 1) {
4141         return data;
4142       }
4143       var p = data.length / 2 | 0;
4144       var left = data.slice(0, p);
4145       var right = data.slice(p);
4146       mergeSort(left, compare);
4147       mergeSort(right, compare);
4148       var leftIdx = 0;
4149       var rightIdx = 0;
4150       var i = 0;
4151       while (leftIdx < left.length && rightIdx < right.length) {
4152         var ret = compare(left[leftIdx], right[rightIdx]);
4153         if (ret <= 0) {
4154           data[i++] = left[leftIdx++];
4155         } else {
4156           data[i++] = right[rightIdx++];
4157         }
4158       }
4159       while (leftIdx < left.length) {
4160         data[i++] = left[leftIdx++];
4161       }
4162       while (rightIdx < right.length) {
4163         data[i++] = right[rightIdx++];
4164       }
4165       return data;
4166     }
4167   })(TextDocument13 || (TextDocument13 = {}));
4168   var FullTextDocument = function() {
4169     function FullTextDocument2(uri, languageId, version, content) {
4170       this._uri = uri;
4171       this._languageId = languageId;
4172       this._version = version;
4173       this._content = content;
4174       this._lineOffsets = void 0;
4175     }
4176     Object.defineProperty(FullTextDocument2.prototype, "uri", {
4177       get: function() {
4178         return this._uri;
4179       },
4180       enumerable: false,
4181       configurable: true
4182     });
4183     Object.defineProperty(FullTextDocument2.prototype, "languageId", {
4184       get: function() {
4185         return this._languageId;
4186       },
4187       enumerable: false,
4188       configurable: true
4189     });
4190     Object.defineProperty(FullTextDocument2.prototype, "version", {
4191       get: function() {
4192         return this._version;
4193       },
4194       enumerable: false,
4195       configurable: true
4196     });
4197     FullTextDocument2.prototype.getText = function(range) {
4198       if (range) {
4199         var start = this.offsetAt(range.start);
4200         var end = this.offsetAt(range.end);
4201         return this._content.substring(start, end);
4202       }
4203       return this._content;
4204     };
4205     FullTextDocument2.prototype.update = function(event, version) {
4206       this._content = event.text;
4207       this._version = version;
4208       this._lineOffsets = void 0;
4209     };
4210     FullTextDocument2.prototype.getLineOffsets = function() {
4211       if (this._lineOffsets === void 0) {
4212         var lineOffsets = [];
4213         var text = this._content;
4214         var isLineStart = true;
4215         for (var i = 0; i < text.length; i++) {
4216           if (isLineStart) {
4217             lineOffsets.push(i);
4218             isLineStart = false;
4219           }
4220           var ch = text.charAt(i);
4221           isLineStart = ch === "\r" || ch === "\n";
4222           if (ch === "\r" && i + 1 < text.length && text.charAt(i + 1) === "\n") {
4223             i++;
4224           }
4225         }
4226         if (isLineStart && text.length > 0) {
4227           lineOffsets.push(text.length);
4228         }
4229         this._lineOffsets = lineOffsets;
4230       }
4231       return this._lineOffsets;
4232     };
4233     FullTextDocument2.prototype.positionAt = function(offset) {
4234       offset = Math.max(Math.min(offset, this._content.length), 0);
4235       var lineOffsets = this.getLineOffsets();
4236       var low = 0, high = lineOffsets.length;
4237       if (high === 0) {
4238         return Position10.create(0, offset);
4239       }
4240       while (low < high) {
4241         var mid = Math.floor((low + high) / 2);
4242         if (lineOffsets[mid] > offset) {
4243           high = mid;
4244         } else {
4245           low = mid + 1;
4246         }
4247       }
4248       var line = low - 1;
4249       return Position10.create(line, offset - lineOffsets[line]);
4250     };
4251     FullTextDocument2.prototype.offsetAt = function(position) {
4252       var lineOffsets = this.getLineOffsets();
4253       if (position.line >= lineOffsets.length) {
4254         return this._content.length;
4255       } else if (position.line < 0) {
4256         return 0;
4257       }
4258       var lineOffset = lineOffsets[position.line];
4259       var nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
4260       return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
4261     };
4262     Object.defineProperty(FullTextDocument2.prototype, "lineCount", {
4263       get: function() {
4264         return this.getLineOffsets().length;
4265       },
4266       enumerable: false,
4267       configurable: true
4268     });
4269     return FullTextDocument2;
4270   }();
4271   var Is;
4272   (function(Is2) {
4273     var toString2 = Object.prototype.toString;
4274     function defined(value) {
4275       return typeof value !== "undefined";
4276     }
4277     Is2.defined = defined;
4278     function undefined2(value) {
4279       return typeof value === "undefined";
4280     }
4281     Is2.undefined = undefined2;
4282     function boolean2(value) {
4283       return value === true || value === false;
4284     }
4285     Is2.boolean = boolean2;
4286     function string2(value) {
4287       return toString2.call(value) === "[object String]";
4288     }
4289     Is2.string = string2;
4290     function number(value) {
4291       return toString2.call(value) === "[object Number]";
4292     }
4293     Is2.number = number;
4294     function numberRange(value, min, max) {
4295       return toString2.call(value) === "[object Number]" && min <= value && value <= max;
4296     }
4297     Is2.numberRange = numberRange;
4298     function integer2(value) {
4299       return toString2.call(value) === "[object Number]" && -2147483648 <= value && value <= 2147483647;
4300     }
4301     Is2.integer = integer2;
4302     function uinteger2(value) {
4303       return toString2.call(value) === "[object Number]" && 0 <= value && value <= 2147483647;
4304     }
4305     Is2.uinteger = uinteger2;
4306     function func(value) {
4307       return toString2.call(value) === "[object Function]";
4308     }
4309     Is2.func = func;
4310     function objectLiteral(value) {
4311       return value !== null && typeof value === "object";
4312     }
4313     Is2.objectLiteral = objectLiteral;
4314     function typedArray(value, check) {
4315       return Array.isArray(value) && value.every(check);
4316     }
4317     Is2.typedArray = typedArray;
4318   })(Is || (Is = {}));
4319 });
4320
4321 // node_modules/vscode-languageserver-protocol/lib/common/messages.js
4322 var require_messages2 = __commonJS((exports2) => {
4323   "use strict";
4324   Object.defineProperty(exports2, "__esModule", {value: true});
4325   exports2.ProtocolNotificationType = exports2.ProtocolNotificationType0 = exports2.ProtocolRequestType = exports2.ProtocolRequestType0 = exports2.RegistrationType = void 0;
4326   var vscode_jsonrpc_1 = require_main();
4327   var RegistrationType = class {
4328     constructor(method) {
4329       this.method = method;
4330     }
4331   };
4332   exports2.RegistrationType = RegistrationType;
4333   var ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 {
4334     constructor(method) {
4335       super(method);
4336     }
4337   };
4338   exports2.ProtocolRequestType0 = ProtocolRequestType0;
4339   var ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType {
4340     constructor(method) {
4341       super(method, vscode_jsonrpc_1.ParameterStructures.byName);
4342     }
4343   };
4344   exports2.ProtocolRequestType = ProtocolRequestType;
4345   var ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 {
4346     constructor(method) {
4347       super(method);
4348     }
4349   };
4350   exports2.ProtocolNotificationType0 = ProtocolNotificationType0;
4351   var ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType {
4352     constructor(method) {
4353       super(method, vscode_jsonrpc_1.ParameterStructures.byName);
4354     }
4355   };
4356   exports2.ProtocolNotificationType = ProtocolNotificationType;
4357 });
4358
4359 // node_modules/vscode-languageserver-protocol/lib/common/utils/is.js
4360 var require_is2 = __commonJS((exports2) => {
4361   "use strict";
4362   Object.defineProperty(exports2, "__esModule", {value: true});
4363   exports2.objectLiteral = exports2.typedArray = exports2.stringArray = exports2.array = exports2.func = exports2.error = exports2.number = exports2.string = exports2.boolean = void 0;
4364   function boolean2(value) {
4365     return value === true || value === false;
4366   }
4367   exports2.boolean = boolean2;
4368   function string2(value) {
4369     return typeof value === "string" || value instanceof String;
4370   }
4371   exports2.string = string2;
4372   function number(value) {
4373     return typeof value === "number" || value instanceof Number;
4374   }
4375   exports2.number = number;
4376   function error(value) {
4377     return value instanceof Error;
4378   }
4379   exports2.error = error;
4380   function func(value) {
4381     return typeof value === "function";
4382   }
4383   exports2.func = func;
4384   function array(value) {
4385     return Array.isArray(value);
4386   }
4387   exports2.array = array;
4388   function stringArray(value) {
4389     return array(value) && value.every((elem) => string2(elem));
4390   }
4391   exports2.stringArray = stringArray;
4392   function typedArray(value, check) {
4393     return Array.isArray(value) && value.every(check);
4394   }
4395   exports2.typedArray = typedArray;
4396   function objectLiteral(value) {
4397     return value !== null && typeof value === "object";
4398   }
4399   exports2.objectLiteral = objectLiteral;
4400 });
4401
4402 // node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js
4403 var require_protocol_implementation = __commonJS((exports2) => {
4404   "use strict";
4405   Object.defineProperty(exports2, "__esModule", {value: true});
4406   exports2.ImplementationRequest = void 0;
4407   var messages_1 = require_messages2();
4408   var ImplementationRequest;
4409   (function(ImplementationRequest2) {
4410     ImplementationRequest2.method = "textDocument/implementation";
4411     ImplementationRequest2.type = new messages_1.ProtocolRequestType(ImplementationRequest2.method);
4412   })(ImplementationRequest = exports2.ImplementationRequest || (exports2.ImplementationRequest = {}));
4413 });
4414
4415 // node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js
4416 var require_protocol_typeDefinition = __commonJS((exports2) => {
4417   "use strict";
4418   Object.defineProperty(exports2, "__esModule", {value: true});
4419   exports2.TypeDefinitionRequest = void 0;
4420   var messages_1 = require_messages2();
4421   var TypeDefinitionRequest;
4422   (function(TypeDefinitionRequest2) {
4423     TypeDefinitionRequest2.method = "textDocument/typeDefinition";
4424     TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest2.method);
4425   })(TypeDefinitionRequest = exports2.TypeDefinitionRequest || (exports2.TypeDefinitionRequest = {}));
4426 });
4427
4428 // node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolders.js
4429 var require_protocol_workspaceFolders = __commonJS((exports2) => {
4430   "use strict";
4431   Object.defineProperty(exports2, "__esModule", {value: true});
4432   exports2.DidChangeWorkspaceFoldersNotification = exports2.WorkspaceFoldersRequest = void 0;
4433   var messages_1 = require_messages2();
4434   var WorkspaceFoldersRequest;
4435   (function(WorkspaceFoldersRequest2) {
4436     WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0("workspace/workspaceFolders");
4437   })(WorkspaceFoldersRequest = exports2.WorkspaceFoldersRequest || (exports2.WorkspaceFoldersRequest = {}));
4438   var DidChangeWorkspaceFoldersNotification;
4439   (function(DidChangeWorkspaceFoldersNotification2) {
4440     DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWorkspaceFolders");
4441   })(DidChangeWorkspaceFoldersNotification = exports2.DidChangeWorkspaceFoldersNotification || (exports2.DidChangeWorkspaceFoldersNotification = {}));
4442 });
4443
4444 // node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js
4445 var require_protocol_configuration = __commonJS((exports2) => {
4446   "use strict";
4447   Object.defineProperty(exports2, "__esModule", {value: true});
4448   exports2.ConfigurationRequest = void 0;
4449   var messages_1 = require_messages2();
4450   var ConfigurationRequest;
4451   (function(ConfigurationRequest2) {
4452     ConfigurationRequest2.type = new messages_1.ProtocolRequestType("workspace/configuration");
4453   })(ConfigurationRequest = exports2.ConfigurationRequest || (exports2.ConfigurationRequest = {}));
4454 });
4455
4456 // node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js
4457 var require_protocol_colorProvider = __commonJS((exports2) => {
4458   "use strict";
4459   Object.defineProperty(exports2, "__esModule", {value: true});
4460   exports2.ColorPresentationRequest = exports2.DocumentColorRequest = void 0;
4461   var messages_1 = require_messages2();
4462   var DocumentColorRequest;
4463   (function(DocumentColorRequest2) {
4464     DocumentColorRequest2.method = "textDocument/documentColor";
4465     DocumentColorRequest2.type = new messages_1.ProtocolRequestType(DocumentColorRequest2.method);
4466   })(DocumentColorRequest = exports2.DocumentColorRequest || (exports2.DocumentColorRequest = {}));
4467   var ColorPresentationRequest;
4468   (function(ColorPresentationRequest2) {
4469     ColorPresentationRequest2.type = new messages_1.ProtocolRequestType("textDocument/colorPresentation");
4470   })(ColorPresentationRequest = exports2.ColorPresentationRequest || (exports2.ColorPresentationRequest = {}));
4471 });
4472
4473 // node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js
4474 var require_protocol_foldingRange = __commonJS((exports2) => {
4475   "use strict";
4476   Object.defineProperty(exports2, "__esModule", {value: true});
4477   exports2.FoldingRangeRequest = exports2.FoldingRangeKind = void 0;
4478   var messages_1 = require_messages2();
4479   var FoldingRangeKind;
4480   (function(FoldingRangeKind2) {
4481     FoldingRangeKind2["Comment"] = "comment";
4482     FoldingRangeKind2["Imports"] = "imports";
4483     FoldingRangeKind2["Region"] = "region";
4484   })(FoldingRangeKind = exports2.FoldingRangeKind || (exports2.FoldingRangeKind = {}));
4485   var FoldingRangeRequest;
4486   (function(FoldingRangeRequest2) {
4487     FoldingRangeRequest2.method = "textDocument/foldingRange";
4488     FoldingRangeRequest2.type = new messages_1.ProtocolRequestType(FoldingRangeRequest2.method);
4489   })(FoldingRangeRequest = exports2.FoldingRangeRequest || (exports2.FoldingRangeRequest = {}));
4490 });
4491
4492 // node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js
4493 var require_protocol_declaration = __commonJS((exports2) => {
4494   "use strict";
4495   Object.defineProperty(exports2, "__esModule", {value: true});
4496   exports2.DeclarationRequest = void 0;
4497   var messages_1 = require_messages2();
4498   var DeclarationRequest;
4499   (function(DeclarationRequest2) {
4500     DeclarationRequest2.method = "textDocument/declaration";
4501     DeclarationRequest2.type = new messages_1.ProtocolRequestType(DeclarationRequest2.method);
4502   })(DeclarationRequest = exports2.DeclarationRequest || (exports2.DeclarationRequest = {}));
4503 });
4504
4505 // node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js
4506 var require_protocol_selectionRange = __commonJS((exports2) => {
4507   "use strict";
4508   Object.defineProperty(exports2, "__esModule", {value: true});
4509   exports2.SelectionRangeRequest = void 0;
4510   var messages_1 = require_messages2();
4511   var SelectionRangeRequest;
4512   (function(SelectionRangeRequest2) {
4513     SelectionRangeRequest2.method = "textDocument/selectionRange";
4514     SelectionRangeRequest2.type = new messages_1.ProtocolRequestType(SelectionRangeRequest2.method);
4515   })(SelectionRangeRequest = exports2.SelectionRangeRequest || (exports2.SelectionRangeRequest = {}));
4516 });
4517
4518 // node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js
4519 var require_protocol_progress = __commonJS((exports2) => {
4520   "use strict";
4521   Object.defineProperty(exports2, "__esModule", {value: true});
4522   exports2.WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCreateRequest = exports2.WorkDoneProgress = void 0;
4523   var vscode_jsonrpc_1 = require_main();
4524   var messages_1 = require_messages2();
4525   var WorkDoneProgress;
4526   (function(WorkDoneProgress2) {
4527     WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType();
4528     function is2(value) {
4529       return value === WorkDoneProgress2.type;
4530     }
4531     WorkDoneProgress2.is = is2;
4532   })(WorkDoneProgress = exports2.WorkDoneProgress || (exports2.WorkDoneProgress = {}));
4533   var WorkDoneProgressCreateRequest;
4534   (function(WorkDoneProgressCreateRequest2) {
4535     WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType("window/workDoneProgress/create");
4536   })(WorkDoneProgressCreateRequest = exports2.WorkDoneProgressCreateRequest || (exports2.WorkDoneProgressCreateRequest = {}));
4537   var WorkDoneProgressCancelNotification;
4538   (function(WorkDoneProgressCancelNotification2) {
4539     WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType("window/workDoneProgress/cancel");
4540   })(WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCancelNotification || (exports2.WorkDoneProgressCancelNotification = {}));
4541 });
4542
4543 // node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js
4544 var require_protocol_callHierarchy = __commonJS((exports2) => {
4545   "use strict";
4546   Object.defineProperty(exports2, "__esModule", {value: true});
4547   exports2.CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyIncomingCallsRequest = exports2.CallHierarchyPrepareRequest = void 0;
4548   var messages_1 = require_messages2();
4549   var CallHierarchyPrepareRequest;
4550   (function(CallHierarchyPrepareRequest2) {
4551     CallHierarchyPrepareRequest2.method = "textDocument/prepareCallHierarchy";
4552     CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest2.method);
4553   })(CallHierarchyPrepareRequest = exports2.CallHierarchyPrepareRequest || (exports2.CallHierarchyPrepareRequest = {}));
4554   var CallHierarchyIncomingCallsRequest;
4555   (function(CallHierarchyIncomingCallsRequest2) {
4556     CallHierarchyIncomingCallsRequest2.method = "callHierarchy/incomingCalls";
4557     CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest2.method);
4558   })(CallHierarchyIncomingCallsRequest = exports2.CallHierarchyIncomingCallsRequest || (exports2.CallHierarchyIncomingCallsRequest = {}));
4559   var CallHierarchyOutgoingCallsRequest;
4560   (function(CallHierarchyOutgoingCallsRequest2) {
4561     CallHierarchyOutgoingCallsRequest2.method = "callHierarchy/outgoingCalls";
4562     CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest2.method);
4563   })(CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyOutgoingCallsRequest || (exports2.CallHierarchyOutgoingCallsRequest = {}));
4564 });
4565
4566 // node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js
4567 var require_protocol_semanticTokens = __commonJS((exports2) => {
4568   "use strict";
4569   Object.defineProperty(exports2, "__esModule", {value: true});
4570   exports2.SemanticTokensRefreshRequest = exports2.SemanticTokensRangeRequest = exports2.SemanticTokensDeltaRequest = exports2.SemanticTokensRequest = exports2.SemanticTokensRegistrationType = exports2.TokenFormat = exports2.SemanticTokens = exports2.SemanticTokenModifiers = exports2.SemanticTokenTypes = void 0;
4571   var messages_1 = require_messages2();
4572   var SemanticTokenTypes;
4573   (function(SemanticTokenTypes2) {
4574     SemanticTokenTypes2["namespace"] = "namespace";
4575     SemanticTokenTypes2["type"] = "type";
4576     SemanticTokenTypes2["class"] = "class";
4577     SemanticTokenTypes2["enum"] = "enum";
4578     SemanticTokenTypes2["interface"] = "interface";
4579     SemanticTokenTypes2["struct"] = "struct";
4580     SemanticTokenTypes2["typeParameter"] = "typeParameter";
4581     SemanticTokenTypes2["parameter"] = "parameter";
4582     SemanticTokenTypes2["variable"] = "variable";
4583     SemanticTokenTypes2["property"] = "property";
4584     SemanticTokenTypes2["enumMember"] = "enumMember";
4585     SemanticTokenTypes2["event"] = "event";
4586     SemanticTokenTypes2["function"] = "function";
4587     SemanticTokenTypes2["method"] = "method";
4588     SemanticTokenTypes2["macro"] = "macro";
4589     SemanticTokenTypes2["keyword"] = "keyword";
4590     SemanticTokenTypes2["modifier"] = "modifier";
4591     SemanticTokenTypes2["comment"] = "comment";
4592     SemanticTokenTypes2["string"] = "string";
4593     SemanticTokenTypes2["number"] = "number";
4594     SemanticTokenTypes2["regexp"] = "regexp";
4595     SemanticTokenTypes2["operator"] = "operator";
4596   })(SemanticTokenTypes = exports2.SemanticTokenTypes || (exports2.SemanticTokenTypes = {}));
4597   var SemanticTokenModifiers;
4598   (function(SemanticTokenModifiers2) {
4599     SemanticTokenModifiers2["declaration"] = "declaration";
4600     SemanticTokenModifiers2["definition"] = "definition";
4601     SemanticTokenModifiers2["readonly"] = "readonly";
4602     SemanticTokenModifiers2["static"] = "static";
4603     SemanticTokenModifiers2["deprecated"] = "deprecated";
4604     SemanticTokenModifiers2["abstract"] = "abstract";
4605     SemanticTokenModifiers2["async"] = "async";
4606     SemanticTokenModifiers2["modification"] = "modification";
4607     SemanticTokenModifiers2["documentation"] = "documentation";
4608     SemanticTokenModifiers2["defaultLibrary"] = "defaultLibrary";
4609   })(SemanticTokenModifiers = exports2.SemanticTokenModifiers || (exports2.SemanticTokenModifiers = {}));
4610   var SemanticTokens;
4611   (function(SemanticTokens2) {
4612     function is2(value) {
4613       const candidate = value;
4614       return candidate !== void 0 && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
4615     }
4616     SemanticTokens2.is = is2;
4617   })(SemanticTokens = exports2.SemanticTokens || (exports2.SemanticTokens = {}));
4618   var TokenFormat;
4619   (function(TokenFormat2) {
4620     TokenFormat2.Relative = "relative";
4621   })(TokenFormat = exports2.TokenFormat || (exports2.TokenFormat = {}));
4622   var SemanticTokensRegistrationType;
4623   (function(SemanticTokensRegistrationType2) {
4624     SemanticTokensRegistrationType2.method = "textDocument/semanticTokens";
4625     SemanticTokensRegistrationType2.type = new messages_1.RegistrationType(SemanticTokensRegistrationType2.method);
4626   })(SemanticTokensRegistrationType = exports2.SemanticTokensRegistrationType || (exports2.SemanticTokensRegistrationType = {}));
4627   var SemanticTokensRequest;
4628   (function(SemanticTokensRequest2) {
4629     SemanticTokensRequest2.method = "textDocument/semanticTokens/full";
4630     SemanticTokensRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRequest2.method);
4631   })(SemanticTokensRequest = exports2.SemanticTokensRequest || (exports2.SemanticTokensRequest = {}));
4632   var SemanticTokensDeltaRequest;
4633   (function(SemanticTokensDeltaRequest2) {
4634     SemanticTokensDeltaRequest2.method = "textDocument/semanticTokens/full/delta";
4635     SemanticTokensDeltaRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest2.method);
4636   })(SemanticTokensDeltaRequest = exports2.SemanticTokensDeltaRequest || (exports2.SemanticTokensDeltaRequest = {}));
4637   var SemanticTokensRangeRequest;
4638   (function(SemanticTokensRangeRequest2) {
4639     SemanticTokensRangeRequest2.method = "textDocument/semanticTokens/range";
4640     SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest2.method);
4641   })(SemanticTokensRangeRequest = exports2.SemanticTokensRangeRequest || (exports2.SemanticTokensRangeRequest = {}));
4642   var SemanticTokensRefreshRequest;
4643   (function(SemanticTokensRefreshRequest2) {
4644     SemanticTokensRefreshRequest2.method = `workspace/semanticTokens/refresh`;
4645     SemanticTokensRefreshRequest2.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest2.method);
4646   })(SemanticTokensRefreshRequest = exports2.SemanticTokensRefreshRequest || (exports2.SemanticTokensRefreshRequest = {}));
4647 });
4648
4649 // node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js
4650 var require_protocol_showDocument = __commonJS((exports2) => {
4651   "use strict";
4652   Object.defineProperty(exports2, "__esModule", {value: true});
4653   exports2.ShowDocumentRequest = void 0;
4654   var messages_1 = require_messages2();
4655   var ShowDocumentRequest;
4656   (function(ShowDocumentRequest2) {
4657     ShowDocumentRequest2.method = "window/showDocument";
4658     ShowDocumentRequest2.type = new messages_1.ProtocolRequestType(ShowDocumentRequest2.method);
4659   })(ShowDocumentRequest = exports2.ShowDocumentRequest || (exports2.ShowDocumentRequest = {}));
4660 });
4661
4662 // node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js
4663 var require_protocol_linkedEditingRange = __commonJS((exports2) => {
4664   "use strict";
4665   Object.defineProperty(exports2, "__esModule", {value: true});
4666   exports2.LinkedEditingRangeRequest = void 0;
4667   var messages_1 = require_messages2();
4668   var LinkedEditingRangeRequest;
4669   (function(LinkedEditingRangeRequest2) {
4670     LinkedEditingRangeRequest2.method = "textDocument/linkedEditingRange";
4671     LinkedEditingRangeRequest2.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest2.method);
4672   })(LinkedEditingRangeRequest = exports2.LinkedEditingRangeRequest || (exports2.LinkedEditingRangeRequest = {}));
4673 });
4674
4675 // node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js
4676 var require_protocol_fileOperations = __commonJS((exports2) => {
4677   "use strict";
4678   Object.defineProperty(exports2, "__esModule", {value: true});
4679   exports2.WillDeleteFilesRequest = exports2.DidDeleteFilesNotification = exports2.DidRenameFilesNotification = exports2.WillRenameFilesRequest = exports2.DidCreateFilesNotification = exports2.WillCreateFilesRequest = exports2.FileOperationPatternKind = void 0;
4680   var messages_1 = require_messages2();
4681   var FileOperationPatternKind;
4682   (function(FileOperationPatternKind2) {
4683     FileOperationPatternKind2.file = "file";
4684     FileOperationPatternKind2.folder = "folder";
4685   })(FileOperationPatternKind = exports2.FileOperationPatternKind || (exports2.FileOperationPatternKind = {}));
4686   var WillCreateFilesRequest;
4687   (function(WillCreateFilesRequest2) {
4688     WillCreateFilesRequest2.method = "workspace/willCreateFiles";
4689     WillCreateFilesRequest2.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest2.method);
4690   })(WillCreateFilesRequest = exports2.WillCreateFilesRequest || (exports2.WillCreateFilesRequest = {}));
4691   var DidCreateFilesNotification;
4692   (function(DidCreateFilesNotification2) {
4693     DidCreateFilesNotification2.method = "workspace/didCreateFiles";
4694     DidCreateFilesNotification2.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification2.method);
4695   })(DidCreateFilesNotification = exports2.DidCreateFilesNotification || (exports2.DidCreateFilesNotification = {}));
4696   var WillRenameFilesRequest;
4697   (function(WillRenameFilesRequest2) {
4698     WillRenameFilesRequest2.method = "workspace/willRenameFiles";
4699     WillRenameFilesRequest2.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest2.method);
4700   })(WillRenameFilesRequest = exports2.WillRenameFilesRequest || (exports2.WillRenameFilesRequest = {}));
4701   var DidRenameFilesNotification;
4702   (function(DidRenameFilesNotification2) {
4703     DidRenameFilesNotification2.method = "workspace/didRenameFiles";
4704     DidRenameFilesNotification2.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification2.method);
4705   })(DidRenameFilesNotification = exports2.DidRenameFilesNotification || (exports2.DidRenameFilesNotification = {}));
4706   var DidDeleteFilesNotification;
4707   (function(DidDeleteFilesNotification2) {
4708     DidDeleteFilesNotification2.method = "workspace/didDeleteFiles";
4709     DidDeleteFilesNotification2.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification2.method);
4710   })(DidDeleteFilesNotification = exports2.DidDeleteFilesNotification || (exports2.DidDeleteFilesNotification = {}));
4711   var WillDeleteFilesRequest;
4712   (function(WillDeleteFilesRequest2) {
4713     WillDeleteFilesRequest2.method = "workspace/willDeleteFiles";
4714     WillDeleteFilesRequest2.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest2.method);
4715   })(WillDeleteFilesRequest = exports2.WillDeleteFilesRequest || (exports2.WillDeleteFilesRequest = {}));
4716 });
4717
4718 // node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js
4719 var require_protocol_moniker = __commonJS((exports2) => {
4720   "use strict";
4721   Object.defineProperty(exports2, "__esModule", {value: true});
4722   exports2.MonikerRequest = exports2.MonikerKind = exports2.UniquenessLevel = void 0;
4723   var messages_1 = require_messages2();
4724   var UniquenessLevel;
4725   (function(UniquenessLevel2) {
4726     UniquenessLevel2["document"] = "document";
4727     UniquenessLevel2["project"] = "project";
4728     UniquenessLevel2["group"] = "group";
4729     UniquenessLevel2["scheme"] = "scheme";
4730     UniquenessLevel2["global"] = "global";
4731   })(UniquenessLevel = exports2.UniquenessLevel || (exports2.UniquenessLevel = {}));
4732   var MonikerKind;
4733   (function(MonikerKind2) {
4734     MonikerKind2["import"] = "import";
4735     MonikerKind2["export"] = "export";
4736     MonikerKind2["local"] = "local";
4737   })(MonikerKind = exports2.MonikerKind || (exports2.MonikerKind = {}));
4738   var MonikerRequest;
4739   (function(MonikerRequest2) {
4740     MonikerRequest2.method = "textDocument/moniker";
4741     MonikerRequest2.type = new messages_1.ProtocolRequestType(MonikerRequest2.method);
4742   })(MonikerRequest = exports2.MonikerRequest || (exports2.MonikerRequest = {}));
4743 });
4744
4745 // node_modules/vscode-languageserver-protocol/lib/common/protocol.js
4746 var require_protocol = __commonJS((exports2) => {
4747   "use strict";
4748   Object.defineProperty(exports2, "__esModule", {value: true});
4749   exports2.DocumentLinkRequest = exports2.CodeLensRefreshRequest = exports2.CodeLensResolveRequest = exports2.CodeLensRequest = exports2.WorkspaceSymbolRequest = exports2.CodeActionResolveRequest = exports2.CodeActionRequest = exports2.DocumentSymbolRequest = exports2.DocumentHighlightRequest = exports2.ReferencesRequest = exports2.DefinitionRequest = exports2.SignatureHelpRequest = exports2.SignatureHelpTriggerKind = exports2.HoverRequest = exports2.CompletionResolveRequest = exports2.CompletionRequest = exports2.CompletionTriggerKind = exports2.PublishDiagnosticsNotification = exports2.WatchKind = exports2.FileChangeType = exports2.DidChangeWatchedFilesNotification = exports2.WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentNotification = exports2.TextDocumentSaveReason = exports2.DidSaveTextDocumentNotification = exports2.DidCloseTextDocumentNotification = exports2.DidChangeTextDocumentNotification = exports2.TextDocumentContentChangeEvent = exports2.DidOpenTextDocumentNotification = exports2.TextDocumentSyncKind = exports2.TelemetryEventNotification = exports2.LogMessageNotification = exports2.ShowMessageRequest = exports2.ShowMessageNotification = exports2.MessageType = exports2.DidChangeConfigurationNotification = exports2.ExitNotification = exports2.ShutdownRequest = exports2.InitializedNotification = exports2.InitializeError = exports2.InitializeRequest = exports2.WorkDoneProgressOptions = exports2.TextDocumentRegistrationOptions = exports2.StaticRegistrationOptions = exports2.FailureHandlingKind = exports2.ResourceOperationKind = exports2.UnregistrationRequest = exports2.RegistrationRequest = exports2.DocumentSelector = exports2.DocumentFilter = void 0;
4750   exports2.MonikerRequest = exports2.MonikerKind = exports2.UniquenessLevel = exports2.WillDeleteFilesRequest = exports2.DidDeleteFilesNotification = exports2.WillRenameFilesRequest = exports2.DidRenameFilesNotification = exports2.WillCreateFilesRequest = exports2.DidCreateFilesNotification = exports2.FileOperationPatternKind = exports2.LinkedEditingRangeRequest = exports2.ShowDocumentRequest = exports2.SemanticTokensRegistrationType = exports2.SemanticTokensRefreshRequest = exports2.SemanticTokensRangeRequest = exports2.SemanticTokensDeltaRequest = exports2.SemanticTokensRequest = exports2.TokenFormat = exports2.SemanticTokens = exports2.SemanticTokenModifiers = exports2.SemanticTokenTypes = exports2.CallHierarchyPrepareRequest = exports2.CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyIncomingCallsRequest = exports2.WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCreateRequest = exports2.WorkDoneProgress = exports2.SelectionRangeRequest = exports2.DeclarationRequest = exports2.FoldingRangeRequest = exports2.ColorPresentationRequest = exports2.DocumentColorRequest = exports2.ConfigurationRequest = exports2.DidChangeWorkspaceFoldersNotification = exports2.WorkspaceFoldersRequest = exports2.TypeDefinitionRequest = exports2.ImplementationRequest = exports2.ApplyWorkspaceEditRequest = exports2.ExecuteCommandRequest = exports2.PrepareRenameRequest = exports2.RenameRequest = exports2.PrepareSupportDefaultBehavior = exports2.DocumentOnTypeFormattingRequest = exports2.DocumentRangeFormattingRequest = exports2.DocumentFormattingRequest = exports2.DocumentLinkResolveRequest = void 0;
4751   var Is = require_is2();
4752   var messages_1 = require_messages2();
4753   var protocol_implementation_1 = require_protocol_implementation();
4754   Object.defineProperty(exports2, "ImplementationRequest", {enumerable: true, get: function() {
4755     return protocol_implementation_1.ImplementationRequest;
4756   }});
4757   var protocol_typeDefinition_1 = require_protocol_typeDefinition();
4758   Object.defineProperty(exports2, "TypeDefinitionRequest", {enumerable: true, get: function() {
4759     return protocol_typeDefinition_1.TypeDefinitionRequest;
4760   }});
4761   var protocol_workspaceFolders_1 = require_protocol_workspaceFolders();
4762   Object.defineProperty(exports2, "WorkspaceFoldersRequest", {enumerable: true, get: function() {
4763     return protocol_workspaceFolders_1.WorkspaceFoldersRequest;
4764   }});
4765   Object.defineProperty(exports2, "DidChangeWorkspaceFoldersNotification", {enumerable: true, get: function() {
4766     return protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
4767   }});
4768   var protocol_configuration_1 = require_protocol_configuration();
4769   Object.defineProperty(exports2, "ConfigurationRequest", {enumerable: true, get: function() {
4770     return protocol_configuration_1.ConfigurationRequest;
4771   }});
4772   var protocol_colorProvider_1 = require_protocol_colorProvider();
4773   Object.defineProperty(exports2, "DocumentColorRequest", {enumerable: true, get: function() {
4774     return protocol_colorProvider_1.DocumentColorRequest;
4775   }});
4776   Object.defineProperty(exports2, "ColorPresentationRequest", {enumerable: true, get: function() {
4777     return protocol_colorProvider_1.ColorPresentationRequest;
4778   }});
4779   var protocol_foldingRange_1 = require_protocol_foldingRange();
4780   Object.defineProperty(exports2, "FoldingRangeRequest", {enumerable: true, get: function() {
4781     return protocol_foldingRange_1.FoldingRangeRequest;
4782   }});
4783   var protocol_declaration_1 = require_protocol_declaration();
4784   Object.defineProperty(exports2, "DeclarationRequest", {enumerable: true, get: function() {
4785     return protocol_declaration_1.DeclarationRequest;
4786   }});
4787   var protocol_selectionRange_1 = require_protocol_selectionRange();
4788   Object.defineProperty(exports2, "SelectionRangeRequest", {enumerable: true, get: function() {
4789     return protocol_selectionRange_1.SelectionRangeRequest;
4790   }});
4791   var protocol_progress_1 = require_protocol_progress();
4792   Object.defineProperty(exports2, "WorkDoneProgress", {enumerable: true, get: function() {
4793     return protocol_progress_1.WorkDoneProgress;
4794   }});
4795   Object.defineProperty(exports2, "WorkDoneProgressCreateRequest", {enumerable: true, get: function() {
4796     return protocol_progress_1.WorkDoneProgressCreateRequest;
4797   }});
4798   Object.defineProperty(exports2, "WorkDoneProgressCancelNotification", {enumerable: true, get: function() {
4799     return protocol_progress_1.WorkDoneProgressCancelNotification;
4800   }});
4801   var protocol_callHierarchy_1 = require_protocol_callHierarchy();
4802   Object.defineProperty(exports2, "CallHierarchyIncomingCallsRequest", {enumerable: true, get: function() {
4803     return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest;
4804   }});
4805   Object.defineProperty(exports2, "CallHierarchyOutgoingCallsRequest", {enumerable: true, get: function() {
4806     return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest;
4807   }});
4808   Object.defineProperty(exports2, "CallHierarchyPrepareRequest", {enumerable: true, get: function() {
4809     return protocol_callHierarchy_1.CallHierarchyPrepareRequest;
4810   }});
4811   var protocol_semanticTokens_1 = require_protocol_semanticTokens();
4812   Object.defineProperty(exports2, "SemanticTokenTypes", {enumerable: true, get: function() {
4813     return protocol_semanticTokens_1.SemanticTokenTypes;
4814   }});
4815   Object.defineProperty(exports2, "SemanticTokenModifiers", {enumerable: true, get: function() {
4816     return protocol_semanticTokens_1.SemanticTokenModifiers;
4817   }});
4818   Object.defineProperty(exports2, "SemanticTokens", {enumerable: true, get: function() {
4819     return protocol_semanticTokens_1.SemanticTokens;
4820   }});
4821   Object.defineProperty(exports2, "TokenFormat", {enumerable: true, get: function() {
4822     return protocol_semanticTokens_1.TokenFormat;
4823   }});
4824   Object.defineProperty(exports2, "SemanticTokensRequest", {enumerable: true, get: function() {
4825     return protocol_semanticTokens_1.SemanticTokensRequest;
4826   }});
4827   Object.defineProperty(exports2, "SemanticTokensDeltaRequest", {enumerable: true, get: function() {
4828     return protocol_semanticTokens_1.SemanticTokensDeltaRequest;
4829   }});
4830   Object.defineProperty(exports2, "SemanticTokensRangeRequest", {enumerable: true, get: function() {
4831     return protocol_semanticTokens_1.SemanticTokensRangeRequest;
4832   }});
4833   Object.defineProperty(exports2, "SemanticTokensRefreshRequest", {enumerable: true, get: function() {
4834     return protocol_semanticTokens_1.SemanticTokensRefreshRequest;
4835   }});
4836   Object.defineProperty(exports2, "SemanticTokensRegistrationType", {enumerable: true, get: function() {
4837     return protocol_semanticTokens_1.SemanticTokensRegistrationType;
4838   }});
4839   var protocol_showDocument_1 = require_protocol_showDocument();
4840   Object.defineProperty(exports2, "ShowDocumentRequest", {enumerable: true, get: function() {
4841     return protocol_showDocument_1.ShowDocumentRequest;
4842   }});
4843   var protocol_linkedEditingRange_1 = require_protocol_linkedEditingRange();
4844   Object.defineProperty(exports2, "LinkedEditingRangeRequest", {enumerable: true, get: function() {
4845     return protocol_linkedEditingRange_1.LinkedEditingRangeRequest;
4846   }});
4847   var protocol_fileOperations_1 = require_protocol_fileOperations();
4848   Object.defineProperty(exports2, "FileOperationPatternKind", {enumerable: true, get: function() {
4849     return protocol_fileOperations_1.FileOperationPatternKind;
4850   }});
4851   Object.defineProperty(exports2, "DidCreateFilesNotification", {enumerable: true, get: function() {
4852     return protocol_fileOperations_1.DidCreateFilesNotification;
4853   }});
4854   Object.defineProperty(exports2, "WillCreateFilesRequest", {enumerable: true, get: function() {
4855     return protocol_fileOperations_1.WillCreateFilesRequest;
4856   }});
4857   Object.defineProperty(exports2, "DidRenameFilesNotification", {enumerable: true, get: function() {
4858     return protocol_fileOperations_1.DidRenameFilesNotification;
4859   }});
4860   Object.defineProperty(exports2, "WillRenameFilesRequest", {enumerable: true, get: function() {
4861     return protocol_fileOperations_1.WillRenameFilesRequest;
4862   }});
4863   Object.defineProperty(exports2, "DidDeleteFilesNotification", {enumerable: true, get: function() {
4864     return protocol_fileOperations_1.DidDeleteFilesNotification;
4865   }});
4866   Object.defineProperty(exports2, "WillDeleteFilesRequest", {enumerable: true, get: function() {
4867     return protocol_fileOperations_1.WillDeleteFilesRequest;
4868   }});
4869   var protocol_moniker_1 = require_protocol_moniker();
4870   Object.defineProperty(exports2, "UniquenessLevel", {enumerable: true, get: function() {
4871     return protocol_moniker_1.UniquenessLevel;
4872   }});
4873   Object.defineProperty(exports2, "MonikerKind", {enumerable: true, get: function() {
4874     return protocol_moniker_1.MonikerKind;
4875   }});
4876   Object.defineProperty(exports2, "MonikerRequest", {enumerable: true, get: function() {
4877     return protocol_moniker_1.MonikerRequest;
4878   }});
4879   var DocumentFilter;
4880   (function(DocumentFilter2) {
4881     function is2(value) {
4882       const candidate = value;
4883       return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
4884     }
4885     DocumentFilter2.is = is2;
4886   })(DocumentFilter = exports2.DocumentFilter || (exports2.DocumentFilter = {}));
4887   var DocumentSelector2;
4888   (function(DocumentSelector3) {
4889     function is2(value) {
4890       if (!Array.isArray(value)) {
4891         return false;
4892       }
4893       for (let elem of value) {
4894         if (!Is.string(elem) && !DocumentFilter.is(elem)) {
4895           return false;
4896         }
4897       }
4898       return true;
4899     }
4900     DocumentSelector3.is = is2;
4901   })(DocumentSelector2 = exports2.DocumentSelector || (exports2.DocumentSelector = {}));
4902   var RegistrationRequest;
4903   (function(RegistrationRequest2) {
4904     RegistrationRequest2.type = new messages_1.ProtocolRequestType("client/registerCapability");
4905   })(RegistrationRequest = exports2.RegistrationRequest || (exports2.RegistrationRequest = {}));
4906   var UnregistrationRequest;
4907   (function(UnregistrationRequest2) {
4908     UnregistrationRequest2.type = new messages_1.ProtocolRequestType("client/unregisterCapability");
4909   })(UnregistrationRequest = exports2.UnregistrationRequest || (exports2.UnregistrationRequest = {}));
4910   var ResourceOperationKind;
4911   (function(ResourceOperationKind2) {
4912     ResourceOperationKind2.Create = "create";
4913     ResourceOperationKind2.Rename = "rename";
4914     ResourceOperationKind2.Delete = "delete";
4915   })(ResourceOperationKind = exports2.ResourceOperationKind || (exports2.ResourceOperationKind = {}));
4916   var FailureHandlingKind;
4917   (function(FailureHandlingKind2) {
4918     FailureHandlingKind2.Abort = "abort";
4919     FailureHandlingKind2.Transactional = "transactional";
4920     FailureHandlingKind2.TextOnlyTransactional = "textOnlyTransactional";
4921     FailureHandlingKind2.Undo = "undo";
4922   })(FailureHandlingKind = exports2.FailureHandlingKind || (exports2.FailureHandlingKind = {}));
4923   var StaticRegistrationOptions;
4924   (function(StaticRegistrationOptions2) {
4925     function hasId(value) {
4926       const candidate = value;
4927       return candidate && Is.string(candidate.id) && candidate.id.length > 0;
4928     }
4929     StaticRegistrationOptions2.hasId = hasId;
4930   })(StaticRegistrationOptions = exports2.StaticRegistrationOptions || (exports2.StaticRegistrationOptions = {}));
4931   var TextDocumentRegistrationOptions;
4932   (function(TextDocumentRegistrationOptions2) {
4933     function is2(value) {
4934       const candidate = value;
4935       return candidate && (candidate.documentSelector === null || DocumentSelector2.is(candidate.documentSelector));
4936     }
4937     TextDocumentRegistrationOptions2.is = is2;
4938   })(TextDocumentRegistrationOptions = exports2.TextDocumentRegistrationOptions || (exports2.TextDocumentRegistrationOptions = {}));
4939   var WorkDoneProgressOptions;
4940   (function(WorkDoneProgressOptions2) {
4941     function is2(value) {
4942       const candidate = value;
4943       return Is.objectLiteral(candidate) && (candidate.workDoneProgress === void 0 || Is.boolean(candidate.workDoneProgress));
4944     }
4945     WorkDoneProgressOptions2.is = is2;
4946     function hasWorkDoneProgress(value) {
4947       const candidate = value;
4948       return candidate && Is.boolean(candidate.workDoneProgress);
4949     }
4950     WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress;
4951   })(WorkDoneProgressOptions = exports2.WorkDoneProgressOptions || (exports2.WorkDoneProgressOptions = {}));
4952   var InitializeRequest;
4953   (function(InitializeRequest2) {
4954     InitializeRequest2.type = new messages_1.ProtocolRequestType("initialize");
4955   })(InitializeRequest = exports2.InitializeRequest || (exports2.InitializeRequest = {}));
4956   var InitializeError;
4957   (function(InitializeError2) {
4958     InitializeError2.unknownProtocolVersion = 1;
4959   })(InitializeError = exports2.InitializeError || (exports2.InitializeError = {}));
4960   var InitializedNotification;
4961   (function(InitializedNotification2) {
4962     InitializedNotification2.type = new messages_1.ProtocolNotificationType("initialized");
4963   })(InitializedNotification = exports2.InitializedNotification || (exports2.InitializedNotification = {}));
4964   var ShutdownRequest;
4965   (function(ShutdownRequest2) {
4966     ShutdownRequest2.type = new messages_1.ProtocolRequestType0("shutdown");
4967   })(ShutdownRequest = exports2.ShutdownRequest || (exports2.ShutdownRequest = {}));
4968   var ExitNotification;
4969   (function(ExitNotification2) {
4970     ExitNotification2.type = new messages_1.ProtocolNotificationType0("exit");
4971   })(ExitNotification = exports2.ExitNotification || (exports2.ExitNotification = {}));
4972   var DidChangeConfigurationNotification;
4973   (function(DidChangeConfigurationNotification2) {
4974     DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeConfiguration");
4975   })(DidChangeConfigurationNotification = exports2.DidChangeConfigurationNotification || (exports2.DidChangeConfigurationNotification = {}));
4976   var MessageType;
4977   (function(MessageType2) {
4978     MessageType2.Error = 1;
4979     MessageType2.Warning = 2;
4980     MessageType2.Info = 3;
4981     MessageType2.Log = 4;
4982   })(MessageType = exports2.MessageType || (exports2.MessageType = {}));
4983   var ShowMessageNotification;
4984   (function(ShowMessageNotification2) {
4985     ShowMessageNotification2.type = new messages_1.ProtocolNotificationType("window/showMessage");
4986   })(ShowMessageNotification = exports2.ShowMessageNotification || (exports2.ShowMessageNotification = {}));
4987   var ShowMessageRequest;
4988   (function(ShowMessageRequest2) {
4989     ShowMessageRequest2.type = new messages_1.ProtocolRequestType("window/showMessageRequest");
4990   })(ShowMessageRequest = exports2.ShowMessageRequest || (exports2.ShowMessageRequest = {}));
4991   var LogMessageNotification;
4992   (function(LogMessageNotification2) {
4993     LogMessageNotification2.type = new messages_1.ProtocolNotificationType("window/logMessage");
4994   })(LogMessageNotification = exports2.LogMessageNotification || (exports2.LogMessageNotification = {}));
4995   var TelemetryEventNotification;
4996   (function(TelemetryEventNotification2) {
4997     TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType("telemetry/event");
4998   })(TelemetryEventNotification = exports2.TelemetryEventNotification || (exports2.TelemetryEventNotification = {}));
4999   var TextDocumentSyncKind;
5000   (function(TextDocumentSyncKind2) {
5001     TextDocumentSyncKind2.None = 0;
5002     TextDocumentSyncKind2.Full = 1;
5003     TextDocumentSyncKind2.Incremental = 2;
5004   })(TextDocumentSyncKind = exports2.TextDocumentSyncKind || (exports2.TextDocumentSyncKind = {}));
5005   var DidOpenTextDocumentNotification;
5006   (function(DidOpenTextDocumentNotification2) {
5007     DidOpenTextDocumentNotification2.method = "textDocument/didOpen";
5008     DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification2.method);
5009   })(DidOpenTextDocumentNotification = exports2.DidOpenTextDocumentNotification || (exports2.DidOpenTextDocumentNotification = {}));
5010   var TextDocumentContentChangeEvent2;
5011   (function(TextDocumentContentChangeEvent3) {
5012     function isIncremental(event) {
5013       let candidate = event;
5014       return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === "number");
5015     }
5016     TextDocumentContentChangeEvent3.isIncremental = isIncremental;
5017     function isFull(event) {
5018       let candidate = event;
5019       return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range === void 0 && candidate.rangeLength === void 0;
5020     }
5021     TextDocumentContentChangeEvent3.isFull = isFull;
5022   })(TextDocumentContentChangeEvent2 = exports2.TextDocumentContentChangeEvent || (exports2.TextDocumentContentChangeEvent = {}));
5023   var DidChangeTextDocumentNotification;
5024   (function(DidChangeTextDocumentNotification2) {
5025     DidChangeTextDocumentNotification2.method = "textDocument/didChange";
5026     DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification2.method);
5027   })(DidChangeTextDocumentNotification = exports2.DidChangeTextDocumentNotification || (exports2.DidChangeTextDocumentNotification = {}));
5028   var DidCloseTextDocumentNotification;
5029   (function(DidCloseTextDocumentNotification2) {
5030     DidCloseTextDocumentNotification2.method = "textDocument/didClose";
5031     DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification2.method);
5032   })(DidCloseTextDocumentNotification = exports2.DidCloseTextDocumentNotification || (exports2.DidCloseTextDocumentNotification = {}));
5033   var DidSaveTextDocumentNotification;
5034   (function(DidSaveTextDocumentNotification2) {
5035     DidSaveTextDocumentNotification2.method = "textDocument/didSave";
5036     DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification2.method);
5037   })(DidSaveTextDocumentNotification = exports2.DidSaveTextDocumentNotification || (exports2.DidSaveTextDocumentNotification = {}));
5038   var TextDocumentSaveReason;
5039   (function(TextDocumentSaveReason2) {
5040     TextDocumentSaveReason2.Manual = 1;
5041     TextDocumentSaveReason2.AfterDelay = 2;
5042     TextDocumentSaveReason2.FocusOut = 3;
5043   })(TextDocumentSaveReason = exports2.TextDocumentSaveReason || (exports2.TextDocumentSaveReason = {}));
5044   var WillSaveTextDocumentNotification;
5045   (function(WillSaveTextDocumentNotification2) {
5046     WillSaveTextDocumentNotification2.method = "textDocument/willSave";
5047     WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification2.method);
5048   })(WillSaveTextDocumentNotification = exports2.WillSaveTextDocumentNotification || (exports2.WillSaveTextDocumentNotification = {}));
5049   var WillSaveTextDocumentWaitUntilRequest;
5050   (function(WillSaveTextDocumentWaitUntilRequest2) {
5051     WillSaveTextDocumentWaitUntilRequest2.method = "textDocument/willSaveWaitUntil";
5052     WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest2.method);
5053   })(WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentWaitUntilRequest || (exports2.WillSaveTextDocumentWaitUntilRequest = {}));
5054   var DidChangeWatchedFilesNotification;
5055   (function(DidChangeWatchedFilesNotification2) {
5056     DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWatchedFiles");
5057   })(DidChangeWatchedFilesNotification = exports2.DidChangeWatchedFilesNotification || (exports2.DidChangeWatchedFilesNotification = {}));
5058   var FileChangeType;
5059   (function(FileChangeType2) {
5060     FileChangeType2.Created = 1;
5061     FileChangeType2.Changed = 2;
5062     FileChangeType2.Deleted = 3;
5063   })(FileChangeType = exports2.FileChangeType || (exports2.FileChangeType = {}));
5064   var WatchKind;
5065   (function(WatchKind2) {
5066     WatchKind2.Create = 1;
5067     WatchKind2.Change = 2;
5068     WatchKind2.Delete = 4;
5069   })(WatchKind = exports2.WatchKind || (exports2.WatchKind = {}));
5070   var PublishDiagnosticsNotification;
5071   (function(PublishDiagnosticsNotification2) {
5072     PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType("textDocument/publishDiagnostics");
5073   })(PublishDiagnosticsNotification = exports2.PublishDiagnosticsNotification || (exports2.PublishDiagnosticsNotification = {}));
5074   var CompletionTriggerKind;
5075   (function(CompletionTriggerKind2) {
5076     CompletionTriggerKind2.Invoked = 1;
5077     CompletionTriggerKind2.TriggerCharacter = 2;
5078     CompletionTriggerKind2.TriggerForIncompleteCompletions = 3;
5079   })(CompletionTriggerKind = exports2.CompletionTriggerKind || (exports2.CompletionTriggerKind = {}));
5080   var CompletionRequest;
5081   (function(CompletionRequest2) {
5082     CompletionRequest2.method = "textDocument/completion";
5083     CompletionRequest2.type = new messages_1.ProtocolRequestType(CompletionRequest2.method);
5084   })(CompletionRequest = exports2.CompletionRequest || (exports2.CompletionRequest = {}));
5085   var CompletionResolveRequest;
5086   (function(CompletionResolveRequest2) {
5087     CompletionResolveRequest2.method = "completionItem/resolve";
5088     CompletionResolveRequest2.type = new messages_1.ProtocolRequestType(CompletionResolveRequest2.method);
5089   })(CompletionResolveRequest = exports2.CompletionResolveRequest || (exports2.CompletionResolveRequest = {}));
5090   var HoverRequest;
5091   (function(HoverRequest2) {
5092     HoverRequest2.method = "textDocument/hover";
5093     HoverRequest2.type = new messages_1.ProtocolRequestType(HoverRequest2.method);
5094   })(HoverRequest = exports2.HoverRequest || (exports2.HoverRequest = {}));
5095   var SignatureHelpTriggerKind;
5096   (function(SignatureHelpTriggerKind2) {
5097     SignatureHelpTriggerKind2.Invoked = 1;
5098     SignatureHelpTriggerKind2.TriggerCharacter = 2;
5099     SignatureHelpTriggerKind2.ContentChange = 3;
5100   })(SignatureHelpTriggerKind = exports2.SignatureHelpTriggerKind || (exports2.SignatureHelpTriggerKind = {}));
5101   var SignatureHelpRequest;
5102   (function(SignatureHelpRequest2) {
5103     SignatureHelpRequest2.method = "textDocument/signatureHelp";
5104     SignatureHelpRequest2.type = new messages_1.ProtocolRequestType(SignatureHelpRequest2.method);
5105   })(SignatureHelpRequest = exports2.SignatureHelpRequest || (exports2.SignatureHelpRequest = {}));
5106   var DefinitionRequest;
5107   (function(DefinitionRequest2) {
5108     DefinitionRequest2.method = "textDocument/definition";
5109     DefinitionRequest2.type = new messages_1.ProtocolRequestType(DefinitionRequest2.method);
5110   })(DefinitionRequest = exports2.DefinitionRequest || (exports2.DefinitionRequest = {}));
5111   var ReferencesRequest;
5112   (function(ReferencesRequest2) {
5113     ReferencesRequest2.method = "textDocument/references";
5114     ReferencesRequest2.type = new messages_1.ProtocolRequestType(ReferencesRequest2.method);
5115   })(ReferencesRequest = exports2.ReferencesRequest || (exports2.ReferencesRequest = {}));
5116   var DocumentHighlightRequest;
5117   (function(DocumentHighlightRequest2) {
5118     DocumentHighlightRequest2.method = "textDocument/documentHighlight";
5119     DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest2.method);
5120   })(DocumentHighlightRequest = exports2.DocumentHighlightRequest || (exports2.DocumentHighlightRequest = {}));
5121   var DocumentSymbolRequest;
5122   (function(DocumentSymbolRequest2) {
5123     DocumentSymbolRequest2.method = "textDocument/documentSymbol";
5124     DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest2.method);
5125   })(DocumentSymbolRequest = exports2.DocumentSymbolRequest || (exports2.DocumentSymbolRequest = {}));
5126   var CodeActionRequest;
5127   (function(CodeActionRequest2) {
5128     CodeActionRequest2.method = "textDocument/codeAction";
5129     CodeActionRequest2.type = new messages_1.ProtocolRequestType(CodeActionRequest2.method);
5130   })(CodeActionRequest = exports2.CodeActionRequest || (exports2.CodeActionRequest = {}));
5131   var CodeActionResolveRequest;
5132   (function(CodeActionResolveRequest2) {
5133     CodeActionResolveRequest2.method = "codeAction/resolve";
5134     CodeActionResolveRequest2.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest2.method);
5135   })(CodeActionResolveRequest = exports2.CodeActionResolveRequest || (exports2.CodeActionResolveRequest = {}));
5136   var WorkspaceSymbolRequest;
5137   (function(WorkspaceSymbolRequest2) {
5138     WorkspaceSymbolRequest2.method = "workspace/symbol";
5139     WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest2.method);
5140   })(WorkspaceSymbolRequest = exports2.WorkspaceSymbolRequest || (exports2.WorkspaceSymbolRequest = {}));
5141   var CodeLensRequest;
5142   (function(CodeLensRequest2) {
5143     CodeLensRequest2.method = "textDocument/codeLens";
5144     CodeLensRequest2.type = new messages_1.ProtocolRequestType(CodeLensRequest2.method);
5145   })(CodeLensRequest = exports2.CodeLensRequest || (exports2.CodeLensRequest = {}));
5146   var CodeLensResolveRequest;
5147   (function(CodeLensResolveRequest2) {
5148     CodeLensResolveRequest2.method = "codeLens/resolve";
5149     CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest2.method);
5150   })(CodeLensResolveRequest = exports2.CodeLensResolveRequest || (exports2.CodeLensResolveRequest = {}));
5151   var CodeLensRefreshRequest;
5152   (function(CodeLensRefreshRequest2) {
5153     CodeLensRefreshRequest2.method = `workspace/codeLens/refresh`;
5154     CodeLensRefreshRequest2.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest2.method);
5155   })(CodeLensRefreshRequest = exports2.CodeLensRefreshRequest || (exports2.CodeLensRefreshRequest = {}));
5156   var DocumentLinkRequest;
5157   (function(DocumentLinkRequest2) {
5158     DocumentLinkRequest2.method = "textDocument/documentLink";
5159     DocumentLinkRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkRequest2.method);
5160   })(DocumentLinkRequest = exports2.DocumentLinkRequest || (exports2.DocumentLinkRequest = {}));
5161   var DocumentLinkResolveRequest;
5162   (function(DocumentLinkResolveRequest2) {
5163     DocumentLinkResolveRequest2.method = "documentLink/resolve";
5164     DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest2.method);
5165   })(DocumentLinkResolveRequest = exports2.DocumentLinkResolveRequest || (exports2.DocumentLinkResolveRequest = {}));
5166   var DocumentFormattingRequest;
5167   (function(DocumentFormattingRequest2) {
5168     DocumentFormattingRequest2.method = "textDocument/formatting";
5169     DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest2.method);
5170   })(DocumentFormattingRequest = exports2.DocumentFormattingRequest || (exports2.DocumentFormattingRequest = {}));
5171   var DocumentRangeFormattingRequest;
5172   (function(DocumentRangeFormattingRequest2) {
5173     DocumentRangeFormattingRequest2.method = "textDocument/rangeFormatting";
5174     DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest2.method);
5175   })(DocumentRangeFormattingRequest = exports2.DocumentRangeFormattingRequest || (exports2.DocumentRangeFormattingRequest = {}));
5176   var DocumentOnTypeFormattingRequest;
5177   (function(DocumentOnTypeFormattingRequest2) {
5178     DocumentOnTypeFormattingRequest2.method = "textDocument/onTypeFormatting";
5179     DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest2.method);
5180   })(DocumentOnTypeFormattingRequest = exports2.DocumentOnTypeFormattingRequest || (exports2.DocumentOnTypeFormattingRequest = {}));
5181   var PrepareSupportDefaultBehavior;
5182   (function(PrepareSupportDefaultBehavior2) {
5183     PrepareSupportDefaultBehavior2.Identifier = 1;
5184   })(PrepareSupportDefaultBehavior = exports2.PrepareSupportDefaultBehavior || (exports2.PrepareSupportDefaultBehavior = {}));
5185   var RenameRequest;
5186   (function(RenameRequest2) {
5187     RenameRequest2.method = "textDocument/rename";
5188     RenameRequest2.type = new messages_1.ProtocolRequestType(RenameRequest2.method);
5189   })(RenameRequest = exports2.RenameRequest || (exports2.RenameRequest = {}));
5190   var PrepareRenameRequest;
5191   (function(PrepareRenameRequest2) {
5192     PrepareRenameRequest2.method = "textDocument/prepareRename";
5193     PrepareRenameRequest2.type = new messages_1.ProtocolRequestType(PrepareRenameRequest2.method);
5194   })(PrepareRenameRequest = exports2.PrepareRenameRequest || (exports2.PrepareRenameRequest = {}));
5195   var ExecuteCommandRequest;
5196   (function(ExecuteCommandRequest2) {
5197     ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType("workspace/executeCommand");
5198   })(ExecuteCommandRequest = exports2.ExecuteCommandRequest || (exports2.ExecuteCommandRequest = {}));
5199   var ApplyWorkspaceEditRequest;
5200   (function(ApplyWorkspaceEditRequest2) {
5201     ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
5202   })(ApplyWorkspaceEditRequest = exports2.ApplyWorkspaceEditRequest || (exports2.ApplyWorkspaceEditRequest = {}));
5203 });
5204
5205 // node_modules/vscode-languageserver-protocol/lib/common/connection.js
5206 var require_connection2 = __commonJS((exports2) => {
5207   "use strict";
5208   Object.defineProperty(exports2, "__esModule", {value: true});
5209   exports2.createProtocolConnection = void 0;
5210   var vscode_jsonrpc_1 = require_main();
5211   function createProtocolConnection(input, output, logger, options) {
5212     if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) {
5213       options = {connectionStrategy: options};
5214     }
5215     return vscode_jsonrpc_1.createMessageConnection(input, output, logger, options);
5216   }
5217   exports2.createProtocolConnection = createProtocolConnection;
5218 });
5219
5220 // node_modules/vscode-languageserver-protocol/lib/common/api.js
5221 var require_api2 = __commonJS((exports2) => {
5222   "use strict";
5223   var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
5224     if (k2 === void 0)
5225       k2 = k;
5226     Object.defineProperty(o, k2, {enumerable: true, get: function() {
5227       return m[k];
5228     }});
5229   } : function(o, m, k, k2) {
5230     if (k2 === void 0)
5231       k2 = k;
5232     o[k2] = m[k];
5233   });
5234   var __exportStar2 = exports2 && exports2.__exportStar || function(m, exports3) {
5235     for (var p in m)
5236       if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
5237         __createBinding(exports3, m, p);
5238   };
5239   Object.defineProperty(exports2, "__esModule", {value: true});
5240   exports2.LSPErrorCodes = exports2.createProtocolConnection = void 0;
5241   __exportStar2(require_main(), exports2);
5242   __exportStar2(require_main2(), exports2);
5243   __exportStar2(require_messages2(), exports2);
5244   __exportStar2(require_protocol(), exports2);
5245   var connection_1 = require_connection2();
5246   Object.defineProperty(exports2, "createProtocolConnection", {enumerable: true, get: function() {
5247     return connection_1.createProtocolConnection;
5248   }});
5249   var LSPErrorCodes;
5250   (function(LSPErrorCodes2) {
5251     LSPErrorCodes2.lspReservedErrorRangeStart = -32899;
5252     LSPErrorCodes2.ContentModified = -32801;
5253     LSPErrorCodes2.RequestCancelled = -32800;
5254     LSPErrorCodes2.lspReservedErrorRangeEnd = -32800;
5255   })(LSPErrorCodes = exports2.LSPErrorCodes || (exports2.LSPErrorCodes = {}));
5256 });
5257
5258 // node_modules/vscode-languageserver-protocol/lib/node/main.js
5259 var require_main3 = __commonJS((exports2) => {
5260   "use strict";
5261   var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
5262     if (k2 === void 0)
5263       k2 = k;
5264     Object.defineProperty(o, k2, {enumerable: true, get: function() {
5265       return m[k];
5266     }});
5267   } : function(o, m, k, k2) {
5268     if (k2 === void 0)
5269       k2 = k;
5270     o[k2] = m[k];
5271   });
5272   var __exportStar2 = exports2 && exports2.__exportStar || function(m, exports3) {
5273     for (var p in m)
5274       if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
5275         __createBinding(exports3, m, p);
5276   };
5277   Object.defineProperty(exports2, "__esModule", {value: true});
5278   exports2.createProtocolConnection = void 0;
5279   var node_1 = require_node();
5280   __exportStar2(require_node(), exports2);
5281   __exportStar2(require_api2(), exports2);
5282   function createProtocolConnection(input, output, logger, options) {
5283     return node_1.createMessageConnection(input, output, logger, options);
5284   }
5285   exports2.createProtocolConnection = createProtocolConnection;
5286 });
5287
5288 // node_modules/semver/internal/constants.js
5289 var require_constants = __commonJS((exports2, module2) => {
5290   var SEMVER_SPEC_VERSION = "2.0.0";
5291   var MAX_LENGTH = 256;
5292   var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
5293   var MAX_SAFE_COMPONENT_LENGTH = 16;
5294   module2.exports = {
5295     SEMVER_SPEC_VERSION,
5296     MAX_LENGTH,
5297     MAX_SAFE_INTEGER,
5298     MAX_SAFE_COMPONENT_LENGTH
5299   };
5300 });
5301
5302 // node_modules/semver/internal/debug.js
5303 var require_debug = __commonJS((exports2, module2) => {
5304   var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {
5305   };
5306   module2.exports = debug;
5307 });
5308
5309 // node_modules/semver/internal/re.js
5310 var require_re = __commonJS((exports2, module2) => {
5311   var {MAX_SAFE_COMPONENT_LENGTH} = require_constants();
5312   var debug = require_debug();
5313   exports2 = module2.exports = {};
5314   var re = exports2.re = [];
5315   var src = exports2.src = [];
5316   var t = exports2.t = {};
5317   var R = 0;
5318   var createToken = (name, value, isGlobal) => {
5319     const index = R++;
5320     debug(index, value);
5321     t[name] = index;
5322     src[index] = value;
5323     re[index] = new RegExp(value, isGlobal ? "g" : void 0);
5324   };
5325   createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
5326   createToken("NUMERICIDENTIFIERLOOSE", "[0-9]+");
5327   createToken("NONNUMERICIDENTIFIER", "\\d*[a-zA-Z-][a-zA-Z0-9-]*");
5328   createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
5329   createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
5330   createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NUMERICIDENTIFIER]}|${src[t.NONNUMERICIDENTIFIER]})`);
5331   createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NUMERICIDENTIFIERLOOSE]}|${src[t.NONNUMERICIDENTIFIER]})`);
5332   createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
5333   createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
5334   createToken("BUILDIDENTIFIER", "[0-9A-Za-z-]+");
5335   createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
5336   createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
5337   createToken("FULL", `^${src[t.FULLPLAIN]}$`);
5338   createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
5339   createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
5340   createToken("GTLT", "((?:<|>)?=?)");
5341   createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
5342   createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
5343   createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
5344   createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
5345   createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
5346   createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
5347   createToken("COERCE", `${"(^|[^\\d])(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:$|[^\\d])`);
5348   createToken("COERCERTL", src[t.COERCE], true);
5349   createToken("LONETILDE", "(?:~>?)");
5350   createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
5351   exports2.tildeTrimReplace = "$1~";
5352   createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
5353   createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
5354   createToken("LONECARET", "(?:\\^)");
5355   createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
5356   exports2.caretTrimReplace = "$1^";
5357   createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
5358   createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
5359   createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
5360   createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
5361   createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
5362   exports2.comparatorTrimReplace = "$1$2$3";
5363   createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
5364   createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
5365   createToken("STAR", "(<|>)?=?\\s*\\*");
5366   createToken("GTE0", "^\\s*>=\\s*0.0.0\\s*$");
5367   createToken("GTE0PRE", "^\\s*>=\\s*0.0.0-0\\s*$");
5368 });
5369
5370 // node_modules/semver/internal/identifiers.js
5371 var require_identifiers = __commonJS((exports2, module2) => {
5372   var numeric = /^[0-9]+$/;
5373   var compareIdentifiers = (a, b) => {
5374     const anum = numeric.test(a);
5375     const bnum = numeric.test(b);
5376     if (anum && bnum) {
5377       a = +a;
5378       b = +b;
5379     }
5380     return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
5381   };
5382   var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
5383   module2.exports = {
5384     compareIdentifiers,
5385     rcompareIdentifiers
5386   };
5387 });
5388
5389 // node_modules/semver/classes/semver.js
5390 var require_semver = __commonJS((exports2, module2) => {
5391   var debug = require_debug();
5392   var {MAX_LENGTH, MAX_SAFE_INTEGER} = require_constants();
5393   var {re, t} = require_re();
5394   var {compareIdentifiers} = require_identifiers();
5395   var SemVer = class {
5396     constructor(version, options) {
5397       if (!options || typeof options !== "object") {
5398         options = {
5399           loose: !!options,
5400           includePrerelease: false
5401         };
5402       }
5403       if (version instanceof SemVer) {
5404         if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {
5405           return version;
5406         } else {
5407           version = version.version;
5408         }
5409       } else if (typeof version !== "string") {
5410         throw new TypeError(`Invalid Version: ${version}`);
5411       }
5412       if (version.length > MAX_LENGTH) {
5413         throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);
5414       }
5415       debug("SemVer", version, options);
5416       this.options = options;
5417       this.loose = !!options.loose;
5418       this.includePrerelease = !!options.includePrerelease;
5419       const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
5420       if (!m) {
5421         throw new TypeError(`Invalid Version: ${version}`);
5422       }
5423       this.raw = version;
5424       this.major = +m[1];
5425       this.minor = +m[2];
5426       this.patch = +m[3];
5427       if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
5428         throw new TypeError("Invalid major version");
5429       }
5430       if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
5431         throw new TypeError("Invalid minor version");
5432       }
5433       if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
5434         throw new TypeError("Invalid patch version");
5435       }
5436       if (!m[4]) {
5437         this.prerelease = [];
5438       } else {
5439         this.prerelease = m[4].split(".").map((id) => {
5440           if (/^[0-9]+$/.test(id)) {
5441             const num = +id;
5442             if (num >= 0 && num < MAX_SAFE_INTEGER) {
5443               return num;
5444             }
5445           }
5446           return id;
5447         });
5448       }
5449       this.build = m[5] ? m[5].split(".") : [];
5450       this.format();
5451     }
5452     format() {
5453       this.version = `${this.major}.${this.minor}.${this.patch}`;
5454       if (this.prerelease.length) {
5455         this.version += `-${this.prerelease.join(".")}`;
5456       }
5457       return this.version;
5458     }
5459     toString() {
5460       return this.version;
5461     }
5462     compare(other) {
5463       debug("SemVer.compare", this.version, this.options, other);
5464       if (!(other instanceof SemVer)) {
5465         if (typeof other === "string" && other === this.version) {
5466           return 0;
5467         }
5468         other = new SemVer(other, this.options);
5469       }
5470       if (other.version === this.version) {
5471         return 0;
5472       }
5473       return this.compareMain(other) || this.comparePre(other);
5474     }
5475     compareMain(other) {
5476       if (!(other instanceof SemVer)) {
5477         other = new SemVer(other, this.options);
5478       }
5479       return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
5480     }
5481     comparePre(other) {
5482       if (!(other instanceof SemVer)) {
5483         other = new SemVer(other, this.options);
5484       }
5485       if (this.prerelease.length && !other.prerelease.length) {
5486         return -1;
5487       } else if (!this.prerelease.length && other.prerelease.length) {
5488         return 1;
5489       } else if (!this.prerelease.length && !other.prerelease.length) {
5490         return 0;
5491       }
5492       let i = 0;
5493       do {
5494         const a = this.prerelease[i];
5495         const b = other.prerelease[i];
5496         debug("prerelease compare", i, a, b);
5497         if (a === void 0 && b === void 0) {
5498           return 0;
5499         } else if (b === void 0) {
5500           return 1;
5501         } else if (a === void 0) {
5502           return -1;
5503         } else if (a === b) {
5504           continue;
5505         } else {
5506           return compareIdentifiers(a, b);
5507         }
5508       } while (++i);
5509     }
5510     compareBuild(other) {
5511       if (!(other instanceof SemVer)) {
5512         other = new SemVer(other, this.options);
5513       }
5514       let i = 0;
5515       do {
5516         const a = this.build[i];
5517         const b = other.build[i];
5518         debug("prerelease compare", i, a, b);
5519         if (a === void 0 && b === void 0) {
5520           return 0;
5521         } else if (b === void 0) {
5522           return 1;
5523         } else if (a === void 0) {
5524           return -1;
5525         } else if (a === b) {
5526           continue;
5527         } else {
5528           return compareIdentifiers(a, b);
5529         }
5530       } while (++i);
5531     }
5532     inc(release, identifier) {
5533       switch (release) {
5534         case "premajor":
5535           this.prerelease.length = 0;
5536           this.patch = 0;
5537           this.minor = 0;
5538           this.major++;
5539           this.inc("pre", identifier);
5540           break;
5541         case "preminor":
5542           this.prerelease.length = 0;
5543           this.patch = 0;
5544           this.minor++;
5545           this.inc("pre", identifier);
5546           break;
5547         case "prepatch":
5548           this.prerelease.length = 0;
5549           this.inc("patch", identifier);
5550           this.inc("pre", identifier);
5551           break;
5552         case "prerelease":
5553           if (this.prerelease.length === 0) {
5554             this.inc("patch", identifier);
5555           }
5556           this.inc("pre", identifier);
5557           break;
5558         case "major":
5559           if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
5560             this.major++;
5561           }
5562           this.minor = 0;
5563           this.patch = 0;
5564           this.prerelease = [];
5565           break;
5566         case "minor":
5567           if (this.patch !== 0 || this.prerelease.length === 0) {
5568             this.minor++;
5569           }
5570           this.patch = 0;
5571           this.prerelease = [];
5572           break;
5573         case "patch":
5574           if (this.prerelease.length === 0) {
5575             this.patch++;
5576           }
5577           this.prerelease = [];
5578           break;
5579         case "pre":
5580           if (this.prerelease.length === 0) {
5581             this.prerelease = [0];
5582           } else {
5583             let i = this.prerelease.length;
5584             while (--i >= 0) {
5585               if (typeof this.prerelease[i] === "number") {
5586                 this.prerelease[i]++;
5587                 i = -2;
5588               }
5589             }
5590             if (i === -1) {
5591               this.prerelease.push(0);
5592             }
5593           }
5594           if (identifier) {
5595             if (this.prerelease[0] === identifier) {
5596               if (isNaN(this.prerelease[1])) {
5597                 this.prerelease = [identifier, 0];
5598               }
5599             } else {
5600               this.prerelease = [identifier, 0];
5601             }
5602           }
5603           break;
5604         default:
5605           throw new Error(`invalid increment argument: ${release}`);
5606       }
5607       this.format();
5608       this.raw = this.version;
5609       return this;
5610     }
5611   };
5612   module2.exports = SemVer;
5613 });
5614
5615 // node_modules/semver/functions/parse.js
5616 var require_parse = __commonJS((exports2, module2) => {
5617   var {MAX_LENGTH} = require_constants();
5618   var {re, t} = require_re();
5619   var SemVer = require_semver();
5620   var parse = (version, options) => {
5621     if (!options || typeof options !== "object") {
5622       options = {
5623         loose: !!options,
5624         includePrerelease: false
5625       };
5626     }
5627     if (version instanceof SemVer) {
5628       return version;
5629     }
5630     if (typeof version !== "string") {
5631       return null;
5632     }
5633     if (version.length > MAX_LENGTH) {
5634       return null;
5635     }
5636     const r = options.loose ? re[t.LOOSE] : re[t.FULL];
5637     if (!r.test(version)) {
5638       return null;
5639     }
5640     try {
5641       return new SemVer(version, options);
5642     } catch (er) {
5643       return null;
5644     }
5645   };
5646   module2.exports = parse;
5647 });
5648
5649 // node_modules/semver/functions/valid.js
5650 var require_valid = __commonJS((exports2, module2) => {
5651   var parse = require_parse();
5652   var valid2 = (version, options) => {
5653     const v = parse(version, options);
5654     return v ? v.version : null;
5655   };
5656   module2.exports = valid2;
5657 });
5658
5659 // node_modules/semver/functions/clean.js
5660 var require_clean = __commonJS((exports2, module2) => {
5661   var parse = require_parse();
5662   var clean = (version, options) => {
5663     const s = parse(version.trim().replace(/^[=v]+/, ""), options);
5664     return s ? s.version : null;
5665   };
5666   module2.exports = clean;
5667 });
5668
5669 // node_modules/semver/functions/inc.js
5670 var require_inc = __commonJS((exports2, module2) => {
5671   var SemVer = require_semver();
5672   var inc = (version, release, options, identifier) => {
5673     if (typeof options === "string") {
5674       identifier = options;
5675       options = void 0;
5676     }
5677     try {
5678       return new SemVer(version, options).inc(release, identifier).version;
5679     } catch (er) {
5680       return null;
5681     }
5682   };
5683   module2.exports = inc;
5684 });
5685
5686 // node_modules/semver/functions/compare.js
5687 var require_compare = __commonJS((exports2, module2) => {
5688   var SemVer = require_semver();
5689   var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
5690   module2.exports = compare;
5691 });
5692
5693 // node_modules/semver/functions/eq.js
5694 var require_eq = __commonJS((exports2, module2) => {
5695   var compare = require_compare();
5696   var eq = (a, b, loose) => compare(a, b, loose) === 0;
5697   module2.exports = eq;
5698 });
5699
5700 // node_modules/semver/functions/diff.js
5701 var require_diff = __commonJS((exports2, module2) => {
5702   var parse = require_parse();
5703   var eq = require_eq();
5704   var diff = (version1, version2) => {
5705     if (eq(version1, version2)) {
5706       return null;
5707     } else {
5708       const v1 = parse(version1);
5709       const v2 = parse(version2);
5710       const hasPre = v1.prerelease.length || v2.prerelease.length;
5711       const prefix = hasPre ? "pre" : "";
5712       const defaultResult = hasPre ? "prerelease" : "";
5713       for (const key in v1) {
5714         if (key === "major" || key === "minor" || key === "patch") {
5715           if (v1[key] !== v2[key]) {
5716             return prefix + key;
5717           }
5718         }
5719       }
5720       return defaultResult;
5721     }
5722   };
5723   module2.exports = diff;
5724 });
5725
5726 // node_modules/semver/functions/major.js
5727 var require_major = __commonJS((exports2, module2) => {
5728   var SemVer = require_semver();
5729   var major = (a, loose) => new SemVer(a, loose).major;
5730   module2.exports = major;
5731 });
5732
5733 // node_modules/semver/functions/minor.js
5734 var require_minor = __commonJS((exports2, module2) => {
5735   var SemVer = require_semver();
5736   var minor = (a, loose) => new SemVer(a, loose).minor;
5737   module2.exports = minor;
5738 });
5739
5740 // node_modules/semver/functions/patch.js
5741 var require_patch = __commonJS((exports2, module2) => {
5742   var SemVer = require_semver();
5743   var patch = (a, loose) => new SemVer(a, loose).patch;
5744   module2.exports = patch;
5745 });
5746
5747 // node_modules/semver/functions/prerelease.js
5748 var require_prerelease = __commonJS((exports2, module2) => {
5749   var parse = require_parse();
5750   var prerelease = (version, options) => {
5751     const parsed = parse(version, options);
5752     return parsed && parsed.prerelease.length ? parsed.prerelease : null;
5753   };
5754   module2.exports = prerelease;
5755 });
5756
5757 // node_modules/semver/functions/rcompare.js
5758 var require_rcompare = __commonJS((exports2, module2) => {
5759   var compare = require_compare();
5760   var rcompare = (a, b, loose) => compare(b, a, loose);
5761   module2.exports = rcompare;
5762 });
5763
5764 // node_modules/semver/functions/compare-loose.js
5765 var require_compare_loose = __commonJS((exports2, module2) => {
5766   var compare = require_compare();
5767   var compareLoose = (a, b) => compare(a, b, true);
5768   module2.exports = compareLoose;
5769 });
5770
5771 // node_modules/semver/functions/compare-build.js
5772 var require_compare_build = __commonJS((exports2, module2) => {
5773   var SemVer = require_semver();
5774   var compareBuild = (a, b, loose) => {
5775     const versionA = new SemVer(a, loose);
5776     const versionB = new SemVer(b, loose);
5777     return versionA.compare(versionB) || versionA.compareBuild(versionB);
5778   };
5779   module2.exports = compareBuild;
5780 });
5781
5782 // node_modules/semver/functions/sort.js
5783 var require_sort = __commonJS((exports2, module2) => {
5784   var compareBuild = require_compare_build();
5785   var sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));
5786   module2.exports = sort;
5787 });
5788
5789 // node_modules/semver/functions/rsort.js
5790 var require_rsort = __commonJS((exports2, module2) => {
5791   var compareBuild = require_compare_build();
5792   var rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
5793   module2.exports = rsort;
5794 });
5795
5796 // node_modules/semver/functions/gt.js
5797 var require_gt = __commonJS((exports2, module2) => {
5798   var compare = require_compare();
5799   var gt = (a, b, loose) => compare(a, b, loose) > 0;
5800   module2.exports = gt;
5801 });
5802
5803 // node_modules/semver/functions/lt.js
5804 var require_lt = __commonJS((exports2, module2) => {
5805   var compare = require_compare();
5806   var lt = (a, b, loose) => compare(a, b, loose) < 0;
5807   module2.exports = lt;
5808 });
5809
5810 // node_modules/semver/functions/neq.js
5811 var require_neq = __commonJS((exports2, module2) => {
5812   var compare = require_compare();
5813   var neq = (a, b, loose) => compare(a, b, loose) !== 0;
5814   module2.exports = neq;
5815 });
5816
5817 // node_modules/semver/functions/gte.js
5818 var require_gte = __commonJS((exports2, module2) => {
5819   var compare = require_compare();
5820   var gte2 = (a, b, loose) => compare(a, b, loose) >= 0;
5821   module2.exports = gte2;
5822 });
5823
5824 // node_modules/semver/functions/lte.js
5825 var require_lte = __commonJS((exports2, module2) => {
5826   var compare = require_compare();
5827   var lte = (a, b, loose) => compare(a, b, loose) <= 0;
5828   module2.exports = lte;
5829 });
5830
5831 // node_modules/semver/functions/cmp.js
5832 var require_cmp = __commonJS((exports2, module2) => {
5833   var eq = require_eq();
5834   var neq = require_neq();
5835   var gt = require_gt();
5836   var gte2 = require_gte();
5837   var lt = require_lt();
5838   var lte = require_lte();
5839   var cmp = (a, op, b, loose) => {
5840     switch (op) {
5841       case "===":
5842         if (typeof a === "object")
5843           a = a.version;
5844         if (typeof b === "object")
5845           b = b.version;
5846         return a === b;
5847       case "!==":
5848         if (typeof a === "object")
5849           a = a.version;
5850         if (typeof b === "object")
5851           b = b.version;
5852         return a !== b;
5853       case "":
5854       case "=":
5855       case "==":
5856         return eq(a, b, loose);
5857       case "!=":
5858         return neq(a, b, loose);
5859       case ">":
5860         return gt(a, b, loose);
5861       case ">=":
5862         return gte2(a, b, loose);
5863       case "<":
5864         return lt(a, b, loose);
5865       case "<=":
5866         return lte(a, b, loose);
5867       default:
5868         throw new TypeError(`Invalid operator: ${op}`);
5869     }
5870   };
5871   module2.exports = cmp;
5872 });
5873
5874 // node_modules/semver/functions/coerce.js
5875 var require_coerce = __commonJS((exports2, module2) => {
5876   var SemVer = require_semver();
5877   var parse = require_parse();
5878   var {re, t} = require_re();
5879   var coerce = (version, options) => {
5880     if (version instanceof SemVer) {
5881       return version;
5882     }
5883     if (typeof version === "number") {
5884       version = String(version);
5885     }
5886     if (typeof version !== "string") {
5887       return null;
5888     }
5889     options = options || {};
5890     let match = null;
5891     if (!options.rtl) {
5892       match = version.match(re[t.COERCE]);
5893     } else {
5894       let next;
5895       while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) {
5896         if (!match || next.index + next[0].length !== match.index + match[0].length) {
5897           match = next;
5898         }
5899         re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
5900       }
5901       re[t.COERCERTL].lastIndex = -1;
5902     }
5903     if (match === null)
5904       return null;
5905     return parse(`${match[2]}.${match[3] || "0"}.${match[4] || "0"}`, options);
5906   };
5907   module2.exports = coerce;
5908 });
5909
5910 // node_modules/semver/classes/range.js
5911 var require_range = __commonJS((exports2, module2) => {
5912   var Range17 = class {
5913     constructor(range, options) {
5914       if (!options || typeof options !== "object") {
5915         options = {
5916           loose: !!options,
5917           includePrerelease: false
5918         };
5919       }
5920       if (range instanceof Range17) {
5921         if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
5922           return range;
5923         } else {
5924           return new Range17(range.raw, options);
5925         }
5926       }
5927       if (range instanceof Comparator) {
5928         this.raw = range.value;
5929         this.set = [[range]];
5930         this.format();
5931         return this;
5932       }
5933       this.options = options;
5934       this.loose = !!options.loose;
5935       this.includePrerelease = !!options.includePrerelease;
5936       this.raw = range;
5937       this.set = range.split(/\s*\|\|\s*/).map((range2) => this.parseRange(range2.trim())).filter((c) => c.length);
5938       if (!this.set.length) {
5939         throw new TypeError(`Invalid SemVer Range: ${range}`);
5940       }
5941       this.format();
5942     }
5943     format() {
5944       this.range = this.set.map((comps) => {
5945         return comps.join(" ").trim();
5946       }).join("||").trim();
5947       return this.range;
5948     }
5949     toString() {
5950       return this.range;
5951     }
5952     parseRange(range) {
5953       const loose = this.options.loose;
5954       range = range.trim();
5955       const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
5956       range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
5957       debug("hyphen replace", range);
5958       range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
5959       debug("comparator trim", range, re[t.COMPARATORTRIM]);
5960       range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
5961       range = range.replace(re[t.CARETTRIM], caretTrimReplace);
5962       range = range.split(/\s+/).join(" ");
5963       const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
5964       return range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options)).filter(this.options.loose ? (comp) => !!comp.match(compRe) : () => true).map((comp) => new Comparator(comp, this.options));
5965     }
5966     intersects(range, options) {
5967       if (!(range instanceof Range17)) {
5968         throw new TypeError("a Range is required");
5969       }
5970       return this.set.some((thisComparators) => {
5971         return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
5972           return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
5973             return rangeComparators.every((rangeComparator) => {
5974               return thisComparator.intersects(rangeComparator, options);
5975             });
5976           });
5977         });
5978       });
5979     }
5980     test(version) {
5981       if (!version) {
5982         return false;
5983       }
5984       if (typeof version === "string") {
5985         try {
5986           version = new SemVer(version, this.options);
5987         } catch (er) {
5988           return false;
5989         }
5990       }
5991       for (let i = 0; i < this.set.length; i++) {
5992         if (testSet(this.set[i], version, this.options)) {
5993           return true;
5994         }
5995       }
5996       return false;
5997     }
5998   };
5999   module2.exports = Range17;
6000   var Comparator = require_comparator();
6001   var debug = require_debug();
6002   var SemVer = require_semver();
6003   var {
6004     re,
6005     t,
6006     comparatorTrimReplace,
6007     tildeTrimReplace,
6008     caretTrimReplace
6009   } = require_re();
6010   var isSatisfiable = (comparators, options) => {
6011     let result = true;
6012     const remainingComparators = comparators.slice();
6013     let testComparator = remainingComparators.pop();
6014     while (result && remainingComparators.length) {
6015       result = remainingComparators.every((otherComparator) => {
6016         return testComparator.intersects(otherComparator, options);
6017       });
6018       testComparator = remainingComparators.pop();
6019     }
6020     return result;
6021   };
6022   var parseComparator = (comp, options) => {
6023     debug("comp", comp, options);
6024     comp = replaceCarets(comp, options);
6025     debug("caret", comp);
6026     comp = replaceTildes(comp, options);
6027     debug("tildes", comp);
6028     comp = replaceXRanges(comp, options);
6029     debug("xrange", comp);
6030     comp = replaceStars(comp, options);
6031     debug("stars", comp);
6032     return comp;
6033   };
6034   var isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
6035   var replaceTildes = (comp, options) => comp.trim().split(/\s+/).map((comp2) => {
6036     return replaceTilde(comp2, options);
6037   }).join(" ");
6038   var replaceTilde = (comp, options) => {
6039     const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
6040     return comp.replace(r, (_, M, m, p, pr) => {
6041       debug("tilde", comp, _, M, m, p, pr);
6042       let ret;
6043       if (isX(M)) {
6044         ret = "";
6045       } else if (isX(m)) {
6046         ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
6047       } else if (isX(p)) {
6048         ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
6049       } else if (pr) {
6050         debug("replaceTilde pr", pr);
6051         ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
6052       } else {
6053         ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
6054       }
6055       debug("tilde return", ret);
6056       return ret;
6057     });
6058   };
6059   var replaceCarets = (comp, options) => comp.trim().split(/\s+/).map((comp2) => {
6060     return replaceCaret(comp2, options);
6061   }).join(" ");
6062   var replaceCaret = (comp, options) => {
6063     debug("caret", comp, options);
6064     const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
6065     const z = options.includePrerelease ? "-0" : "";
6066     return comp.replace(r, (_, M, m, p, pr) => {
6067       debug("caret", comp, _, M, m, p, pr);
6068       let ret;
6069       if (isX(M)) {
6070         ret = "";
6071       } else if (isX(m)) {
6072         ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
6073       } else if (isX(p)) {
6074         if (M === "0") {
6075           ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
6076         } else {
6077           ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
6078         }
6079       } else if (pr) {
6080         debug("replaceCaret pr", pr);
6081         if (M === "0") {
6082           if (m === "0") {
6083             ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
6084           } else {
6085             ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
6086           }
6087         } else {
6088           ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
6089         }
6090       } else {
6091         debug("no pr");
6092         if (M === "0") {
6093           if (m === "0") {
6094             ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
6095           } else {
6096             ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
6097           }
6098         } else {
6099           ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
6100         }
6101       }
6102       debug("caret return", ret);
6103       return ret;
6104     });
6105   };
6106   var replaceXRanges = (comp, options) => {
6107     debug("replaceXRanges", comp, options);
6108     return comp.split(/\s+/).map((comp2) => {
6109       return replaceXRange(comp2, options);
6110     }).join(" ");
6111   };
6112   var replaceXRange = (comp, options) => {
6113     comp = comp.trim();
6114     const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
6115     return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
6116       debug("xRange", comp, ret, gtlt, M, m, p, pr);
6117       const xM = isX(M);
6118       const xm = xM || isX(m);
6119       const xp = xm || isX(p);
6120       const anyX = xp;
6121       if (gtlt === "=" && anyX) {
6122         gtlt = "";
6123       }
6124       pr = options.includePrerelease ? "-0" : "";
6125       if (xM) {
6126         if (gtlt === ">" || gtlt === "<") {
6127           ret = "<0.0.0-0";
6128         } else {
6129           ret = "*";
6130         }
6131       } else if (gtlt && anyX) {
6132         if (xm) {
6133           m = 0;
6134         }
6135         p = 0;
6136         if (gtlt === ">") {
6137           gtlt = ">=";
6138           if (xm) {
6139             M = +M + 1;
6140             m = 0;
6141             p = 0;
6142           } else {
6143             m = +m + 1;
6144             p = 0;
6145           }
6146         } else if (gtlt === "<=") {
6147           gtlt = "<";
6148           if (xm) {
6149             M = +M + 1;
6150           } else {
6151             m = +m + 1;
6152           }
6153         }
6154         if (gtlt === "<")
6155           pr = "-0";
6156         ret = `${gtlt + M}.${m}.${p}${pr}`;
6157       } else if (xm) {
6158         ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
6159       } else if (xp) {
6160         ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
6161       }
6162       debug("xRange return", ret);
6163       return ret;
6164     });
6165   };
6166   var replaceStars = (comp, options) => {
6167     debug("replaceStars", comp, options);
6168     return comp.trim().replace(re[t.STAR], "");
6169   };
6170   var replaceGTE0 = (comp, options) => {
6171     debug("replaceGTE0", comp, options);
6172     return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
6173   };
6174   var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) => {
6175     if (isX(fM)) {
6176       from = "";
6177     } else if (isX(fm)) {
6178       from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
6179     } else if (isX(fp)) {
6180       from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
6181     } else if (fpr) {
6182       from = `>=${from}`;
6183     } else {
6184       from = `>=${from}${incPr ? "-0" : ""}`;
6185     }
6186     if (isX(tM)) {
6187       to = "";
6188     } else if (isX(tm)) {
6189       to = `<${+tM + 1}.0.0-0`;
6190     } else if (isX(tp)) {
6191       to = `<${tM}.${+tm + 1}.0-0`;
6192     } else if (tpr) {
6193       to = `<=${tM}.${tm}.${tp}-${tpr}`;
6194     } else if (incPr) {
6195       to = `<${tM}.${tm}.${+tp + 1}-0`;
6196     } else {
6197       to = `<=${to}`;
6198     }
6199     return `${from} ${to}`.trim();
6200   };
6201   var testSet = (set, version, options) => {
6202     for (let i = 0; i < set.length; i++) {
6203       if (!set[i].test(version)) {
6204         return false;
6205       }
6206     }
6207     if (version.prerelease.length && !options.includePrerelease) {
6208       for (let i = 0; i < set.length; i++) {
6209         debug(set[i].semver);
6210         if (set[i].semver === Comparator.ANY) {
6211           continue;
6212         }
6213         if (set[i].semver.prerelease.length > 0) {
6214           const allowed = set[i].semver;
6215           if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {
6216             return true;
6217           }
6218         }
6219       }
6220       return false;
6221     }
6222     return true;
6223   };
6224 });
6225
6226 // node_modules/semver/classes/comparator.js
6227 var require_comparator = __commonJS((exports2, module2) => {
6228   var ANY = Symbol("SemVer ANY");
6229   var Comparator = class {
6230     static get ANY() {
6231       return ANY;
6232     }
6233     constructor(comp, options) {
6234       if (!options || typeof options !== "object") {
6235         options = {
6236           loose: !!options,
6237           includePrerelease: false
6238         };
6239       }
6240       if (comp instanceof Comparator) {
6241         if (comp.loose === !!options.loose) {
6242           return comp;
6243         } else {
6244           comp = comp.value;
6245         }
6246       }
6247       debug("comparator", comp, options);
6248       this.options = options;
6249       this.loose = !!options.loose;
6250       this.parse(comp);
6251       if (this.semver === ANY) {
6252         this.value = "";
6253       } else {
6254         this.value = this.operator + this.semver.version;
6255       }
6256       debug("comp", this);
6257     }
6258     parse(comp) {
6259       const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
6260       const m = comp.match(r);
6261       if (!m) {
6262         throw new TypeError(`Invalid comparator: ${comp}`);
6263       }
6264       this.operator = m[1] !== void 0 ? m[1] : "";
6265       if (this.operator === "=") {
6266         this.operator = "";
6267       }
6268       if (!m[2]) {
6269         this.semver = ANY;
6270       } else {
6271         this.semver = new SemVer(m[2], this.options.loose);
6272       }
6273     }
6274     toString() {
6275       return this.value;
6276     }
6277     test(version) {
6278       debug("Comparator.test", version, this.options.loose);
6279       if (this.semver === ANY || version === ANY) {
6280         return true;
6281       }
6282       if (typeof version === "string") {
6283         try {
6284           version = new SemVer(version, this.options);
6285         } catch (er) {
6286           return false;
6287         }
6288       }
6289       return cmp(version, this.operator, this.semver, this.options);
6290     }
6291     intersects(comp, options) {
6292       if (!(comp instanceof Comparator)) {
6293         throw new TypeError("a Comparator is required");
6294       }
6295       if (!options || typeof options !== "object") {
6296         options = {
6297           loose: !!options,
6298           includePrerelease: false
6299         };
6300       }
6301       if (this.operator === "") {
6302         if (this.value === "") {
6303           return true;
6304         }
6305         return new Range17(comp.value, options).test(this.value);
6306       } else if (comp.operator === "") {
6307         if (comp.value === "") {
6308           return true;
6309         }
6310         return new Range17(this.value, options).test(comp.semver);
6311       }
6312       const sameDirectionIncreasing = (this.operator === ">=" || this.operator === ">") && (comp.operator === ">=" || comp.operator === ">");
6313       const sameDirectionDecreasing = (this.operator === "<=" || this.operator === "<") && (comp.operator === "<=" || comp.operator === "<");
6314       const sameSemVer = this.semver.version === comp.semver.version;
6315       const differentDirectionsInclusive = (this.operator === ">=" || this.operator === "<=") && (comp.operator === ">=" || comp.operator === "<=");
6316       const oppositeDirectionsLessThan = cmp(this.semver, "<", comp.semver, options) && (this.operator === ">=" || this.operator === ">") && (comp.operator === "<=" || comp.operator === "<");
6317       const oppositeDirectionsGreaterThan = cmp(this.semver, ">", comp.semver, options) && (this.operator === "<=" || this.operator === "<") && (comp.operator === ">=" || comp.operator === ">");
6318       return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
6319     }
6320   };
6321   module2.exports = Comparator;
6322   var {re, t} = require_re();
6323   var cmp = require_cmp();
6324   var debug = require_debug();
6325   var SemVer = require_semver();
6326   var Range17 = require_range();
6327 });
6328
6329 // node_modules/semver/functions/satisfies.js
6330 var require_satisfies = __commonJS((exports2, module2) => {
6331   var Range17 = require_range();
6332   var satisfies = (version, range, options) => {
6333     try {
6334       range = new Range17(range, options);
6335     } catch (er) {
6336       return false;
6337     }
6338     return range.test(version);
6339   };
6340   module2.exports = satisfies;
6341 });
6342
6343 // node_modules/semver/ranges/to-comparators.js
6344 var require_to_comparators = __commonJS((exports2, module2) => {
6345   var Range17 = require_range();
6346   var toComparators = (range, options) => new Range17(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" "));
6347   module2.exports = toComparators;
6348 });
6349
6350 // node_modules/semver/ranges/max-satisfying.js
6351 var require_max_satisfying = __commonJS((exports2, module2) => {
6352   var SemVer = require_semver();
6353   var Range17 = require_range();
6354   var maxSatisfying = (versions, range, options) => {
6355     let max = null;
6356     let maxSV = null;
6357     let rangeObj = null;
6358     try {
6359       rangeObj = new Range17(range, options);
6360     } catch (er) {
6361       return null;
6362     }
6363     versions.forEach((v) => {
6364       if (rangeObj.test(v)) {
6365         if (!max || maxSV.compare(v) === -1) {
6366           max = v;
6367           maxSV = new SemVer(max, options);
6368         }
6369       }
6370     });
6371     return max;
6372   };
6373   module2.exports = maxSatisfying;
6374 });
6375
6376 // node_modules/semver/ranges/min-satisfying.js
6377 var require_min_satisfying = __commonJS((exports2, module2) => {
6378   var SemVer = require_semver();
6379   var Range17 = require_range();
6380   var minSatisfying = (versions, range, options) => {
6381     let min = null;
6382     let minSV = null;
6383     let rangeObj = null;
6384     try {
6385       rangeObj = new Range17(range, options);
6386     } catch (er) {
6387       return null;
6388     }
6389     versions.forEach((v) => {
6390       if (rangeObj.test(v)) {
6391         if (!min || minSV.compare(v) === 1) {
6392           min = v;
6393           minSV = new SemVer(min, options);
6394         }
6395       }
6396     });
6397     return min;
6398   };
6399   module2.exports = minSatisfying;
6400 });
6401
6402 // node_modules/semver/ranges/min-version.js
6403 var require_min_version = __commonJS((exports2, module2) => {
6404   var SemVer = require_semver();
6405   var Range17 = require_range();
6406   var gt = require_gt();
6407   var minVersion = (range, loose) => {
6408     range = new Range17(range, loose);
6409     let minver = new SemVer("0.0.0");
6410     if (range.test(minver)) {
6411       return minver;
6412     }
6413     minver = new SemVer("0.0.0-0");
6414     if (range.test(minver)) {
6415       return minver;
6416     }
6417     minver = null;
6418     for (let i = 0; i < range.set.length; ++i) {
6419       const comparators = range.set[i];
6420       comparators.forEach((comparator) => {
6421         const compver = new SemVer(comparator.semver.version);
6422         switch (comparator.operator) {
6423           case ">":
6424             if (compver.prerelease.length === 0) {
6425               compver.patch++;
6426             } else {
6427               compver.prerelease.push(0);
6428             }
6429             compver.raw = compver.format();
6430           case "":
6431           case ">=":
6432             if (!minver || gt(minver, compver)) {
6433               minver = compver;
6434             }
6435             break;
6436           case "<":
6437           case "<=":
6438             break;
6439           default:
6440             throw new Error(`Unexpected operation: ${comparator.operator}`);
6441         }
6442       });
6443     }
6444     if (minver && range.test(minver)) {
6445       return minver;
6446     }
6447     return null;
6448   };
6449   module2.exports = minVersion;
6450 });
6451
6452 // node_modules/semver/ranges/valid.js
6453 var require_valid2 = __commonJS((exports2, module2) => {
6454   var Range17 = require_range();
6455   var validRange = (range, options) => {
6456     try {
6457       return new Range17(range, options).range || "*";
6458     } catch (er) {
6459       return null;
6460     }
6461   };
6462   module2.exports = validRange;
6463 });
6464
6465 // node_modules/semver/ranges/outside.js
6466 var require_outside = __commonJS((exports2, module2) => {
6467   var SemVer = require_semver();
6468   var Comparator = require_comparator();
6469   var {ANY} = Comparator;
6470   var Range17 = require_range();
6471   var satisfies = require_satisfies();
6472   var gt = require_gt();
6473   var lt = require_lt();
6474   var lte = require_lte();
6475   var gte2 = require_gte();
6476   var outside = (version, range, hilo, options) => {
6477     version = new SemVer(version, options);
6478     range = new Range17(range, options);
6479     let gtfn, ltefn, ltfn, comp, ecomp;
6480     switch (hilo) {
6481       case ">":
6482         gtfn = gt;
6483         ltefn = lte;
6484         ltfn = lt;
6485         comp = ">";
6486         ecomp = ">=";
6487         break;
6488       case "<":
6489         gtfn = lt;
6490         ltefn = gte2;
6491         ltfn = gt;
6492         comp = "<";
6493         ecomp = "<=";
6494         break;
6495       default:
6496         throw new TypeError('Must provide a hilo val of "<" or ">"');
6497     }
6498     if (satisfies(version, range, options)) {
6499       return false;
6500     }
6501     for (let i = 0; i < range.set.length; ++i) {
6502       const comparators = range.set[i];
6503       let high = null;
6504       let low = null;
6505       comparators.forEach((comparator) => {
6506         if (comparator.semver === ANY) {
6507           comparator = new Comparator(">=0.0.0");
6508         }
6509         high = high || comparator;
6510         low = low || comparator;
6511         if (gtfn(comparator.semver, high.semver, options)) {
6512           high = comparator;
6513         } else if (ltfn(comparator.semver, low.semver, options)) {
6514           low = comparator;
6515         }
6516       });
6517       if (high.operator === comp || high.operator === ecomp) {
6518         return false;
6519       }
6520       if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) {
6521         return false;
6522       } else if (low.operator === ecomp && ltfn(version, low.semver)) {
6523         return false;
6524       }
6525     }
6526     return true;
6527   };
6528   module2.exports = outside;
6529 });
6530
6531 // node_modules/semver/ranges/gtr.js
6532 var require_gtr = __commonJS((exports2, module2) => {
6533   var outside = require_outside();
6534   var gtr = (version, range, options) => outside(version, range, ">", options);
6535   module2.exports = gtr;
6536 });
6537
6538 // node_modules/semver/ranges/ltr.js
6539 var require_ltr = __commonJS((exports2, module2) => {
6540   var outside = require_outside();
6541   var ltr = (version, range, options) => outside(version, range, "<", options);
6542   module2.exports = ltr;
6543 });
6544
6545 // node_modules/semver/ranges/intersects.js
6546 var require_intersects = __commonJS((exports2, module2) => {
6547   var Range17 = require_range();
6548   var intersects = (r1, r2, options) => {
6549     r1 = new Range17(r1, options);
6550     r2 = new Range17(r2, options);
6551     return r1.intersects(r2);
6552   };
6553   module2.exports = intersects;
6554 });
6555
6556 // node_modules/semver/ranges/simplify.js
6557 var require_simplify = __commonJS((exports2, module2) => {
6558   var satisfies = require_satisfies();
6559   var compare = require_compare();
6560   module2.exports = (versions, range, options) => {
6561     const set = [];
6562     let min = null;
6563     let prev = null;
6564     const v = versions.sort((a, b) => compare(a, b, options));
6565     for (const version of v) {
6566       const included = satisfies(version, range, options);
6567       if (included) {
6568         prev = version;
6569         if (!min)
6570           min = version;
6571       } else {
6572         if (prev) {
6573           set.push([min, prev]);
6574         }
6575         prev = null;
6576         min = null;
6577       }
6578     }
6579     if (min)
6580       set.push([min, null]);
6581     const ranges = [];
6582     for (const [min2, max] of set) {
6583       if (min2 === max)
6584         ranges.push(min2);
6585       else if (!max && min2 === v[0])
6586         ranges.push("*");
6587       else if (!max)
6588         ranges.push(`>=${min2}`);
6589       else if (min2 === v[0])
6590         ranges.push(`<=${max}`);
6591       else
6592         ranges.push(`${min2} - ${max}`);
6593     }
6594     const simplified = ranges.join(" || ");
6595     const original = typeof range.raw === "string" ? range.raw : String(range);
6596     return simplified.length < original.length ? simplified : range;
6597   };
6598 });
6599
6600 // node_modules/semver/ranges/subset.js
6601 var require_subset = __commonJS((exports2, module2) => {
6602   var Range17 = require_range();
6603   var {ANY} = require_comparator();
6604   var satisfies = require_satisfies();
6605   var compare = require_compare();
6606   var subset = (sub, dom, options) => {
6607     sub = new Range17(sub, options);
6608     dom = new Range17(dom, options);
6609     let sawNonNull = false;
6610     OUTER:
6611       for (const simpleSub of sub.set) {
6612         for (const simpleDom of dom.set) {
6613           const isSub = simpleSubset(simpleSub, simpleDom, options);
6614           sawNonNull = sawNonNull || isSub !== null;
6615           if (isSub)
6616             continue OUTER;
6617         }
6618         if (sawNonNull)
6619           return false;
6620       }
6621     return true;
6622   };
6623   var simpleSubset = (sub, dom, options) => {
6624     if (sub.length === 1 && sub[0].semver === ANY)
6625       return dom.length === 1 && dom[0].semver === ANY;
6626     const eqSet = new Set();
6627     let gt, lt;
6628     for (const c of sub) {
6629       if (c.operator === ">" || c.operator === ">=")
6630         gt = higherGT(gt, c, options);
6631       else if (c.operator === "<" || c.operator === "<=")
6632         lt = lowerLT(lt, c, options);
6633       else
6634         eqSet.add(c.semver);
6635     }
6636     if (eqSet.size > 1)
6637       return null;
6638     let gtltComp;
6639     if (gt && lt) {
6640       gtltComp = compare(gt.semver, lt.semver, options);
6641       if (gtltComp > 0)
6642         return null;
6643       else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<="))
6644         return null;
6645     }
6646     for (const eq of eqSet) {
6647       if (gt && !satisfies(eq, String(gt), options))
6648         return null;
6649       if (lt && !satisfies(eq, String(lt), options))
6650         return null;
6651       for (const c of dom) {
6652         if (!satisfies(eq, String(c), options))
6653           return false;
6654       }
6655       return true;
6656     }
6657     let higher, lower;
6658     let hasDomLT, hasDomGT;
6659     for (const c of dom) {
6660       hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
6661       hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
6662       if (gt) {
6663         if (c.operator === ">" || c.operator === ">=") {
6664           higher = higherGT(gt, c, options);
6665           if (higher === c)
6666             return false;
6667         } else if (gt.operator === ">=" && !satisfies(gt.semver, String(c), options))
6668           return false;
6669       }
6670       if (lt) {
6671         if (c.operator === "<" || c.operator === "<=") {
6672           lower = lowerLT(lt, c, options);
6673           if (lower === c)
6674             return false;
6675         } else if (lt.operator === "<=" && !satisfies(lt.semver, String(c), options))
6676           return false;
6677       }
6678       if (!c.operator && (lt || gt) && gtltComp !== 0)
6679         return false;
6680     }
6681     if (gt && hasDomLT && !lt && gtltComp !== 0)
6682       return false;
6683     if (lt && hasDomGT && !gt && gtltComp !== 0)
6684       return false;
6685     return true;
6686   };
6687   var higherGT = (a, b, options) => {
6688     if (!a)
6689       return b;
6690     const comp = compare(a.semver, b.semver, options);
6691     return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a;
6692   };
6693   var lowerLT = (a, b, options) => {
6694     if (!a)
6695       return b;
6696     const comp = compare(a.semver, b.semver, options);
6697     return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a;
6698   };
6699   module2.exports = subset;
6700 });
6701
6702 // node_modules/semver/index.js
6703 var require_semver2 = __commonJS((exports2, module2) => {
6704   var internalRe = require_re();
6705   module2.exports = {
6706     re: internalRe.re,
6707     src: internalRe.src,
6708     tokens: internalRe.t,
6709     SEMVER_SPEC_VERSION: require_constants().SEMVER_SPEC_VERSION,
6710     SemVer: require_semver(),
6711     compareIdentifiers: require_identifiers().compareIdentifiers,
6712     rcompareIdentifiers: require_identifiers().rcompareIdentifiers,
6713     parse: require_parse(),
6714     valid: require_valid(),
6715     clean: require_clean(),
6716     inc: require_inc(),
6717     diff: require_diff(),
6718     major: require_major(),
6719     minor: require_minor(),
6720     patch: require_patch(),
6721     prerelease: require_prerelease(),
6722     compare: require_compare(),
6723     rcompare: require_rcompare(),
6724     compareLoose: require_compare_loose(),
6725     compareBuild: require_compare_build(),
6726     sort: require_sort(),
6727     rsort: require_rsort(),
6728     gt: require_gt(),
6729     lt: require_lt(),
6730     eq: require_eq(),
6731     neq: require_neq(),
6732     gte: require_gte(),
6733     lte: require_lte(),
6734     cmp: require_cmp(),
6735     coerce: require_coerce(),
6736     Comparator: require_comparator(),
6737     Range: require_range(),
6738     satisfies: require_satisfies(),
6739     toComparators: require_to_comparators(),
6740     maxSatisfying: require_max_satisfying(),
6741     minSatisfying: require_min_satisfying(),
6742     minVersion: require_min_version(),
6743     validRange: require_valid2(),
6744     outside: require_outside(),
6745     gtr: require_gtr(),
6746     ltr: require_ltr(),
6747     intersects: require_intersects(),
6748     simplifyRange: require_simplify(),
6749     subset: require_subset()
6750   };
6751 });
6752
6753 // node_modules/isexe/windows.js
6754 var require_windows = __commonJS((exports2, module2) => {
6755   module2.exports = isexe;
6756   isexe.sync = sync;
6757   var fs5 = require("fs");
6758   function checkPathExt(path9, options) {
6759     var pathext = options.pathExt !== void 0 ? options.pathExt : process.env.PATHEXT;
6760     if (!pathext) {
6761       return true;
6762     }
6763     pathext = pathext.split(";");
6764     if (pathext.indexOf("") !== -1) {
6765       return true;
6766     }
6767     for (var i = 0; i < pathext.length; i++) {
6768       var p = pathext[i].toLowerCase();
6769       if (p && path9.substr(-p.length).toLowerCase() === p) {
6770         return true;
6771       }
6772     }
6773     return false;
6774   }
6775   function checkStat(stat, path9, options) {
6776     if (!stat.isSymbolicLink() && !stat.isFile()) {
6777       return false;
6778     }
6779     return checkPathExt(path9, options);
6780   }
6781   function isexe(path9, options, cb) {
6782     fs5.stat(path9, function(er, stat) {
6783       cb(er, er ? false : checkStat(stat, path9, options));
6784     });
6785   }
6786   function sync(path9, options) {
6787     return checkStat(fs5.statSync(path9), path9, options);
6788   }
6789 });
6790
6791 // node_modules/isexe/mode.js
6792 var require_mode = __commonJS((exports2, module2) => {
6793   module2.exports = isexe;
6794   isexe.sync = sync;
6795   var fs5 = require("fs");
6796   function isexe(path9, options, cb) {
6797     fs5.stat(path9, function(er, stat) {
6798       cb(er, er ? false : checkStat(stat, options));
6799     });
6800   }
6801   function sync(path9, options) {
6802     return checkStat(fs5.statSync(path9), options);
6803   }
6804   function checkStat(stat, options) {
6805     return stat.isFile() && checkMode(stat, options);
6806   }
6807   function checkMode(stat, options) {
6808     var mod = stat.mode;
6809     var uid = stat.uid;
6810     var gid = stat.gid;
6811     var myUid = options.uid !== void 0 ? options.uid : process.getuid && process.getuid();
6812     var myGid = options.gid !== void 0 ? options.gid : process.getgid && process.getgid();
6813     var u = parseInt("100", 8);
6814     var g = parseInt("010", 8);
6815     var o = parseInt("001", 8);
6816     var ug = u | g;
6817     var ret = mod & o || mod & g && gid === myGid || mod & u && uid === myUid || mod & ug && myUid === 0;
6818     return ret;
6819   }
6820 });
6821
6822 // node_modules/isexe/index.js
6823 var require_isexe = __commonJS((exports2, module2) => {
6824   var fs5 = require("fs");
6825   var core;
6826   if (process.platform === "win32" || global.TESTING_WINDOWS) {
6827     core = require_windows();
6828   } else {
6829     core = require_mode();
6830   }
6831   module2.exports = isexe;
6832   isexe.sync = sync;
6833   function isexe(path9, options, cb) {
6834     if (typeof options === "function") {
6835       cb = options;
6836       options = {};
6837     }
6838     if (!cb) {
6839       if (typeof Promise !== "function") {
6840         throw new TypeError("callback not provided");
6841       }
6842       return new Promise(function(resolve, reject) {
6843         isexe(path9, options || {}, function(er, is2) {
6844           if (er) {
6845             reject(er);
6846           } else {
6847             resolve(is2);
6848           }
6849         });
6850       });
6851     }
6852     core(path9, options || {}, function(er, is2) {
6853       if (er) {
6854         if (er.code === "EACCES" || options && options.ignoreErrors) {
6855           er = null;
6856           is2 = false;
6857         }
6858       }
6859       cb(er, is2);
6860     });
6861   }
6862   function sync(path9, options) {
6863     try {
6864       return core.sync(path9, options || {});
6865     } catch (er) {
6866       if (options && options.ignoreErrors || er.code === "EACCES") {
6867         return false;
6868       } else {
6869         throw er;
6870       }
6871     }
6872   }
6873 });
6874
6875 // node_modules/which/which.js
6876 var require_which = __commonJS((exports2, module2) => {
6877   var isWindows = process.platform === "win32" || process.env.OSTYPE === "cygwin" || process.env.OSTYPE === "msys";
6878   var path9 = require("path");
6879   var COLON = isWindows ? ";" : ":";
6880   var isexe = require_isexe();
6881   var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), {code: "ENOENT"});
6882   var getPathInfo = (cmd, opt) => {
6883     const colon = opt.colon || COLON;
6884     const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? [""] : [
6885       ...isWindows ? [process.cwd()] : [],
6886       ...(opt.path || process.env.PATH || "").split(colon)
6887     ];
6888     const pathExtExe = isWindows ? opt.pathExt || process.env.PATHEXT || ".EXE;.CMD;.BAT;.COM" : "";
6889     const pathExt = isWindows ? pathExtExe.split(colon) : [""];
6890     if (isWindows) {
6891       if (cmd.indexOf(".") !== -1 && pathExt[0] !== "")
6892         pathExt.unshift("");
6893     }
6894     return {
6895       pathEnv,
6896       pathExt,
6897       pathExtExe
6898     };
6899   };
6900   var which2 = (cmd, opt, cb) => {
6901     if (typeof opt === "function") {
6902       cb = opt;
6903       opt = {};
6904     }
6905     if (!opt)
6906       opt = {};
6907     const {pathEnv, pathExt, pathExtExe} = getPathInfo(cmd, opt);
6908     const found = [];
6909     const step = (i) => new Promise((resolve, reject) => {
6910       if (i === pathEnv.length)
6911         return opt.all && found.length ? resolve(found) : reject(getNotFoundError(cmd));
6912       const ppRaw = pathEnv[i];
6913       const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw;
6914       const pCmd = path9.join(pathPart, cmd);
6915       const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
6916       resolve(subStep(p, i, 0));
6917     });
6918     const subStep = (p, i, ii) => new Promise((resolve, reject) => {
6919       if (ii === pathExt.length)
6920         return resolve(step(i + 1));
6921       const ext = pathExt[ii];
6922       isexe(p + ext, {pathExt: pathExtExe}, (er, is2) => {
6923         if (!er && is2) {
6924           if (opt.all)
6925             found.push(p + ext);
6926           else
6927             return resolve(p + ext);
6928         }
6929         return resolve(subStep(p, i, ii + 1));
6930       });
6931     });
6932     return cb ? step(0).then((res) => cb(null, res), cb) : step(0);
6933   };
6934   var whichSync = (cmd, opt) => {
6935     opt = opt || {};
6936     const {pathEnv, pathExt, pathExtExe} = getPathInfo(cmd, opt);
6937     const found = [];
6938     for (let i = 0; i < pathEnv.length; i++) {
6939       const ppRaw = pathEnv[i];
6940       const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw;
6941       const pCmd = path9.join(pathPart, cmd);
6942       const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd : pCmd;
6943       for (let j = 0; j < pathExt.length; j++) {
6944         const cur = p + pathExt[j];
6945         try {
6946           const is2 = isexe.sync(cur, {pathExt: pathExtExe});
6947           if (is2) {
6948             if (opt.all)
6949               found.push(cur);
6950             else
6951               return cur;
6952           }
6953         } catch (ex) {
6954         }
6955       }
6956     }
6957     if (opt.all && found.length)
6958       return found;
6959     if (opt.nothrow)
6960       return null;
6961     throw getNotFoundError(cmd);
6962   };
6963   module2.exports = which2;
6964   which2.sync = whichSync;
6965 });
6966
6967 // src/index.ts
6968 __export(exports, {
6969   activate: () => activate
6970 });
6971 var import_coc37 = __toModule(require("coc.nvim"));
6972
6973 // src/server/index.ts
6974 var import_coc35 = __toModule(require("coc.nvim"));
6975 var import_vscode_languageserver_protocol24 = __toModule(require_main3());
6976
6977 // src/server/typescriptServiceClientHost.ts
6978 var import_coc34 = __toModule(require("coc.nvim"));
6979 var import_vscode_languageserver_protocol23 = __toModule(require_main3());
6980
6981 // src/utils/arrays.ts
6982 function equals(one, other, itemEquals = (a, b) => a === b) {
6983   if (one.length !== other.length) {
6984     return false;
6985   }
6986   for (let i = 0, len = one.length; i < len; i++) {
6987     if (!itemEquals(one[i], other[i])) {
6988       return false;
6989     }
6990   }
6991   return true;
6992 }
6993 function flatten(arr) {
6994   return [].concat.apply([], arr);
6995 }
6996
6997 // src/server/features/fileConfigurationManager.ts
6998 var import_coc = __toModule(require("coc.nvim"));
6999 var import_vscode_languageserver_protocol = __toModule(require_main3());
7000
7001 // src/server/utils/api.ts
7002 var semver = __toModule(require_semver2());
7003 var API2 = class {
7004   constructor(versionString, version) {
7005     this.versionString = versionString;
7006     this.version = version;
7007   }
7008   static fromSimpleString(value) {
7009     return new API2(value, value);
7010   }
7011   static fromVersionString(versionString) {
7012     let version = semver.valid(versionString);
7013     if (!version) {
7014       return new API2("invalid version", "1.0.0");
7015     }
7016     const index = versionString.indexOf("-");
7017     if (index >= 0) {
7018       version = version.substr(0, index);
7019     }
7020     return new API2(versionString, version);
7021   }
7022   gte(other) {
7023     return semver.gte(this.version, other.version);
7024   }
7025   lt(other) {
7026     return !this.gte(other);
7027   }
7028 };
7029 var API = API2;
7030 API.defaultVersion = API2.fromSimpleString("1.0.0");
7031 API.v203 = API2.fromSimpleString("2.0.3");
7032 API.v206 = API2.fromSimpleString("2.0.6");
7033 API.v208 = API2.fromSimpleString("2.0.8");
7034 API.v213 = API2.fromSimpleString("2.1.3");
7035 API.v220 = API2.fromSimpleString("2.2.0");
7036 API.v222 = API2.fromSimpleString("2.2.2");
7037 API.v230 = API2.fromSimpleString("2.3.0");
7038 API.v234 = API2.fromSimpleString("2.3.4");
7039 API.v240 = API2.fromSimpleString("2.4.0");
7040 API.v250 = API2.fromSimpleString("2.5.0");
7041 API.v260 = API2.fromSimpleString("2.6.0");
7042 API.v270 = API2.fromSimpleString("2.7.0");
7043 API.v280 = API2.fromSimpleString("2.8.0");
7044 API.v290 = API2.fromSimpleString("2.9.0");
7045 API.v291 = API2.fromSimpleString("2.9.1");
7046 API.v292 = API2.fromSimpleString("2.9.2");
7047 API.v300 = API2.fromSimpleString("3.0.0");
7048 API.v310 = API2.fromSimpleString("3.1.0");
7049 API.v314 = API2.fromSimpleString("3.1.4");
7050 API.v320 = API2.fromSimpleString("3.2.0");
7051 API.v330 = API2.fromSimpleString("3.3.0");
7052 API.v333 = API2.fromSimpleString("3.3.3");
7053 API.v340 = API2.fromSimpleString("3.4.0");
7054 API.v345 = API2.fromSimpleString("3.4.5");
7055 API.v350 = API2.fromSimpleString("3.5.0");
7056 API.v380 = API2.fromSimpleString("3.8.0");
7057 API.v381 = API2.fromSimpleString("3.8.1");
7058 API.v390 = API2.fromSimpleString("3.9.0");
7059 API.v400 = API2.fromSimpleString("4.0.0");
7060 API.v401 = API2.fromSimpleString("4.0.1");
7061 API.v420 = API2.fromSimpleString("4.2.0");
7062 API.v430 = API2.fromSimpleString("4.3.0");
7063 var api_default = API;
7064
7065 // src/server/features/fileConfigurationManager.ts
7066 function objAreEqual(a, b) {
7067   let keys = Object.keys(a);
7068   for (let i = 0; i < keys.length; i++) {
7069     let key = keys[i];
7070     if (a[key] !== b[key]) {
7071       return false;
7072     }
7073   }
7074   return true;
7075 }
7076 var FileConfigurationManager = class {
7077   constructor(client) {
7078     this.client = client;
7079     this.cachedMap = new Map();
7080     this.disposables = [];
7081     import_coc.workspace.onDidCloseTextDocument((textDocument) => {
7082       this.cachedMap.delete(textDocument.uri);
7083     }, void 0, this.disposables);
7084   }
7085   async ensureConfigurationOptions(document, insertSpaces, tabSize, token) {
7086     const file2 = this.client.toPath(document.uri);
7087     let options = {
7088       tabSize,
7089       insertSpaces
7090     };
7091     let cachedOption = this.cachedMap.get(document.uri);
7092     const currentOptions = this.getFileOptions(options, document);
7093     if (cachedOption && objAreEqual(cachedOption.formatOptions, currentOptions.formatOptions) && objAreEqual(cachedOption.preferences, currentOptions.preferences))
7094       return;
7095     this.cachedMap.set(document.uri, currentOptions);
7096     const args = {
7097       file: file2,
7098       ...currentOptions
7099     };
7100     await this.client.execute("configure", args, import_vscode_languageserver_protocol.CancellationToken.None);
7101     try {
7102       const response = await this.client.execute("configure", args, token);
7103       if (response.type !== "response") {
7104         this.cachedMap.delete(document.uri);
7105       }
7106     } catch (_e) {
7107       this.cachedMap.delete(document.uri);
7108     }
7109   }
7110   async ensureConfigurationForDocument(document, token) {
7111     let opts = await import_coc.workspace.getFormatOptions(document.uri);
7112     return this.ensureConfigurationOptions(document, opts.insertSpaces, opts.tabSize, token);
7113   }
7114   reset() {
7115     this.cachedMap.clear();
7116   }
7117   getLanguageConfiguration(languageId) {
7118     return import_coc.workspace.getConfiguration(languageId);
7119   }
7120   isTypeScriptDocument(languageId) {
7121     return languageId.startsWith("typescript");
7122   }
7123   formatEnabled(document) {
7124     let {languageId, uri} = document;
7125     let language2 = languageId.startsWith("typescript") ? "typescript" : "javascript";
7126     const config = import_coc.workspace.getConfiguration(`${language2}.format`, uri);
7127     return config.get("enabled");
7128   }
7129   enableJavascript() {
7130     const config = import_coc.workspace.getConfiguration("tsserver");
7131     return !!config.get("enableJavascript");
7132   }
7133   getFileOptions(options, document) {
7134     const lang = this.isTypeScriptDocument(document.languageId) ? "typescript" : "javascript";
7135     return {
7136       formatOptions: this.getFormatOptions(options, lang, document.uri),
7137       preferences: this.getPreferences(lang, document.uri)
7138     };
7139   }
7140   getFormatOptions(options, language2, uri) {
7141     const config = import_coc.workspace.getConfiguration(`${language2}.format`, uri);
7142     return {
7143       tabSize: options.tabSize,
7144       indentSize: options.tabSize,
7145       convertTabsToSpaces: options.insertSpaces,
7146       newLineCharacter: "\n",
7147       insertSpaceAfterCommaDelimiter: config.get("insertSpaceAfterCommaDelimiter"),
7148       insertSpaceAfterConstructor: config.get("insertSpaceAfterConstructor"),
7149       insertSpaceAfterSemicolonInForStatements: config.get("insertSpaceAfterSemicolonInForStatements"),
7150       insertSpaceBeforeAndAfterBinaryOperators: config.get("insertSpaceBeforeAndAfterBinaryOperators"),
7151       insertSpaceAfterKeywordsInControlFlowStatements: config.get("insertSpaceAfterKeywordsInControlFlowStatements"),
7152       insertSpaceAfterFunctionKeywordForAnonymousFunctions: config.get("insertSpaceAfterFunctionKeywordForAnonymousFunctions"),
7153       insertSpaceBeforeFunctionParenthesis: config.get("insertSpaceBeforeFunctionParenthesis"),
7154       insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: config.get("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"),
7155       insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: config.get("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"),
7156       insertSpaceAfterOpeningAndBeforeClosingEmptyBraces: config.get("insertSpaceAfterOpeningAndBeforeClosingEmptyBraces"),
7157       insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: config.get("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"),
7158       insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: config.get("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"),
7159       insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: config.get("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"),
7160       insertSpaceAfterTypeAssertion: config.get("insertSpaceAfterTypeAssertion"),
7161       placeOpenBraceOnNewLineForFunctions: config.get("placeOpenBraceOnNewLineForFunctions"),
7162       placeOpenBraceOnNewLineForControlBlocks: config.get("placeOpenBraceOnNewLineForControlBlocks"),
7163       semicolons: config.get("semicolons", void 0)
7164     };
7165   }
7166   getCompleteOptions(languageId) {
7167     const lang = this.isTypeScriptDocument(languageId) ? "typescript" : "javascript";
7168     const config = import_coc.workspace.getConfiguration(`${lang}.suggest`);
7169     return {
7170       enabled: config.get("enabled", true),
7171       names: config.get("names", true),
7172       paths: config.get("paths", true),
7173       completeFunctionCalls: config.get("completeFunctionCalls", true),
7174       autoImports: config.get("autoImports", true),
7175       importStatementSuggestions: config.get("importStatements", true),
7176       includeCompletionsForImportStatements: config.get("includeCompletionsForImportStatements", true),
7177       includeCompletionsWithSnippetText: config.get("includeCompletionsWithSnippetText", true),
7178       includeAutomaticOptionalChainCompletions: config.get("includeAutomaticOptionalChainCompletions", true)
7179     };
7180   }
7181   getPreferences(language2, uri) {
7182     if (this.client.apiVersion.lt(api_default.v290)) {
7183       return {};
7184     }
7185     const config = import_coc.workspace.getConfiguration(`${language2}.preferences`, uri);
7186     const preferences = {
7187       quotePreference: this.getQuoteStyle(config),
7188       importModuleSpecifierPreference: getImportModuleSpecifier(config),
7189       importModuleSpecifierEnding: getImportModuleSpecifierEndingPreference(config),
7190       allowTextChangesInNewFiles: uri.startsWith("file:"),
7191       allowRenameOfImportPath: true,
7192       providePrefixAndSuffixTextForRename: config.get("renameShorthandProperties", true) === false ? false : config.get("useAliasesForRenames", true),
7193       includeCompletionsForImportStatements: this.getCompleteOptions(language2).includeCompletionsForImportStatements,
7194       includeCompletionsWithSnippetText: this.getCompleteOptions(language2).includeCompletionsWithSnippetText
7195     };
7196     return preferences;
7197   }
7198   getQuoteStyle(config) {
7199     let quoteStyle = config.get("quoteStyle", "auto");
7200     if (this.client.apiVersion.gte(api_default.v333) || quoteStyle != "auto")
7201       return quoteStyle;
7202     return "single";
7203   }
7204   dispose() {
7205     import_coc.disposeAll(this.disposables);
7206   }
7207 };
7208 var fileConfigurationManager_default = FileConfigurationManager;
7209 function getImportModuleSpecifier(config) {
7210   let val = config.get("importModuleSpecifier");
7211   switch (val) {
7212     case "project-relative":
7213       return "project-relative";
7214     case "relative":
7215       return "relative";
7216     case "non-relative":
7217       return "non-relative";
7218     default:
7219       return void 0;
7220   }
7221 }
7222 function getImportModuleSpecifierEndingPreference(config) {
7223   switch (config.get("importModuleSpecifierEnding")) {
7224     case "minimal":
7225       return "minimal";
7226     case "index":
7227       return "index";
7228     case "js":
7229       return "js";
7230     default:
7231       return "auto";
7232   }
7233 }
7234
7235 // src/server/features/watchBuild.ts
7236 var import_coc2 = __toModule(require("coc.nvim"));
7237 var import_path = __toModule(require("path"));
7238 var import_vscode_languageserver_protocol2 = __toModule(require_main3());
7239 var countRegex = /Found\s+(\d+)\s+error/;
7240 var errorRegex = /^(.+)\((\d+),(\d+)\):\s(\w+)\sTS(\d+):\s*(.+)$/;
7241 var TscStatus;
7242 (function(TscStatus2) {
7243   TscStatus2[TscStatus2["INIT"] = 0] = "INIT";
7244   TscStatus2[TscStatus2["COMPILING"] = 1] = "COMPILING";
7245   TscStatus2[TscStatus2["RUNNING"] = 2] = "RUNNING";
7246   TscStatus2[TscStatus2["ERROR"] = 3] = "ERROR";
7247 })(TscStatus || (TscStatus = {}));
7248 var WatchProject2 = class {
7249   constructor(client) {
7250     this.client = client;
7251     this.disposables = [];
7252     this.statusItem = import_coc2.window.createStatusBarItem(1, {progress: true});
7253     let task = this.task = import_coc2.workspace.createTask("TSC");
7254     this.disposables.push(import_coc2.commands.registerCommand(WatchProject2.id, async () => {
7255       let opts = this.options = await this.getOptions();
7256       await this.start(opts);
7257     }));
7258     task.onExit((code) => {
7259       if (code != 0) {
7260         import_coc2.window.showMessage(`TSC exit with code ${code}`, "warning");
7261       }
7262       this.onStop();
7263     });
7264     task.onStdout((lines) => {
7265       for (let line of lines) {
7266         this.onLine(line);
7267       }
7268     });
7269     task.onStderr((lines) => {
7270       import_coc2.window.showMessage(`TSC error: ` + lines.join("\n"), "error");
7271     });
7272     this.disposables.push(import_vscode_languageserver_protocol2.Disposable.create(() => {
7273       task.dispose();
7274     }));
7275     this.check().catch((_e) => {
7276     });
7277   }
7278   async check() {
7279     let running = await this.task.running;
7280     if (running) {
7281       this.options = await this.getOptions();
7282       this.statusItem.isProgress = false;
7283       this.statusItem.text = "?";
7284       this.statusItem.show();
7285     } else {
7286       this.onStop();
7287     }
7288   }
7289   async start(options) {
7290     await this.task.start(options);
7291   }
7292   onStop() {
7293     this.statusItem.hide();
7294   }
7295   onStart() {
7296     this.statusItem.text = "compiling";
7297     this.statusItem.isProgress = true;
7298     this.statusItem.show();
7299     import_coc2.workspace.nvim.call("setqflist", [[]], true);
7300   }
7301   onLine(line) {
7302     if (countRegex.test(line)) {
7303       let ms = line.match(countRegex);
7304       this.statusItem.text = ms[1] == "0" ? "\u2713" : "\u2717";
7305       this.statusItem.isProgress = false;
7306     } else if (WatchProject2.startTexts.findIndex((s) => line.indexOf(s) !== -1) != -1) {
7307       this.onStart();
7308     } else {
7309       let ms = line.match(errorRegex);
7310       if (!ms)
7311         return;
7312       let fullpath = import_path.default.join(this.options.cwd, ms[1]);
7313       let uri = import_coc2.Uri.file(fullpath).toString();
7314       let doc = import_coc2.workspace.getDocument(uri);
7315       let bufnr = doc ? doc.bufnr : null;
7316       let item = {
7317         filename: fullpath,
7318         lnum: Number(ms[2]),
7319         col: Number(ms[3]),
7320         text: `[tsc ${ms[5]}] ${ms[6]}`,
7321         type: /error/i.test(ms[4]) ? "E" : "W"
7322       };
7323       if (bufnr)
7324         item.bufnr = bufnr;
7325       import_coc2.workspace.nvim.call("setqflist", [[item], "a"]);
7326     }
7327   }
7328   async getOptions() {
7329     let {tscPath} = this.client;
7330     if (!tscPath) {
7331       import_coc2.window.showMessage(`Local & global tsc not found`, "error");
7332       return;
7333     }
7334     const tsconfigPath = import_coc2.workspace.getConfiguration("tsserver").get("tsconfigPath", "tsconfig.json");
7335     let find = await import_coc2.workspace.findUp([tsconfigPath]);
7336     if (!find) {
7337       import_coc2.window.showMessage(`${tsconfigPath} not found!`, "error");
7338       return;
7339     }
7340     let root = import_path.default.dirname(find);
7341     return {
7342       cmd: tscPath,
7343       args: ["-p", tsconfigPath, "--watch", "true", "--pretty", "false"],
7344       cwd: root
7345     };
7346   }
7347   dispose() {
7348     import_coc2.disposeAll(this.disposables);
7349   }
7350 };
7351 var WatchProject = WatchProject2;
7352 WatchProject.id = "tsserver.watchBuild";
7353 WatchProject.startTexts = ["Starting compilation in watch mode", "Starting incremental compilation"];
7354 var watchBuild_default = WatchProject;
7355
7356 // src/server/features/workspaceSymbols.ts
7357 var import_coc3 = __toModule(require("coc.nvim"));
7358 var import_vscode_languageserver_protocol3 = __toModule(require_main3());
7359
7360 // src/server/protocol.const.ts
7361 var Kind = class {
7362 };
7363 Kind.alias = "alias";
7364 Kind.callSignature = "call";
7365 Kind.class = "class";
7366 Kind.const = "const";
7367 Kind.constructorImplementation = "constructor";
7368 Kind.constructSignature = "construct";
7369 Kind.directory = "directory";
7370 Kind.enum = "enum";
7371 Kind.enumMember = "enum member";
7372 Kind.externalModuleName = "external module name";
7373 Kind.function = "function";
7374 Kind.indexSignature = "index";
7375 Kind.interface = "interface";
7376 Kind.keyword = "keyword";
7377 Kind.let = "let";
7378 Kind.localFunction = "local function";
7379 Kind.localVariable = "local var";
7380 Kind.method = "method";
7381 Kind.memberGetAccessor = "getter";
7382 Kind.memberSetAccessor = "setter";
7383 Kind.memberVariable = "property";
7384 Kind.module = "module";
7385 Kind.primitiveType = "primitive type";
7386 Kind.script = "script";
7387 Kind.type = "type";
7388 Kind.variable = "var";
7389 Kind.warning = "warning";
7390 Kind.string = "string";
7391 Kind.parameter = "parameter";
7392 Kind.typeParameter = "type parameter";
7393 var DiagnosticCategory = class {
7394 };
7395 DiagnosticCategory.error = "error";
7396 DiagnosticCategory.warning = "warning";
7397 DiagnosticCategory.suggestion = "suggestion";
7398 var KindModifiers2 = class {
7399 };
7400 var KindModifiers = KindModifiers2;
7401 KindModifiers.optional = "optional";
7402 KindModifiers.deprecated = "deprecated";
7403 KindModifiers.color = "color";
7404 KindModifiers.dtsFile = ".d.ts";
7405 KindModifiers.tsFile = ".ts";
7406 KindModifiers.tsxFile = ".tsx";
7407 KindModifiers.jsFile = ".js";
7408 KindModifiers.jsxFile = ".jsx";
7409 KindModifiers.jsonFile = ".json";
7410 KindModifiers.fileExtensionKindModifiers = [
7411   KindModifiers2.dtsFile,
7412   KindModifiers2.tsFile,
7413   KindModifiers2.tsxFile,
7414   KindModifiers2.jsFile,
7415   KindModifiers2.jsxFile,
7416   KindModifiers2.jsonFile
7417 ];
7418 var DisplayPartKind = class {
7419 };
7420 DisplayPartKind.functionName = "functionName";
7421 DisplayPartKind.methodName = "methodName";
7422 DisplayPartKind.parameterName = "parameterName";
7423 DisplayPartKind.propertyName = "propertyName";
7424 DisplayPartKind.punctuation = "punctuation";
7425 DisplayPartKind.text = "text";
7426 var EventName;
7427 (function(EventName2) {
7428   EventName2["syntaxDiag"] = "syntaxDiag";
7429   EventName2["semanticDiag"] = "semanticDiag";
7430   EventName2["suggestionDiag"] = "suggestionDiag";
7431   EventName2["configFileDiag"] = "configFileDiag";
7432   EventName2["telemetry"] = "telemetry";
7433   EventName2["projectLanguageServiceState"] = "projectLanguageServiceState";
7434   EventName2["projectsUpdatedInBackground"] = "projectsUpdatedInBackground";
7435   EventName2["beginInstallTypes"] = "beginInstallTypes";
7436   EventName2["endInstallTypes"] = "endInstallTypes";
7437   EventName2["typesInstallerInitializationFailed"] = "typesInstallerInitializationFailed";
7438   EventName2["surveyReady"] = "surveyReady";
7439   EventName2["projectLoadingStart"] = "projectLoadingStart";
7440   EventName2["projectLoadingFinish"] = "projectLoadingFinish";
7441 })(EventName || (EventName = {}));
7442
7443 // src/server/utils/typeConverters.ts
7444 var language = __toModule(require_main3());
7445 var Range2;
7446 (function(Range17) {
7447   Range17.fromTextSpan = (span) => {
7448     return {
7449       start: {
7450         line: span.start.line - 1,
7451         character: span.start.offset - 1
7452       },
7453       end: {
7454         line: span.end.line - 1,
7455         character: span.end.offset - 1
7456       }
7457     };
7458   };
7459   Range17.fromLocations = (start, end) => language.Range.create(Math.max(0, start.line - 1), Math.max(start.offset - 1, 0), Math.max(0, end.line - 1), Math.max(0, end.offset - 1));
7460   Range17.toFormattingRequestArgs = (file2, range) => ({
7461     file: file2,
7462     line: range.start.line + 1,
7463     offset: range.start.character + 1,
7464     endLine: range.end.line + 1,
7465     endOffset: range.end.character + 1
7466   });
7467   Range17.toFileRangeRequestArgs = (file2, range) => ({
7468     file: file2,
7469     startLine: range.start.line + 1,
7470     startOffset: range.start.character + 1,
7471     endLine: range.end.line + 1,
7472     endOffset: range.end.character + 1
7473   });
7474 })(Range2 || (Range2 = {}));
7475 var Position;
7476 (function(Position10) {
7477   Position10.fromLocation = (tslocation) => {
7478     return {
7479       line: tslocation.line - 1,
7480       character: tslocation.offset - 1
7481     };
7482   };
7483   Position10.toLocation = (position) => ({
7484     line: position.line + 1,
7485     offset: position.character + 1
7486   });
7487   Position10.toFileLocationRequestArgs = (file2, position) => ({
7488     file: file2,
7489     line: position.line + 1,
7490     offset: position.character + 1
7491   });
7492 })(Position || (Position = {}));
7493 var Location2;
7494 (function(Location4) {
7495   Location4.fromTextSpan = (uri, tsTextSpan) => {
7496     return {
7497       uri,
7498       range: Range2.fromTextSpan(tsTextSpan)
7499     };
7500   };
7501 })(Location2 || (Location2 = {}));
7502 var TextEdit;
7503 (function(TextEdit6) {
7504   TextEdit6.fromCodeEdit = (edit) => {
7505     return {
7506       range: Range2.fromTextSpan(edit),
7507       newText: edit.newText
7508     };
7509   };
7510 })(TextEdit || (TextEdit = {}));
7511 var WorkspaceEdit;
7512 (function(WorkspaceEdit6) {
7513   function fromFileCodeEdits(client, edits) {
7514     let changes = {};
7515     for (const edit of edits) {
7516       let uri = client.toResource(edit.fileName);
7517       changes[uri] = edit.textChanges.map((change) => {
7518         return TextEdit.fromCodeEdit(change);
7519       });
7520     }
7521     return {changes};
7522   }
7523   WorkspaceEdit6.fromFileCodeEdits = fromFileCodeEdits;
7524 })(WorkspaceEdit || (WorkspaceEdit = {}));
7525 var SymbolKind2;
7526 (function(SymbolKind5) {
7527   function fromProtocolScriptElementKind(kind) {
7528     switch (kind) {
7529       case Kind.module:
7530         return language.SymbolKind.Module;
7531       case Kind.class:
7532         return language.SymbolKind.Class;
7533       case Kind.enum:
7534         return language.SymbolKind.Enum;
7535       case Kind.enumMember:
7536         return language.SymbolKind.EnumMember;
7537       case Kind.interface:
7538         return language.SymbolKind.Interface;
7539       case Kind.indexSignature:
7540         return language.SymbolKind.Method;
7541       case Kind.callSignature:
7542         return language.SymbolKind.Method;
7543       case Kind.method:
7544         return language.SymbolKind.Method;
7545       case Kind.memberVariable:
7546         return language.SymbolKind.Property;
7547       case Kind.memberGetAccessor:
7548         return language.SymbolKind.Property;
7549       case Kind.memberSetAccessor:
7550         return language.SymbolKind.Property;
7551       case Kind.variable:
7552         return language.SymbolKind.Variable;
7553       case Kind.let:
7554         return language.SymbolKind.Variable;
7555       case Kind.const:
7556         return language.SymbolKind.Variable;
7557       case Kind.localVariable:
7558         return language.SymbolKind.Variable;
7559       case Kind.alias:
7560         return language.SymbolKind.Variable;
7561       case Kind.function:
7562         return language.SymbolKind.Function;
7563       case Kind.localFunction:
7564         return language.SymbolKind.Function;
7565       case Kind.constructSignature:
7566         return language.SymbolKind.Constructor;
7567       case Kind.constructorImplementation:
7568         return language.SymbolKind.Constructor;
7569       case Kind.typeParameter:
7570         return language.SymbolKind.TypeParameter;
7571       case Kind.string:
7572         return language.SymbolKind.String;
7573       default:
7574         return language.SymbolKind.Variable;
7575     }
7576   }
7577   SymbolKind5.fromProtocolScriptElementKind = fromProtocolScriptElementKind;
7578 })(SymbolKind2 || (SymbolKind2 = {}));
7579
7580 // src/server/features/workspaceSymbols.ts
7581 function parseKindModifier(kindModifiers) {
7582   return new Set(kindModifiers.split(/,|\s+/g));
7583 }
7584 function getSymbolKind(item) {
7585   switch (item.kind) {
7586     case "method":
7587       return import_vscode_languageserver_protocol3.SymbolKind.Method;
7588     case "enum":
7589       return import_vscode_languageserver_protocol3.SymbolKind.Enum;
7590     case "function":
7591       return import_vscode_languageserver_protocol3.SymbolKind.Function;
7592     case "class":
7593       return import_vscode_languageserver_protocol3.SymbolKind.Class;
7594     case "interface":
7595       return import_vscode_languageserver_protocol3.SymbolKind.Interface;
7596     case "var":
7597       return import_vscode_languageserver_protocol3.SymbolKind.Variable;
7598     default:
7599       return import_vscode_languageserver_protocol3.SymbolKind.Variable;
7600   }
7601 }
7602 var TypeScriptWorkspaceSymbolProvider = class {
7603   constructor(client, languageIds) {
7604     this.client = client;
7605     this.languageIds = languageIds;
7606   }
7607   async provideWorkspaceSymbols(search, token) {
7608     let filepath;
7609     if (this.searchAllOpenProjects) {
7610       filepath = void 0;
7611     } else {
7612       let uri = this.getUri();
7613       filepath = uri ? this.client.toPath(uri) : void 0;
7614       if (!filepath && this.client.apiVersion.lt(api_default.v390)) {
7615         return [];
7616       }
7617     }
7618     const args = {
7619       file: filepath,
7620       searchValue: search,
7621       maxResultCount: 256
7622     };
7623     const response = await this.client.execute("navto", args, token);
7624     if (response.type !== "response" || response.body == null)
7625       return [];
7626     const result = [];
7627     for (const item of response.body) {
7628       if (!item.containerName && item.kind === "alias") {
7629         continue;
7630       }
7631       const label = TypeScriptWorkspaceSymbolProvider.getLabel(item);
7632       const range = {
7633         start: Position.fromLocation(item.start),
7634         end: Position.fromLocation(item.end)
7635       };
7636       const symbolInfo = import_vscode_languageserver_protocol3.SymbolInformation.create(label, getSymbolKind(item), range, this.client.toResource(item.file));
7637       const kindModifiers = item.kindModifiers ? parseKindModifier(item.kindModifiers) : void 0;
7638       if (kindModifiers == null ? void 0 : kindModifiers.has(KindModifiers.deprecated)) {
7639         symbolInfo.tags = [import_vscode_languageserver_protocol3.SymbolTag.Deprecated];
7640       }
7641       result.push(symbolInfo);
7642     }
7643     return result;
7644   }
7645   static getLabel(item) {
7646     let label = item.name;
7647     if (item.kind === "method" || item.kind === "function") {
7648       label += "()";
7649     }
7650     return label;
7651   }
7652   getUri() {
7653     const documents = import_coc3.workspace.textDocuments;
7654     for (const document of documents) {
7655       if (this.languageIds.indexOf(document.languageId) >= 0) {
7656         return document.uri;
7657       }
7658     }
7659     return void 0;
7660   }
7661   get searchAllOpenProjects() {
7662     return this.client.apiVersion.gte(api_default.v390) && import_coc3.workspace.getConfiguration("typescript").get("workspaceSymbols.scope", "allOpenProjects") === "allOpenProjects";
7663   }
7664 };
7665 var workspaceSymbols_default = TypeScriptWorkspaceSymbolProvider;
7666
7667 // src/server/languageProvider.ts
7668 var import_coc23 = __toModule(require("coc.nvim"));
7669 var import_path5 = __toModule(require("path"));
7670 var import_vscode_languageserver_protocol18 = __toModule(require_main3());
7671
7672 // src/server/features/baseCodeLensProvider.ts
7673 var import_vscode_languageserver_protocol4 = __toModule(require_main3());
7674
7675 // src/server/utils/regexp.ts
7676 function escapeRegExp(text) {
7677   return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
7678 }
7679
7680 // src/server/features/baseCodeLensProvider.ts
7681 var CachedNavTreeResponse = class {
7682   constructor() {
7683     this.version = -1;
7684     this.document = "";
7685   }
7686   execute(document, f) {
7687     if (this.matches(document)) {
7688       return this.response;
7689     }
7690     return this.update(document, f());
7691   }
7692   matches(document) {
7693     return this.version === document.version && this.document === document.uri.toString();
7694   }
7695   update(document, response) {
7696     this.response = response;
7697     this.version = document.version;
7698     this.document = document.uri.toString();
7699     return response;
7700   }
7701 };
7702 var TypeScriptBaseCodeLensProvider = class {
7703   constructor(client, cachedResponse) {
7704     this.client = client;
7705     this.cachedResponse = cachedResponse;
7706     this.onDidChangeCodeLensesEmitter = new import_vscode_languageserver_protocol4.Emitter();
7707   }
7708   get onDidChangeCodeLenses() {
7709     return this.onDidChangeCodeLensesEmitter.event;
7710   }
7711   async provideCodeLenses(document, token) {
7712     const filepath = this.client.toPath(document.uri);
7713     if (!filepath) {
7714       return [];
7715     }
7716     try {
7717       const response = await this.cachedResponse.execute(document, () => this.client.execute("navtree", {file: filepath}, token));
7718       if (!response) {
7719         return [];
7720       }
7721       const tree = response.body;
7722       const referenceableSpans = [];
7723       if (tree && tree.childItems) {
7724         tree.childItems.forEach((item) => this.walkNavTree(document, item, null, referenceableSpans));
7725       }
7726       return referenceableSpans.map((range) => {
7727         return {
7728           range,
7729           data: {uri: document.uri}
7730         };
7731       });
7732     } catch {
7733       return [];
7734     }
7735   }
7736   walkNavTree(document, item, parent, results) {
7737     if (!item) {
7738       return;
7739     }
7740     const range = this.extractSymbol(document, item, parent);
7741     if (range) {
7742       results.push(range);
7743     }
7744     if (item.childItems) {
7745       item.childItems.forEach((child) => this.walkNavTree(document, child, item, results));
7746     }
7747   }
7748   getSymbolRange(document, item) {
7749     if (!item) {
7750       return null;
7751     }
7752     if (item.nameSpan) {
7753       return Range2.fromTextSpan(item.nameSpan);
7754     }
7755     const span = item.spans && item.spans[0];
7756     if (!span) {
7757       return null;
7758     }
7759     const range = Range2.fromTextSpan(span);
7760     const text = document.getText(range);
7761     const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${escapeRegExp(item.text || "")}(\\b|\\W)`, "gm");
7762     const match = identifierMatch.exec(text);
7763     const prefixLength = match ? match.index + match[1].length : 0;
7764     const startOffset = document.offsetAt(range.start) + prefixLength;
7765     return {
7766       start: document.positionAt(startOffset),
7767       end: document.positionAt(startOffset + item.text.length)
7768     };
7769   }
7770 };
7771
7772 // src/server/features/callHierarchy.ts
7773 var import_coc4 = __toModule(require("coc.nvim"));
7774 var import_path2 = __toModule(require("path"));
7775 var import_vscode_languageserver_protocol5 = __toModule(require_main3());
7776 var TypeScriptCallHierarchySupport = class {
7777   constructor(client) {
7778     this.client = client;
7779   }
7780   async prepareCallHierarchy(document, position, token) {
7781     const filepath = this.client.toOpenedFilePath(document.uri);
7782     if (!filepath) {
7783       return void 0;
7784     }
7785     const args = Position.toFileLocationRequestArgs(filepath, position);
7786     const response = await this.client.execute("prepareCallHierarchy", args, token);
7787     if (response.type !== "response" || !response.body) {
7788       return void 0;
7789     }
7790     return Array.isArray(response.body) ? response.body.map(fromProtocolCallHierarchyItem) : fromProtocolCallHierarchyItem(response.body);
7791   }
7792   async provideCallHierarchyIncomingCalls(item, token) {
7793     const filepath = this.client.toPath(item.uri);
7794     if (!filepath) {
7795       return void 0;
7796     }
7797     const args = Position.toFileLocationRequestArgs(filepath, item.selectionRange.start);
7798     const response = await this.client.execute("provideCallHierarchyIncomingCalls", args, token);
7799     if (response.type !== "response" || !response.body) {
7800       return void 0;
7801     }
7802     return response.body.map(fromProtocolCallHierarchyIncomingCall);
7803   }
7804   async provideCallHierarchyOutgoingCalls(item, token) {
7805     const filepath = this.client.toPath(item.uri);
7806     if (!filepath) {
7807       return void 0;
7808     }
7809     const args = Position.toFileLocationRequestArgs(filepath, item.selectionRange.start);
7810     const response = await this.client.execute("provideCallHierarchyOutgoingCalls", args, token);
7811     if (response.type !== "response" || !response.body) {
7812       return void 0;
7813     }
7814     return response.body.map(fromProtocolCallHierarchyOutgoingCall);
7815   }
7816 };
7817 TypeScriptCallHierarchySupport.minVersion = api_default.v380;
7818 var callHierarchy_default = TypeScriptCallHierarchySupport;
7819 function isSourceFileItem(item) {
7820   return item.kind === Kind.script || item.kind === Kind.module && item.selectionSpan.start.line === 1 && item.selectionSpan.start.offset === 1;
7821 }
7822 function parseKindModifier2(kindModifiers) {
7823   return new Set(kindModifiers.split(/,|\s+/g));
7824 }
7825 function fromProtocolCallHierarchyItem(item) {
7826   var _a;
7827   const useFileName = isSourceFileItem(item);
7828   const name = useFileName ? import_path2.default.basename(item.file) : item.name;
7829   const detail = useFileName ? import_path2.default.relative(import_coc4.workspace.cwd, import_path2.default.dirname(item.file)) : (_a = item.containerName) != null ? _a : "";
7830   const result = {
7831     name,
7832     detail,
7833     uri: import_coc4.Uri.file(item.file).toString(),
7834     kind: SymbolKind2.fromProtocolScriptElementKind(item.kind),
7835     range: Range2.fromTextSpan(item.span),
7836     selectionRange: Range2.fromTextSpan(item.selectionSpan)
7837   };
7838   const kindModifiers = item.kindModifiers ? parseKindModifier2(item.kindModifiers) : void 0;
7839   if (kindModifiers == null ? void 0 : kindModifiers.has(KindModifiers.deprecated)) {
7840     result.tags = [import_vscode_languageserver_protocol5.SymbolTag.Deprecated];
7841   }
7842   return result;
7843 }
7844 function fromProtocolCallHierarchyIncomingCall(item) {
7845   return {
7846     from: fromProtocolCallHierarchyItem(item.from),
7847     fromRanges: item.fromSpans.map(Range2.fromTextSpan)
7848   };
7849 }
7850 function fromProtocolCallHierarchyOutgoingCall(item) {
7851   return {
7852     to: fromProtocolCallHierarchyItem(item.to),
7853     fromRanges: item.fromSpans.map(Range2.fromTextSpan)
7854   };
7855 }
7856
7857 // src/server/features/completionItemProvider.ts
7858 var import_coc8 = __toModule(require("coc.nvim"));
7859 var import_vscode_languageserver_protocol9 = __toModule(require_main3());
7860
7861 // src/server/utils/codeAction.ts
7862 var import_vscode_languageserver_protocol6 = __toModule(require_main3());
7863 var import_coc5 = __toModule(require("coc.nvim"));
7864 function getEditForCodeAction(client, action) {
7865   return action.changes && action.changes.length ? WorkspaceEdit.fromFileCodeEdits(client, action.changes) : void 0;
7866 }
7867 async function applyCodeAction(client, action) {
7868   const workspaceEdit = getEditForCodeAction(client, action);
7869   if (workspaceEdit) {
7870     if (!await import_coc5.workspace.applyEdit(workspaceEdit)) {
7871       return false;
7872     }
7873   }
7874   return applyCodeActionCommands(client, action);
7875 }
7876 async function applyCodeActionCommands(client, action) {
7877   if (action.commands && action.commands.length) {
7878     for (const command of action.commands) {
7879       const response = await client.execute("applyCodeActionCommand", {command}, import_vscode_languageserver_protocol6.CancellationToken.None);
7880       if (!response || response.type != "response" || !response.body) {
7881         return false;
7882       }
7883     }
7884   }
7885   return true;
7886 }
7887
7888 // src/server/utils/completionItem.ts
7889 var import_coc6 = __toModule(require("coc.nvim"));
7890 var import_vscode_languageserver_protocol7 = __toModule(require_main3());
7891 function convertCompletionEntry(tsEntry, uri, position, context) {
7892   let label = tsEntry.name;
7893   let sortText = tsEntry.sortText;
7894   let preselect = false;
7895   let detail;
7896   if (tsEntry.isRecommended) {
7897     preselect = true;
7898   }
7899   if (tsEntry.source && tsEntry.hasAction) {
7900     sortText = "\uFFFF" + sortText;
7901   } else {
7902     sortText = tsEntry.sortText;
7903   }
7904   let kind = convertKind(tsEntry.kind);
7905   let insertTextFormat = context.enableCallCompletions && (kind === import_coc6.CompletionItemKind.Function || kind === import_coc6.CompletionItemKind.Method) ? import_coc6.InsertTextFormat.Snippet : import_coc6.InsertTextFormat.PlainText;
7906   let insertText = tsEntry.insertText;
7907   let commitCharacters = getCommitCharacters(tsEntry, context);
7908   let tags;
7909   if (tsEntry.isImportStatementCompletion) {
7910     insertText = label;
7911     insertTextFormat = import_coc6.InsertTextFormat.Snippet;
7912   }
7913   let textEdit = null;
7914   if (tsEntry.replacementSpan) {
7915     let {start, end} = tsEntry.replacementSpan;
7916     if (start.line == end.line) {
7917       textEdit = {
7918         range: import_coc6.Range.create(start.line - 1, start.offset - 1, end.line - 1, end.offset - 1),
7919         newText: tsEntry.insertText || label
7920       };
7921     }
7922   }
7923   if (tsEntry.kindModifiers) {
7924     const kindModifiers = new Set(tsEntry.kindModifiers.split(/,|\s+/g));
7925     if (kindModifiers.has(KindModifiers.optional)) {
7926       insertText = label;
7927       label += "?";
7928     }
7929     if (kindModifiers.has(KindModifiers.deprecated)) {
7930       tags = [import_vscode_languageserver_protocol7.CompletionItemTag.Deprecated];
7931     }
7932     if (kindModifiers.has(KindModifiers.color)) {
7933       kind = import_coc6.CompletionItemKind.Color;
7934     }
7935     if (tsEntry.kind === Kind.script) {
7936       for (const extModifier of KindModifiers.fileExtensionKindModifiers) {
7937         if (kindModifiers.has(extModifier)) {
7938           if (tsEntry.name.toLowerCase().endsWith(extModifier)) {
7939             detail = tsEntry.name;
7940           } else {
7941             detail = tsEntry.name + extModifier;
7942           }
7943           break;
7944         }
7945       }
7946     }
7947   }
7948   return {
7949     label,
7950     insertText,
7951     textEdit,
7952     kind,
7953     tags,
7954     preselect,
7955     insertTextFormat,
7956     sortText,
7957     commitCharacters,
7958     detail,
7959     data: {
7960       uri,
7961       position,
7962       name: tsEntry.name,
7963       data: tsEntry.data,
7964       source: tsEntry.source || ""
7965     }
7966   };
7967 }
7968 function convertKind(kind) {
7969   switch (kind) {
7970     case Kind.primitiveType:
7971     case Kind.keyword:
7972       return import_coc6.CompletionItemKind.Keyword;
7973     case Kind.const:
7974       return import_coc6.CompletionItemKind.Constant;
7975     case Kind.let:
7976     case Kind.variable:
7977     case Kind.localVariable:
7978     case Kind.alias:
7979       return import_coc6.CompletionItemKind.Variable;
7980     case Kind.memberVariable:
7981     case Kind.memberGetAccessor:
7982     case Kind.memberSetAccessor:
7983       return import_coc6.CompletionItemKind.Field;
7984     case Kind.function:
7985       return import_coc6.CompletionItemKind.Function;
7986     case Kind.method:
7987     case Kind.constructSignature:
7988     case Kind.callSignature:
7989     case Kind.indexSignature:
7990       return import_coc6.CompletionItemKind.Method;
7991     case Kind.enum:
7992       return import_coc6.CompletionItemKind.Enum;
7993     case Kind.module:
7994     case Kind.externalModuleName:
7995       return import_coc6.CompletionItemKind.Module;
7996     case Kind.class:
7997     case Kind.type:
7998       return import_coc6.CompletionItemKind.Class;
7999     case Kind.interface:
8000       return import_coc6.CompletionItemKind.Interface;
8001     case Kind.warning:
8002     case Kind.script:
8003       return import_coc6.CompletionItemKind.File;
8004     case Kind.directory:
8005       return import_coc6.CompletionItemKind.Folder;
8006   }
8007   return import_coc6.CompletionItemKind.Variable;
8008 }
8009 function getCommitCharacters(tsEntry, context) {
8010   if (context.isNewIdentifierLocation || !context.isInValidCommitCharacterContext) {
8011     return void 0;
8012   }
8013   const commitCharacters = [];
8014   switch (tsEntry.kind) {
8015     case Kind.memberGetAccessor:
8016     case Kind.memberSetAccessor:
8017     case Kind.constructSignature:
8018     case Kind.callSignature:
8019     case Kind.indexSignature:
8020     case Kind.enum:
8021     case Kind.interface:
8022       commitCharacters.push(".", ";");
8023       break;
8024     case Kind.module:
8025     case Kind.alias:
8026     case Kind.const:
8027     case Kind.let:
8028     case Kind.variable:
8029     case Kind.localVariable:
8030     case Kind.memberVariable:
8031     case Kind.class:
8032     case Kind.function:
8033     case Kind.method:
8034     case Kind.keyword:
8035     case Kind.parameter:
8036       commitCharacters.push(".", ",", ";");
8037       if (context.enableCallCompletions) {
8038         commitCharacters.push("(");
8039       }
8040       break;
8041   }
8042   return commitCharacters.length === 0 ? void 0 : commitCharacters;
8043 }
8044 function getParameterListParts(displayParts) {
8045   const parts = [];
8046   let isInMethod = false;
8047   let hasOptionalParameters = false;
8048   let parenCount = 0;
8049   let braceCount = 0;
8050   outer:
8051     for (let i = 0; i < displayParts.length; ++i) {
8052       const part = displayParts[i];
8053       switch (part.kind) {
8054         case DisplayPartKind.methodName:
8055         case DisplayPartKind.functionName:
8056         case DisplayPartKind.text:
8057         case DisplayPartKind.propertyName:
8058           if (parenCount === 0 && braceCount === 0) {
8059             isInMethod = true;
8060           }
8061           break;
8062         case DisplayPartKind.parameterName:
8063           if (parenCount === 1 && braceCount === 0 && isInMethod) {
8064             const next = displayParts[i + 1];
8065             const nameIsFollowedByOptionalIndicator = next && next.text === "?";
8066             const nameIsThis = part.text === "this";
8067             if (!nameIsFollowedByOptionalIndicator && !nameIsThis) {
8068               parts.push(part);
8069             }
8070             hasOptionalParameters = hasOptionalParameters || nameIsFollowedByOptionalIndicator;
8071           }
8072           break;
8073         case DisplayPartKind.punctuation:
8074           if (part.text === "(") {
8075             ++parenCount;
8076           } else if (part.text === ")") {
8077             --parenCount;
8078             if (parenCount <= 0 && isInMethod) {
8079               break outer;
8080             }
8081           } else if (part.text === "..." && parenCount === 1) {
8082             hasOptionalParameters = true;
8083             break outer;
8084           } else if (part.text === "{") {
8085             ++braceCount;
8086           } else if (part.text === "}") {
8087             --braceCount;
8088           }
8089           break;
8090       }
8091     }
8092   return {hasOptionalParameters, parts};
8093 }
8094
8095 // src/server/utils/previewer.ts
8096 var import_vscode_languageserver_protocol8 = __toModule(require_main3());
8097 var import_coc7 = __toModule(require("coc.nvim"));
8098 function toResource(filepath) {
8099   return import_coc7.Uri.file(filepath);
8100 }
8101 function replaceLinks(text) {
8102   return text.replace(/\{@(link|linkplain|linkcode) (https?:\/\/[^ |}]+?)(?:[| ]([^{}\n]+?))?\}/gi, (_, tag, link, text2) => {
8103     switch (tag) {
8104       case "linkcode":
8105         return `[\`${text2 ? text2.trim() : link}\`](${link})`;
8106       default:
8107         return `[${text2 ? text2.trim() : link}](${link})`;
8108     }
8109   });
8110 }
8111 function processInlineTags(text) {
8112   return replaceLinks(text);
8113 }
8114 function getTagBodyText(tag) {
8115   if (!tag.text) {
8116     return void 0;
8117   }
8118   function makeCodeblock(text2) {
8119     if (text2.match(/^\s*[~`]{3}/g)) {
8120       return text2;
8121     }
8122     return "```\n" + text2 + "\n```";
8123   }
8124   const text = convertLinkTags(tag.text);
8125   switch (tag.name) {
8126     case "example":
8127       const captionTagMatches = text.match(/<caption>(.*?)<\/caption>\s*(\r\n|\n)/);
8128       if (captionTagMatches && captionTagMatches.index === 0) {
8129         return captionTagMatches[1] + "\n\n" + makeCodeblock(text.substr(captionTagMatches[0].length));
8130       } else {
8131         return makeCodeblock(text);
8132       }
8133     case "author":
8134       const emailMatch = text.match(/(.+)\s<([-.\w]+@[-.\w]+)>/);
8135       if (emailMatch === null) {
8136         return text;
8137       } else {
8138         return `${emailMatch[1]} ${emailMatch[2]}`;
8139       }
8140     case "default":
8141       return makeCodeblock(text);
8142   }
8143   return processInlineTags(text);
8144 }
8145 function getTagDocumentation(tag) {
8146   switch (tag.name) {
8147     case "augments":
8148     case "extends":
8149     case "param":
8150     case "template":
8151       const body = convertLinkTags(tag.text).split(/^(\S+)\s*-?\s*/);
8152       if ((body == null ? void 0 : body.length) === 3) {
8153         const param = body[1];
8154         const doc = body[2];
8155         const label2 = `*@${tag.name}* \`${param}\``;
8156         if (!doc) {
8157           return label2;
8158         }
8159         return label2 + (doc.match(/\r\n|\n/g) ? "  \n" + processInlineTags(doc) : ` \u2014 ${processInlineTags(doc)}`);
8160       }
8161   }
8162   const label = `*@${tag.name}*`;
8163   const text = getTagBodyText(tag);
8164   if (!text) {
8165     return label;
8166   }
8167   return label + (text.match(/\r\n|\n/g) ? "  \n" + text : ` \u2014 ${text}`);
8168 }
8169 function plain(parts) {
8170   if (!parts || !parts.length)
8171     return "";
8172   return parts.map((part) => part.text).join("");
8173 }
8174 function tagsMarkdownPreview(tags) {
8175   return (tags || []).map(getTagDocumentation).join("  \n\n");
8176 }
8177 function markdownDocumentation(documentation, tags) {
8178   let out = plain(documentation);
8179   const tagsPreview = tagsMarkdownPreview(tags);
8180   if (tagsPreview) {
8181     out = out + ("\n\n" + tagsPreview);
8182   }
8183   return {
8184     kind: import_vscode_languageserver_protocol8.MarkupKind.Markdown,
8185     value: out
8186   };
8187 }
8188 function convertLinkTags(parts) {
8189   var _a;
8190   if (!parts) {
8191     return "";
8192   }
8193   if (typeof parts === "string") {
8194     return parts;
8195   }
8196   const out = [];
8197   let currentLink;
8198   for (const part of parts) {
8199     switch (part.kind) {
8200       case "link":
8201         if (currentLink) {
8202           const text = (_a = currentLink.text) != null ? _a : currentLink.name;
8203           if (currentLink.target) {
8204             const link = toResource(currentLink.target.file).with({
8205               fragment: `L${currentLink.target.start.line},${currentLink.target.start.offset}`
8206             });
8207             out.push(`[${text}](${link.toString()})`);
8208           } else {
8209             if (text) {
8210               if (/^https?:/.test(text)) {
8211                 const parts2 = text.split(" ");
8212                 if (parts2.length === 1) {
8213                   out.push(parts2[0]);
8214                 } else if (parts2.length > 1) {
8215                   out.push(`[${parts2.slice(1).join(" ")}](${parts2[0]})`);
8216                 }
8217               } else {
8218                 out.push(text);
8219               }
8220             }
8221           }
8222           currentLink = void 0;
8223         } else {
8224           currentLink = {};
8225         }
8226         break;
8227       case "linkName":
8228         if (currentLink) {
8229           currentLink.name = part.text;
8230           currentLink.target = part.target;
8231         }
8232         break;
8233       case "linkText":
8234         if (currentLink) {
8235           currentLink.text = part.text;
8236         }
8237         break;
8238       default:
8239         out.push(part.text);
8240         break;
8241     }
8242   }
8243   return processInlineTags(out.join(""));
8244 }
8245
8246 // src/server/utils/SnippetString.ts
8247 var SnippetString = class {
8248   constructor(value) {
8249     this._tabstop = 1;
8250     this.value = value || "";
8251   }
8252   static isSnippetString(thing) {
8253     if (thing instanceof SnippetString) {
8254       return true;
8255     }
8256     if (!thing) {
8257       return false;
8258     }
8259     return typeof thing.value === "string";
8260   }
8261   static _escape(value) {
8262     return value.replace(/\$|}|\\/g, "\\$&");
8263   }
8264   appendText(str) {
8265     this.value += SnippetString._escape(str);
8266     return this;
8267   }
8268   appendTabstop(n = this._tabstop++) {
8269     this.value += "$";
8270     this.value += n;
8271     return this;
8272   }
8273   appendPlaceholder(value, n = this._tabstop++) {
8274     if (typeof value === "function") {
8275       const nested = new SnippetString();
8276       nested._tabstop = this._tabstop;
8277       value(nested);
8278       this._tabstop = nested._tabstop;
8279       value = nested.value;
8280     } else {
8281       value = SnippetString._escape(value);
8282     }
8283     this.value += "${";
8284     this.value += n;
8285     this.value += ":";
8286     this.value += value;
8287     this.value += "}";
8288     return this;
8289   }
8290   appendVariable(name, defaultValue) {
8291     if (typeof defaultValue === "function") {
8292       const nested = new SnippetString();
8293       nested._tabstop = this._tabstop;
8294       defaultValue(nested);
8295       this._tabstop = nested._tabstop;
8296       defaultValue = nested.value;
8297     } else if (typeof defaultValue === "string") {
8298       defaultValue = defaultValue.replace(/\$|}/g, "\\$&");
8299     }
8300     this.value += "${";
8301     this.value += name;
8302     if (defaultValue) {
8303       this.value += ":";
8304       this.value += defaultValue;
8305     }
8306     this.value += "}";
8307     return this;
8308   }
8309 };
8310 var SnippetString_default = SnippetString;
8311
8312 // src/server/features/completionItemProvider.ts
8313 var ApplyCompletionCodeActionCommand2 = class {
8314   constructor(client) {
8315     this.client = client;
8316     this.id = ApplyCompletionCodeActionCommand2.ID;
8317   }
8318   async execute(codeActions) {
8319     if (codeActions.length === 0) {
8320       return;
8321     }
8322     if (codeActions.length === 1) {
8323       await applyCodeAction(this.client, codeActions[0]);
8324       return;
8325     }
8326     const idx = await import_coc8.window.showQuickpick(codeActions.map((o) => o.description), "Select code action to apply");
8327     if (idx < 0)
8328       return;
8329     const action = codeActions[idx];
8330     await applyCodeAction(this.client, action);
8331     return;
8332   }
8333 };
8334 var ApplyCompletionCodeActionCommand = ApplyCompletionCodeActionCommand2;
8335 ApplyCompletionCodeActionCommand.ID = "_typescript.applyCompletionCodeAction";
8336 var TypeScriptCompletionItemProvider = class {
8337   constructor(client, typingsStatus, fileConfigurationManager, languageId) {
8338     this.client = client;
8339     this.typingsStatus = typingsStatus;
8340     this.fileConfigurationManager = fileConfigurationManager;
8341     this.setCompleteOption(languageId);
8342     import_coc8.commands.registerCommand(ApplyCompletionCodeActionCommand.ID, async (codeActions) => {
8343       let cmd = new ApplyCompletionCodeActionCommand(this.client);
8344       await cmd.execute(codeActions);
8345     });
8346     import_coc8.workspace.onDidChangeConfiguration((_e) => {
8347       this.setCompleteOption(languageId);
8348     });
8349   }
8350   setCompleteOption(languageId) {
8351     this.completeOption = this.fileConfigurationManager.getCompleteOptions(languageId);
8352   }
8353   async provideCompletionItems(document, position, token, context) {
8354     if (this.typingsStatus.isAcquiringTypings) {
8355       return Promise.resolve({
8356         isIncomplete: true,
8357         items: [{
8358           label: "Acquiring typings...",
8359           detail: "Acquiring typings definitions for IntelliSense."
8360         }]
8361       });
8362     }
8363     let {uri} = document;
8364     const file2 = this.client.toPath(document.uri);
8365     if (!file2)
8366       return null;
8367     let preText = document.getText({
8368       start: {line: position.line, character: 0},
8369       end: position
8370     });
8371     let {triggerCharacter, option} = context;
8372     if (!this.shouldTrigger(triggerCharacter, preText, option)) {
8373       return null;
8374     }
8375     await this.client.interruptGetErr(() => this.fileConfigurationManager.ensureConfigurationForDocument(document, token));
8376     const {completeOption} = this;
8377     const args = {
8378       ...Position.toFileLocationRequestArgs(file2, position),
8379       includeExternalModuleExports: completeOption.autoImports,
8380       includeInsertTextCompletions: true,
8381       triggerCharacter: this.getTsTriggerCharacter(context),
8382       includeAutomaticOptionalChainCompletions: completeOption.includeAutomaticOptionalChainCompletions
8383     };
8384     let entries;
8385     let dotAccessorContext;
8386     let isNewIdentifierLocation = true;
8387     let isMemberCompletion = false;
8388     let isIncomplete = false;
8389     const isInValidCommitCharacterContext = this.isInValidCommitCharacterContext(document, position);
8390     if (this.client.apiVersion.gte(api_default.v300)) {
8391       try {
8392         const response = await this.client.interruptGetErr(() => this.client.execute("completionInfo", args, token));
8393         if (response.type !== "response" || !response.body) {
8394           return null;
8395         }
8396         isNewIdentifierLocation = response.body.isNewIdentifierLocation;
8397         isMemberCompletion = response.body.isMemberCompletion;
8398         if (isMemberCompletion) {
8399           const dotMatch = preText.slice(0, position.character).match(/\??\.\s*$/) || void 0;
8400           if (dotMatch) {
8401             const range = import_vscode_languageserver_protocol9.Range.create({
8402               line: position.line,
8403               character: position.character - dotMatch.length
8404             }, position);
8405             const text = document.getText(range);
8406             dotAccessorContext = {range, text};
8407           }
8408         }
8409         isIncomplete = !!response.body.isIncomplete || response.metadata && response.metadata.isIncomplete;
8410         entries = response.body.entries;
8411       } catch (e) {
8412         if (e.message == "No content available.") {
8413           return null;
8414         }
8415         throw e;
8416       }
8417     } else {
8418       const response = await this.client.interruptGetErr(() => this.client.execute("completions", args, token));
8419       if (response.type !== "response" || !response.body) {
8420         return null;
8421       }
8422       entries = response.body;
8423     }
8424     const completionItems = [];
8425     for (const element of entries) {
8426       if (shouldExcludeCompletionEntry(element, completeOption)) {
8427         continue;
8428       }
8429       const item = convertCompletionEntry(element, uri, position, {
8430         isNewIdentifierLocation,
8431         isMemberCompletion,
8432         enableCallCompletions: completeOption.completeFunctionCalls,
8433         isInValidCommitCharacterContext,
8434         dotAccessorContext
8435       });
8436       completionItems.push(item);
8437     }
8438     return {isIncomplete, items: completionItems};
8439   }
8440   getTsTriggerCharacter(context) {
8441     switch (context.triggerCharacter) {
8442       case "@":
8443         return this.client.apiVersion.gte(api_default.v310) && this.client.apiVersion.lt(api_default.v320) ? void 0 : "@";
8444       case "#":
8445         return this.client.apiVersion.lt(api_default.v381) ? void 0 : "#";
8446       case " ":
8447         return this.client.apiVersion.gte(api_default.v430) ? " " : void 0;
8448       case ".":
8449       case '"':
8450       case "'":
8451       case "`":
8452       case "/":
8453       case "<":
8454         return context.triggerCharacter;
8455     }
8456     return void 0;
8457   }
8458   async resolveCompletionItem(item, token) {
8459     if (item == null)
8460       return void 0;
8461     let {uri, position, source, name, data} = item.data;
8462     const filepath = this.client.toPath(uri);
8463     if (!filepath)
8464       return void 0;
8465     let document = import_coc8.workspace.getDocument(uri);
8466     if (!document)
8467       return void 0;
8468     const args = {
8469       ...Position.toFileLocationRequestArgs(filepath, position),
8470       entryNames: [source ? {name, source, data} : name]
8471     };
8472     let response;
8473     try {
8474       response = await this.client.interruptGetErr(() => this.client.execute("completionEntryDetails", args, token));
8475     } catch {
8476       return item;
8477     }
8478     if (response.type !== "response" || !response.body || !response.body.length) {
8479       return item;
8480     }
8481     const details = response.body;
8482     if (!details || !details.length || !details[0]) {
8483       return item;
8484     }
8485     const detail = details[0];
8486     if (!item.detail && detail.displayParts.length) {
8487       item.detail = plain(detail.displayParts);
8488     }
8489     item.documentation = this.getDocumentation(detail);
8490     const {command, additionalTextEdits} = this.getCodeActions(detail, filepath);
8491     if (command)
8492       item.command = command;
8493     item.additionalTextEdits = additionalTextEdits;
8494     if (detail && item.insertTextFormat == import_vscode_languageserver_protocol9.InsertTextFormat.Snippet) {
8495       const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, position, token);
8496       if (shouldCompleteFunction) {
8497         this.createSnippetOfFunctionCall(item, detail);
8498       }
8499     }
8500     return item;
8501   }
8502   getCodeActions(detail, filepath) {
8503     if (!detail.codeActions || !detail.codeActions.length) {
8504       return {};
8505     }
8506     const additionalTextEdits = [];
8507     let hasRemainingCommandsOrEdits = false;
8508     for (const tsAction of detail.codeActions) {
8509       if (tsAction.commands) {
8510         hasRemainingCommandsOrEdits = true;
8511       }
8512       if (tsAction.changes) {
8513         for (const change of tsAction.changes) {
8514           if (change.fileName === filepath) {
8515             additionalTextEdits.push(...change.textChanges.map(TextEdit.fromCodeEdit));
8516           } else {
8517             hasRemainingCommandsOrEdits = true;
8518           }
8519         }
8520       }
8521     }
8522     let command = null;
8523     if (hasRemainingCommandsOrEdits) {
8524       command = {
8525         title: "",
8526         command: ApplyCompletionCodeActionCommand.ID,
8527         arguments: [
8528           detail.codeActions.map((x) => ({
8529             commands: x.commands,
8530             description: x.description,
8531             changes: x.changes.filter((x2) => x2.fileName !== filepath)
8532           }))
8533         ]
8534       };
8535     }
8536     return {
8537       command,
8538       additionalTextEdits: additionalTextEdits.length ? additionalTextEdits : void 0
8539     };
8540   }
8541   shouldTrigger(triggerCharacter, pre, option) {
8542     if (triggerCharacter && this.client.apiVersion.lt(api_default.v290)) {
8543       if (triggerCharacter === "@") {
8544         if (option.synname && /string/i.test(option.synname)) {
8545           return true;
8546         }
8547         if (!pre.match(/^\s*\*[ ]?@/) && !pre.match(/\/\*\*+[ ]?@/)) {
8548           return false;
8549         }
8550       } else if (triggerCharacter === "<") {
8551         return false;
8552       }
8553     }
8554     if (triggerCharacter === " ") {
8555       if (!this.completeOption.importStatementSuggestions || !this.client.apiVersion.lt(api_default.v430)) {
8556         return false;
8557       }
8558       return pre === "import ";
8559     }
8560     return true;
8561   }
8562   getDocumentation(detail) {
8563     let documentation = "";
8564     if (detail.source) {
8565       const importPath = `'${plain(detail.source)}'`;
8566       const autoImportLabel = `Auto import from ${importPath}`;
8567       documentation += `${autoImportLabel}
8568 `;
8569     }
8570     let parts = [
8571       plain(detail.documentation),
8572       tagsMarkdownPreview(detail.tags)
8573     ];
8574     parts = parts.filter((s) => s && s.trim() != "");
8575     documentation += parts.join("\n\n");
8576     if (documentation.length) {
8577       return {
8578         kind: import_vscode_languageserver_protocol9.MarkupKind.Markdown,
8579         value: documentation
8580       };
8581     }
8582     return void 0;
8583   }
8584   createSnippetOfFunctionCall(item, detail) {
8585     let {displayParts} = detail;
8586     const parameterListParts = getParameterListParts(displayParts);
8587     const snippet = new SnippetString_default();
8588     snippet.appendText(`${item.insertText || item.label}(`);
8589     appendJoinedPlaceholders(snippet, parameterListParts.parts, ", ");
8590     if (parameterListParts.hasOptionalParameters) {
8591       snippet.appendTabstop();
8592     }
8593     snippet.appendText(")");
8594     snippet.appendTabstop(0);
8595     item.insertText = snippet.value;
8596   }
8597   async isValidFunctionCompletionContext(filepath, position, token) {
8598     try {
8599       const args = Position.toFileLocationRequestArgs(filepath, position);
8600       const response = await this.client.execute("quickinfo", args, token);
8601       if (response.type !== "response") {
8602         return true;
8603       }
8604       const {body} = response;
8605       switch (body && body.kind) {
8606         case "var":
8607         case "let":
8608         case "const":
8609         case "alias":
8610           return false;
8611         default:
8612           return true;
8613       }
8614     } catch (e) {
8615       return true;
8616     }
8617   }
8618   isInValidCommitCharacterContext(document, position) {
8619     if (this.client.apiVersion.lt(api_default.v320)) {
8620       if (position.character > 1) {
8621         const preText = document.getText(import_vscode_languageserver_protocol9.Range.create(position.line, 0, position.line, position.character));
8622         return preText.match(/(\s|^)\.$/ig) === null;
8623       }
8624     }
8625     return true;
8626   }
8627 };
8628 TypeScriptCompletionItemProvider.triggerCharacters = [".", '"', "'", "`", "/", "@", "<", "#", " "];
8629 var completionItemProvider_default = TypeScriptCompletionItemProvider;
8630 function shouldExcludeCompletionEntry(element, completionConfiguration) {
8631   return !completionConfiguration.names && element.kind === Kind.warning || !completionConfiguration.paths && (element.kind === Kind.directory || element.kind === Kind.script || element.kind === Kind.externalModuleName) || !completionConfiguration.autoImports && element.hasAction;
8632 }
8633 function appendJoinedPlaceholders(snippet, parts, joiner) {
8634   for (let i = 0; i < parts.length; ++i) {
8635     const paramterPart = parts[i];
8636     snippet.appendPlaceholder(paramterPart.text);
8637     if (i !== parts.length - 1) {
8638       snippet.appendText(joiner);
8639     }
8640   }
8641 }
8642
8643 // src/server/features/definitionProvider.ts
8644 var TypeScriptDefinitionProvider = class {
8645   constructor(client) {
8646     this.client = client;
8647   }
8648   async getSymbolLocations(definitionType, document, position, token) {
8649     const filepath = this.client.toPath(document.uri);
8650     if (!filepath) {
8651       return void 0;
8652     }
8653     const args = Position.toFileLocationRequestArgs(filepath, position);
8654     try {
8655       const response = await this.client.execute(definitionType, args, token);
8656       const locations = response.type == "response" && response.body || [];
8657       return locations.map((location) => Location2.fromTextSpan(this.client.toResource(location.file), location));
8658     } catch {
8659       return [];
8660     }
8661   }
8662   async provideDefinition(document, position, token) {
8663     if (this.client.apiVersion.gte(api_default.v270)) {
8664       const filepath = this.client.toOpenedFilePath(document.uri);
8665       if (!filepath) {
8666         return void 0;
8667       }
8668       const args = Position.toFileLocationRequestArgs(filepath, position);
8669       const response = await this.client.execute("definitionAndBoundSpan", args, token);
8670       if (response.type !== "response" || !response.body) {
8671         return void 0;
8672       }
8673       const span = response.body.textSpan ? Range2.fromTextSpan(response.body.textSpan) : void 0;
8674       return response.body.definitions.map((location) => {
8675         const target = Location2.fromTextSpan(this.client.toResource(location.file), location);
8676         if (location.contextStart && location.contextEnd) {
8677           return {
8678             originSelectionRange: span,
8679             targetRange: Range2.fromLocations(location.contextStart, location.contextEnd),
8680             targetUri: target.uri,
8681             targetSelectionRange: target.range
8682           };
8683         }
8684         return {
8685           originSelectionRange: span,
8686           targetRange: target.range,
8687           targetUri: target.uri,
8688           targetSelectionRange: target.range
8689         };
8690       });
8691     }
8692     return await this.getSymbolLocations("definition", document, position, token);
8693   }
8694   provideTypeDefinition(document, position, token) {
8695     return this.getSymbolLocations("typeDefinition", document, position, token);
8696   }
8697   provideImplementation(document, position, token) {
8698     return this.getSymbolLocations("implementation", document, position, token);
8699   }
8700 };
8701 var definitionProvider_default = TypeScriptDefinitionProvider;
8702
8703 // src/server/features/directiveCommentCompletions.ts
8704 var import_coc9 = __toModule(require("coc.nvim"));
8705 var import_coc10 = __toModule(require("coc.nvim"));
8706 var tsDirectives = [
8707   {
8708     value: "@ts-check",
8709     description: "Enables semantic checking in a JavaScript file. Must be at the top of a file."
8710   },
8711   {
8712     value: "@ts-nocheck",
8713     description: "Disables semantic checking in a JavaScript file. Must be at the top of a file."
8714   },
8715   {
8716     value: "@ts-ignore",
8717     description: "Suppresses @ts-check errors on the next line of a file."
8718   }
8719 ];
8720 var tsDirectives390 = [
8721   ...tsDirectives,
8722   {
8723     value: "@ts-expect-error",
8724     description: "Suppresses @ts-check errors on the next line of a file, expecting at least one to exist."
8725   }
8726 ];
8727 var DirectiveCommentCompletionProvider = class {
8728   constructor(client) {
8729     this.client = client;
8730   }
8731   provideCompletionItems(document, position, _token, context) {
8732     if (context.triggerCharacter != "@") {
8733       return [];
8734     }
8735     const file2 = this.client.toPath(document.uri);
8736     if (!file2) {
8737       return [];
8738     }
8739     const doc = import_coc10.workspace.getDocument(document.uri);
8740     const line = doc.getline(position.line);
8741     const prefix = line.slice(0, position.character);
8742     const match = prefix.match(/^\s*\/\/+\s?(@[a-zA-Z\-]*)?$/);
8743     if (match) {
8744       const directives = this.client.apiVersion.gte(api_default.v390) ? tsDirectives390 : tsDirectives;
8745       let items = directives.map((directive) => {
8746         const item = {label: directive.value};
8747         item.kind = import_coc9.CompletionItemKind.Snippet;
8748         item.detail = directive.description;
8749         item.textEdit = {
8750           range: import_coc9.Range.create(position.line, Math.max(0, position.character - (match[1] ? match[1].length : 0)), position.line, position.character),
8751           newText: directive.value
8752         };
8753         return item;
8754       });
8755       let res = {
8756         isIncomplete: false,
8757         items
8758       };
8759       res.startcol = doc.fixStartcol(position, ["@"]);
8760       return res;
8761     }
8762     return [];
8763   }
8764 };
8765 var directiveCommentCompletions_default = DirectiveCommentCompletionProvider;
8766
8767 // src/server/features/documentHighlight.ts
8768 var import_vscode_languageserver_protocol10 = __toModule(require_main3());
8769 var TypeScriptDocumentHighlightProvider = class {
8770   constructor(client) {
8771     this.client = client;
8772   }
8773   async provideDocumentHighlights(resource, position, token) {
8774     const file2 = this.client.toPath(resource.uri);
8775     if (!file2)
8776       return [];
8777     const args = {
8778       ...Position.toFileLocationRequestArgs(file2, position),
8779       filesToSearch: [file2]
8780     };
8781     try {
8782       const response = await this.client.execute("documentHighlights", args, token);
8783       if (response.type !== "response" || !response.body) {
8784         return [];
8785       }
8786       return flatten(response.body.filter((highlight) => highlight.file === file2).map(convertDocumentHighlight));
8787     } catch (_e) {
8788       return [];
8789     }
8790   }
8791 };
8792 var documentHighlight_default = TypeScriptDocumentHighlightProvider;
8793 function convertDocumentHighlight(highlight) {
8794   return highlight.highlightSpans.map((span) => {
8795     return {
8796       range: Range2.fromTextSpan(span),
8797       kind: span.kind === "writtenReference" ? import_vscode_languageserver_protocol10.DocumentHighlightKind.Write : import_vscode_languageserver_protocol10.DocumentHighlightKind.Read
8798     };
8799   });
8800 }
8801
8802 // src/server/features/documentSymbol.ts
8803 var import_vscode_languageserver_protocol11 = __toModule(require_main3());
8804 var getSymbolKind2 = (kind) => {
8805   switch (kind) {
8806     case Kind.module:
8807       return import_vscode_languageserver_protocol11.SymbolKind.Module;
8808     case Kind.class:
8809       return import_vscode_languageserver_protocol11.SymbolKind.Class;
8810     case Kind.enum:
8811       return import_vscode_languageserver_protocol11.SymbolKind.Enum;
8812     case Kind.interface:
8813       return import_vscode_languageserver_protocol11.SymbolKind.Interface;
8814     case Kind.method:
8815       return import_vscode_languageserver_protocol11.SymbolKind.Method;
8816     case Kind.memberVariable:
8817       return import_vscode_languageserver_protocol11.SymbolKind.Property;
8818     case Kind.memberGetAccessor:
8819       return import_vscode_languageserver_protocol11.SymbolKind.Property;
8820     case Kind.memberSetAccessor:
8821       return import_vscode_languageserver_protocol11.SymbolKind.Property;
8822     case Kind.variable:
8823       return import_vscode_languageserver_protocol11.SymbolKind.Variable;
8824     case Kind.const:
8825       return import_vscode_languageserver_protocol11.SymbolKind.Variable;
8826     case Kind.localVariable:
8827       return import_vscode_languageserver_protocol11.SymbolKind.Variable;
8828     case Kind.variable:
8829       return import_vscode_languageserver_protocol11.SymbolKind.Variable;
8830     case Kind.constructSignature:
8831     case Kind.constructorImplementation:
8832     case Kind.function:
8833     case Kind.localFunction:
8834       return import_vscode_languageserver_protocol11.SymbolKind.Function;
8835   }
8836   return import_vscode_languageserver_protocol11.SymbolKind.Variable;
8837 };
8838 var TypeScriptDocumentSymbolProvider = class {
8839   constructor(client) {
8840     this.client = client;
8841   }
8842   async provideDocumentSymbols(resource, token) {
8843     const filepath = this.client.toPath(resource.uri);
8844     if (!filepath)
8845       return [];
8846     const args = {
8847       file: filepath
8848     };
8849     try {
8850       const response = await this.client.execute("navtree", args, token);
8851       if (response.type == "response" && response.body) {
8852         const tree = response.body;
8853         if (tree.childItems) {
8854           const result = new Array();
8855           tree.childItems.forEach((item) => TypeScriptDocumentSymbolProvider.convertNavTree(result, item));
8856           return result;
8857         }
8858       }
8859       return [];
8860     } catch (e) {
8861       return [];
8862     }
8863   }
8864   static convertNavTree(output, item) {
8865     let shouldInclude = TypeScriptDocumentSymbolProvider.shouldInclueEntry(item);
8866     const children = new Set(item.childItems || []);
8867     for (const span of item.spans) {
8868       const range = Range2.fromTextSpan(span);
8869       const symbolInfo = TypeScriptDocumentSymbolProvider.convertSymbol(item, range);
8870       if (children.size)
8871         symbolInfo.children = [];
8872       for (const child of children) {
8873         if (child.spans.some((span2) => !!containsRange(range, Range2.fromTextSpan(span2)))) {
8874           const includedChild = TypeScriptDocumentSymbolProvider.convertNavTree(symbolInfo.children, child);
8875           shouldInclude = shouldInclude || includedChild;
8876           children.delete(child);
8877         }
8878       }
8879       if (shouldInclude) {
8880         output.push(symbolInfo);
8881       }
8882     }
8883     return shouldInclude;
8884   }
8885   static convertSymbol(item, range) {
8886     const selectionRange = item.nameSpan ? Range2.fromTextSpan(item.nameSpan) : range;
8887     let label = item.text;
8888     switch (item.kind) {
8889       case Kind.memberGetAccessor:
8890         label = `(get) ${label}`;
8891         break;
8892       case Kind.memberSetAccessor:
8893         label = `(set) ${label}`;
8894         break;
8895     }
8896     const symbolInfo = import_vscode_languageserver_protocol11.DocumentSymbol.create(label, "", getSymbolKind2(item.kind), range, containsRange(range, selectionRange) ? selectionRange : range);
8897     const kindModifiers = parseKindModifier3(item.kindModifiers);
8898     if (kindModifiers.has(KindModifiers.deprecated)) {
8899       symbolInfo.tags = [import_vscode_languageserver_protocol11.SymbolTag.Deprecated];
8900     }
8901     return symbolInfo;
8902   }
8903   static shouldInclueEntry(item) {
8904     if (item.kind === Kind.alias) {
8905       return false;
8906     }
8907     return !!(item.text && item.text !== "<function>" && item.text !== "<class>");
8908   }
8909 };
8910 var documentSymbol_default = TypeScriptDocumentSymbolProvider;
8911 function containsRange(range, otherRange) {
8912   if (otherRange.start.line < range.start.line || otherRange.end.line < range.start.line) {
8913     return false;
8914   }
8915   if (otherRange.start.line > range.end.line || otherRange.end.line > range.end.line) {
8916     return false;
8917   }
8918   if (otherRange.start.line === range.start.line && otherRange.start.character < range.start.character) {
8919     return false;
8920   }
8921   if (otherRange.end.line === range.end.line && otherRange.end.character > range.end.character) {
8922     return false;
8923   }
8924   return true;
8925 }
8926 function parseKindModifier3(kindModifiers) {
8927   return new Set(kindModifiers.split(/,|\s+/g));
8928 }
8929
8930 // src/server/features/folding.ts
8931 var import_coc11 = __toModule(require("coc.nvim"));
8932 var import_vscode_languageserver_types = __toModule(require_main2());
8933 var TypeScriptFoldingProvider = class {
8934   constructor(client) {
8935     this.client = client;
8936   }
8937   async provideFoldingRanges(document, _context, token) {
8938     const file2 = this.client.toPath(document.uri);
8939     if (!file2) {
8940       return;
8941     }
8942     const args = {file: file2};
8943     const res = await this.client.execute("getOutliningSpans", args, token);
8944     if (res.type != "response") {
8945       return;
8946     }
8947     const {body} = res;
8948     if (!body) {
8949       return;
8950     }
8951     return body.map((span) => this.convertOutliningSpan(span, document)).filter((foldingRange) => !!foldingRange);
8952   }
8953   convertOutliningSpan(span, document) {
8954     const range = Range2.fromTextSpan(span.textSpan);
8955     const kind = TypeScriptFoldingProvider.getFoldingRangeKind(span);
8956     if (span.kind === "comment") {
8957       let doc = import_coc11.workspace.getDocument(document.uri);
8958       const line = doc.getline(range.start.line);
8959       if (line.match(/\/\/\s*#endregion/gi)) {
8960         return void 0;
8961       }
8962     }
8963     let {start, end} = range;
8964     return import_vscode_languageserver_types.FoldingRange.create(start.line, end.line, start.character, end.character, kind);
8965   }
8966   static getFoldingRangeKind(span) {
8967     switch (span.kind) {
8968       case "comment":
8969       case "region":
8970       case "imports":
8971       case "code":
8972         return span.kind;
8973       default:
8974         return void 0;
8975     }
8976   }
8977 };
8978 var folding_default = TypeScriptFoldingProvider;
8979
8980 // src/server/features/formatting.ts
8981 var import_coc12 = __toModule(require("coc.nvim"));
8982 var TypeScriptFormattingProvider = class {
8983   constructor(client, formattingOptionsManager) {
8984     this.client = client;
8985     this.formattingOptionsManager = formattingOptionsManager;
8986   }
8987   enabled(document) {
8988     return this.formattingOptionsManager.formatEnabled(document);
8989   }
8990   async doFormat(document, options, args, token) {
8991     if (!this.enabled(document))
8992       return [];
8993     await this.formattingOptionsManager.ensureConfigurationOptions(document, options.insertSpaces, options.tabSize, token);
8994     try {
8995       const response = await this.client.execute("format", args, token);
8996       if (response.type == "response" && response.body) {
8997         let edits = response.body.map(TextEdit.fromCodeEdit);
8998         return edits;
8999       }
9000     } catch {
9001     }
9002     return [];
9003   }
9004   async provideDocumentRangeFormattingEdits(document, range, options, token) {
9005     if (!this.enabled(document))
9006       return [];
9007     const filepath = this.client.toPath(document.uri);
9008     if (!filepath)
9009       return [];
9010     const args = {
9011       file: filepath,
9012       line: range.start.line + 1,
9013       offset: range.start.character + 1,
9014       endLine: range.end.line + 1,
9015       endOffset: range.end.character + 1
9016     };
9017     return this.doFormat(document, options, args, token);
9018   }
9019   async provideDocumentFormattingEdits(document, options, token) {
9020     if (!this.enabled(document))
9021       return [];
9022     const filepath = this.client.toPath(document.uri);
9023     if (!filepath)
9024       return [];
9025     const args = {
9026       file: filepath,
9027       line: 1,
9028       offset: 1,
9029       endLine: document.lineCount + 1,
9030       endOffset: 1
9031     };
9032     return this.doFormat(document, options, args, token);
9033   }
9034   async provideOnTypeFormattingEdits(document, position, ch, options, token) {
9035     if (!this.enabled(document))
9036       return [];
9037     if (!this.client.configuration.formatOnType)
9038       return [];
9039     const file2 = this.client.toPath(document.uri);
9040     if (!file2)
9041       return [];
9042     await this.formattingOptionsManager.ensureConfigurationOptions(document, options.insertSpaces, options.tabSize, token);
9043     const doc = import_coc12.workspace.getDocument(document.uri);
9044     const args = {
9045       ...Position.toFileLocationRequestArgs(file2, position),
9046       key: ch
9047     };
9048     try {
9049       const res = await this.client.execute("formatonkey", args, token);
9050       if (res.type != "response") {
9051         return [];
9052       }
9053       const {body} = res;
9054       const edits = body;
9055       const result = [];
9056       if (!edits) {
9057         return result;
9058       }
9059       for (const edit of edits) {
9060         const textEdit = TextEdit.fromCodeEdit(edit);
9061         const range = textEdit.range;
9062         if (range.start.character === 0 && range.start.line === range.end.line && textEdit.newText === "") {
9063           const lText = doc.getline(range.start.line);
9064           if (lText.trim().length > 0 || lText.length > range.end.character) {
9065             result.push(textEdit);
9066           }
9067         } else {
9068           result.push(textEdit);
9069         }
9070       }
9071       return result;
9072     } catch {
9073     }
9074     return [];
9075   }
9076 };
9077 var formatting_default = TypeScriptFormattingProvider;
9078
9079 // src/server/features/hover.ts
9080 var TypeScriptHoverProvider = class {
9081   constructor(client) {
9082     this.client = client;
9083   }
9084   async provideHover(document, position, token) {
9085     const filepath = this.client.toPath(document.uri);
9086     if (!filepath) {
9087       return void 0;
9088     }
9089     const args = Position.toFileLocationRequestArgs(filepath, position);
9090     try {
9091       const response = await this.client.interruptGetErr(() => this.client.execute("quickinfo", args, token));
9092       if (response && response.type == "response" && response.body) {
9093         const data = response.body;
9094         return {
9095           contents: TypeScriptHoverProvider.getContents(data),
9096           range: Range2.fromTextSpan(data)
9097         };
9098       }
9099     } catch (e) {
9100     }
9101     return void 0;
9102   }
9103   static getContents(data) {
9104     const parts = [];
9105     if (data.displayString) {
9106       parts.push({language: "typescript", value: data.displayString});
9107     }
9108     const tags = tagsMarkdownPreview(data.tags);
9109     parts.push(data.documentation + (tags ? "\n\n" + tags : ""));
9110     return parts;
9111   }
9112 };
9113 var hover_default = TypeScriptHoverProvider;
9114
9115 // src/server/features/implementationsCodeLens.ts
9116 var TypeScriptImplementationsCodeLensProvider = class extends TypeScriptBaseCodeLensProvider {
9117   async resolveCodeLens(codeLens, token) {
9118     let {uri} = codeLens.data;
9119     let filepath = this.client.toPath(uri);
9120     const args = Position.toFileLocationRequestArgs(filepath, codeLens.range.start);
9121     try {
9122       const response = await this.client.execute("implementation", args, token, {lowPriority: true});
9123       if (response && response.type == "response" && response.body) {
9124         const locations = response.body.map((reference) => {
9125           return {
9126             uri: this.client.toResource(reference.file),
9127             range: {
9128               start: Position.fromLocation(reference.start),
9129               end: {
9130                 line: reference.start.line,
9131                 character: 0
9132               }
9133             }
9134           };
9135         }).filter((location) => !(location.uri.toString() === uri && location.range.start.line === codeLens.range.start.line && location.range.start.character === codeLens.range.start.character));
9136         codeLens.command = this.getCommand(locations, codeLens);
9137         return codeLens;
9138       }
9139     } catch {
9140     }
9141     codeLens.command = {
9142       title: "0 implementations",
9143       command: ""
9144     };
9145     return codeLens;
9146   }
9147   getCommand(locations, codeLens) {
9148     let {uri} = codeLens.data;
9149     return {
9150       title: this.getTitle(locations),
9151       command: locations.length ? "editor.action.showReferences" : "",
9152       arguments: [uri, codeLens.range.start, locations]
9153     };
9154   }
9155   getTitle(locations) {
9156     return locations.length === 1 ? "1 implementation" : `${locations.length} implementations`;
9157   }
9158   extractSymbol(document, item, _parent) {
9159     switch (item.kind) {
9160       case Kind.interface:
9161         return super.getSymbolRange(document, item);
9162       case Kind.class:
9163       case Kind.method:
9164       case Kind.memberVariable:
9165       case Kind.memberGetAccessor:
9166       case Kind.memberSetAccessor:
9167         if (item.kindModifiers.match(/\babstract\b/g)) {
9168           return super.getSymbolRange(document, item);
9169         }
9170         break;
9171     }
9172     return null;
9173   }
9174 };
9175 var implementationsCodeLens_default = TypeScriptImplementationsCodeLensProvider;
9176
9177 // src/server/features/importFix.ts
9178 var import_coc13 = __toModule(require("coc.nvim"));
9179 var import_vscode_languageserver_protocol12 = __toModule(require_main3());
9180
9181 // src/server/utils/helper.ts
9182 var nodeModules = [
9183   "assert",
9184   "cluster",
9185   "crypto",
9186   "dns",
9187   "domain",
9188   "events",
9189   "fs",
9190   "http",
9191   "http2",
9192   "https",
9193   "inspector",
9194   "net",
9195   "os",
9196   "path",
9197   "punycode",
9198   "querystring",
9199   "readline",
9200   "repl",
9201   "stream",
9202   "string_decoder",
9203   "tls",
9204   "tty",
9205   "url",
9206   "util",
9207   "v8",
9208   "vm",
9209   "zlib",
9210   "perf_hooks"
9211 ];
9212
9213 // src/server/features/importFix.ts
9214 var ImportFixProvider = class {
9215   constructor(bufferSyncSupport) {
9216     this.bufferSyncSupport = bufferSyncSupport;
9217   }
9218   async provideCodeActions(document, _range, context, _token) {
9219     if (this.bufferSyncSupport.hasPendingDiagnostics(document.uri)) {
9220       return [];
9221     }
9222     let diagnostics = context.diagnostics.filter((d) => d.code == 2304);
9223     if (!diagnostics.length)
9224       return [];
9225     let edits = [];
9226     let names = [];
9227     let doc = import_coc13.workspace.getDocument(document.uri);
9228     let command;
9229     for (const diagnostic of diagnostics) {
9230       let {range} = diagnostic;
9231       let line = doc.getline(range.start.line);
9232       let name = line.slice(range.start.character, range.end.character);
9233       if (names.indexOf(name) !== -1)
9234         continue;
9235       if (nodeModules.indexOf(name) !== -1) {
9236         names.push(name);
9237         edits.push({
9238           range: import_vscode_languageserver_protocol12.Range.create(0, 0, 0, 0),
9239           newText: `import ${name} from '${name}'
9240 `
9241         });
9242         command = "tsserver.organizeImports";
9243       }
9244     }
9245     let edit = {
9246       changes: {
9247         [document.uri]: edits
9248       }
9249     };
9250     let cmd = null;
9251     if (command)
9252       cmd = {
9253         title: `fix import`,
9254         command: "tsserver.organizeImports"
9255       };
9256     return [{
9257       title: `Add import ${names.join(", ")}`,
9258       edit,
9259       command: cmd
9260     }];
9261   }
9262 };
9263 var importFix_default = ImportFixProvider;
9264
9265 // src/server/features/moduleInstall.ts
9266 var import_coc15 = __toModule(require("coc.nvim"));
9267 var import_vscode_languageserver_protocol13 = __toModule(require_main3());
9268
9269 // src/server/utils/modules.ts
9270 var import_child_process = __toModule(require("child_process"));
9271 var import_coc14 = __toModule(require("coc.nvim"));
9272 var import_fs = __toModule(require("fs"));
9273 var import_path3 = __toModule(require("path"));
9274 function runCommand(cmd, cwd, timeout) {
9275   return new Promise((resolve, reject) => {
9276     let timer;
9277     if (timeout) {
9278       timer = setTimeout(() => {
9279         reject(new Error(`timeout after ${timeout}s`));
9280       }, timeout * 1e3);
9281     }
9282     import_child_process.exec(cmd, {cwd}, (err, stdout) => {
9283       if (timer)
9284         clearTimeout(timer);
9285       if (err) {
9286         reject(new Error(`exited with ${err.code}`));
9287         return;
9288       }
9289       resolve(stdout);
9290     });
9291   });
9292 }
9293 async function getManager() {
9294   let res = await import_coc14.workspace.findUp(["yarn.lock", "package-lock.json"]);
9295   if (!res)
9296     return "yarn";
9297   return res.endsWith("yarn.lock") ? "yarn" : "npm";
9298 }
9299 async function moduleExists(name) {
9300   try {
9301     let content = await runCommand(`npm info ${name} --json`, process.cwd());
9302     if (!content)
9303       return false;
9304     let obj = JSON.parse(content);
9305     if (obj.error != null)
9306       return false;
9307     return true;
9308   } catch (e) {
9309     return false;
9310   }
9311   return false;
9312 }
9313 function distinct(array, keyFn) {
9314   if (!keyFn) {
9315     return array.filter((element, position) => {
9316       return array.indexOf(element) === position;
9317     });
9318   }
9319   const seen = Object.create(null);
9320   return array.filter((elem) => {
9321     const key = keyFn(elem);
9322     if (seen[key]) {
9323       return false;
9324     }
9325     seen[key] = true;
9326     return true;
9327   });
9328 }
9329 async function installModules(uri, names) {
9330   names = distinct(names);
9331   let workspaceFolder = import_coc14.workspace.getWorkspaceFolder(uri);
9332   let root = workspaceFolder ? import_coc14.Uri.parse(workspaceFolder.uri).fsPath : void 0;
9333   if (!root || !import_fs.default.existsSync(import_path3.default.join(root, "package.json"))) {
9334     import_coc14.window.showMessage(`package.json not found from workspaceFolder: ${root}`, "error");
9335     return;
9336   }
9337   let arr = names.concat(names.map((s) => `@types/${s}`));
9338   let statusItem = import_coc14.window.createStatusBarItem(99, {progress: true});
9339   statusItem.text = `Checking module ${arr.join(" ")}`;
9340   statusItem.show();
9341   let exists = await Promise.all(arr.map((name) => {
9342     return moduleExists(name).then((exists2) => {
9343       return exists2 ? name : null;
9344     });
9345   }));
9346   let manager = await getManager();
9347   exists = exists.filter((s) => s != null);
9348   if (!exists.length)
9349     return;
9350   let devs = exists.filter((s) => s.startsWith("@types"));
9351   let deps = exists.filter((s) => devs.indexOf(s) == -1);
9352   statusItem.text = `Installing ${exists.join(" ")}`;
9353   try {
9354     let cmd = manager == "npm" ? `npm i ${deps.join(" ")}` : `yarn add ${deps.join(" ")}`;
9355     await runCommand(cmd, root);
9356     cmd = manager == "npm" ? `npm i ${deps.join(" ")} --save-dev` : `yarn add ${deps.join(" ")} --save-dev`;
9357     await runCommand(cmd, root);
9358   } catch (e) {
9359     statusItem.dispose();
9360     import_coc14.window.showMessage(`Install error ${e.message}`, "error");
9361     return;
9362   }
9363   statusItem.dispose();
9364   import_coc14.window.showMessage(`Installed: ${exists.join(" ")}`, "more");
9365 }
9366
9367 // src/server/features/moduleInstall.ts
9368 var InstallModuleProvider = class {
9369   constructor(client) {
9370     this.client = client;
9371     import_coc15.commands.registerCommand("_tsserver.installModule", async (uri, name) => {
9372       await installModules(uri, [name]);
9373     });
9374   }
9375   async provideCodeActions(document, _range, context, _token) {
9376     const uri = import_coc15.Uri.parse(document.uri);
9377     if (uri.scheme != "file")
9378       return null;
9379     let {diagnostics} = context;
9380     let diags = diagnostics.filter((s) => s.code == 2307);
9381     let names = diags.map((o) => {
9382       let ms = o.message.match(/module\s'(.+)'/);
9383       return ms ? ms[1] : null;
9384     });
9385     names = names.filter((s) => s != null);
9386     if (!names.length)
9387       return null;
9388     let actions = [];
9389     for (let name of names) {
9390       let title = `install ${name}`;
9391       let command = {
9392         title: `install ${name}`,
9393         command: "_tsserver.installModule",
9394         arguments: [document.uri, name]
9395       };
9396       let codeAction = import_vscode_languageserver_protocol13.CodeAction.create(title, command, import_vscode_languageserver_protocol13.CodeActionKind.QuickFix);
9397       actions.push(codeAction);
9398     }
9399     return actions;
9400   }
9401 };
9402 var moduleInstall_default = InstallModuleProvider;
9403
9404 // src/server/features/quickfix.ts
9405 var import_coc17 = __toModule(require("coc.nvim"));
9406 var import_vscode_languageserver_protocol14 = __toModule(require_main3());
9407
9408 // src/server/commands.ts
9409 var import_coc16 = __toModule(require("coc.nvim"));
9410 var import_vscode_languageserver_types2 = __toModule(require_main2());
9411 var ReloadProjectsCommand = class {
9412   constructor(service) {
9413     this.service = service;
9414     this.id = "tsserver.reloadProjects";
9415   }
9416   async execute() {
9417     let client = await this.service.getClientHost();
9418     client.reloadProjects();
9419     import_coc16.window.showMessage("projects reloaded");
9420   }
9421 };
9422 var OpenTsServerLogCommand = class {
9423   constructor(service) {
9424     this.service = service;
9425     this.id = "tsserver.openTsServerLog";
9426   }
9427   async execute() {
9428     let client = await this.service.getClientHost();
9429     client.serviceClient.openTsServerLogFile();
9430   }
9431 };
9432 var TypeScriptGoToProjectConfigCommand = class {
9433   constructor(service) {
9434     this.service = service;
9435     this.id = "tsserver.goToProjectConfig";
9436   }
9437   async execute() {
9438     let client = await this.service.getClientHost();
9439     let doc = await import_coc16.workspace.document;
9440     let {languageId} = doc.textDocument;
9441     if (client.serviceClient.modeIds.indexOf(languageId) == -1) {
9442       throw new Error(`Could not determine TypeScript or JavaScript project. Unsupported file type: ${languageId}`);
9443       return;
9444     }
9445     await goToProjectConfig(client, doc.uri);
9446   }
9447 };
9448 async function goToProjectConfig(clientHost, uri) {
9449   const client = clientHost.serviceClient;
9450   const file2 = client.toPath(uri);
9451   let res;
9452   try {
9453     res = await client.execute("projectInfo", {file: file2, needFileNameList: false}, import_coc16.CancellationToken.None);
9454   } catch {
9455   }
9456   if (!res || !res.body) {
9457     import_coc16.window.showMessage("Could not determine TypeScript or JavaScript project.", "warning");
9458     return;
9459   }
9460   const {configFileName} = res.body;
9461   if (configFileName && !isImplicitProjectConfigFile(configFileName)) {
9462     await import_coc16.workspace.openResource(import_coc16.Uri.file(configFileName).toString());
9463     return;
9464   }
9465   import_coc16.window.showMessage("Config file not found", "warning");
9466 }
9467 function isImplicitProjectConfigFile(configFileName) {
9468   return configFileName.indexOf("/dev/null/") === 0;
9469 }
9470 var autoFixableDiagnosticCodes = new Set([
9471   2420,
9472   2552,
9473   2304
9474 ]);
9475 var AutoFixCommand = class {
9476   constructor(service) {
9477     this.service = service;
9478     this.id = "tsserver.executeAutofix";
9479   }
9480   async execute() {
9481     if (this.service.state != import_coc16.ServiceStat.Running) {
9482       throw new Error("service not running");
9483       return;
9484     }
9485     let client = await this.service.getClientHost();
9486     let document = await import_coc16.workspace.document;
9487     let handles = await client.handles(document.textDocument);
9488     if (!handles) {
9489       throw new Error(`Document ${document.uri} is not handled by tsserver.`);
9490       return;
9491     }
9492     let file2 = client.serviceClient.toPath(document.uri);
9493     let diagnostics = client.serviceClient.diagnosticsManager.getDiagnostics(document.uri);
9494     let missingDiagnostics = diagnostics.filter((o) => o.code == 2307);
9495     if (missingDiagnostics.length) {
9496       let names2 = missingDiagnostics.map((o) => {
9497         let ms = o.message.match(/module\s'(.+)'\./);
9498         return ms ? ms[1] : null;
9499       });
9500       names2 = names2.filter((s) => s != null);
9501       if (names2.length) {
9502         installModules(document.uri, names2).catch((e) => {
9503           console.error(e.message);
9504         });
9505       }
9506     }
9507     diagnostics = diagnostics.filter((x) => autoFixableDiagnosticCodes.has(x.code));
9508     if (diagnostics.length == 0)
9509       return;
9510     diagnostics = diagnostics.reduce((arr, curr) => {
9511       if (curr.code == 2304 && arr.findIndex((o) => o.message == curr.message) != -1)
9512         return arr;
9513       arr.push(curr);
9514       return arr;
9515     }, []);
9516     let edits = [];
9517     let command;
9518     let names = [];
9519     for (let diagnostic of diagnostics) {
9520       const args = {
9521         ...Range2.toFileRangeRequestArgs(file2, diagnostic.range),
9522         errorCodes: [+diagnostic.code]
9523       };
9524       const response = await client.serviceClient.execute("getCodeFixes", args, import_coc16.CancellationToken.None);
9525       if (response.type !== "response" || !response.body || response.body.length < 1) {
9526         if (diagnostic.code == 2304) {
9527           let {range} = diagnostic;
9528           let line = document.getline(range.start.line);
9529           let name = line.slice(range.start.character, range.end.character);
9530           if (nodeModules.indexOf(name) !== -1 && names.indexOf(name) == -1) {
9531             names.push(name);
9532             edits.push({
9533               range: import_vscode_languageserver_types2.Range.create(0, 0, 0, 0),
9534               newText: `import ${name} from '${name}'
9535 `
9536             });
9537             command = "tsserver.organizeImports";
9538           }
9539         }
9540         continue;
9541       }
9542       const fix = response.body[0];
9543       for (let change of fix.changes) {
9544         if (change.fileName != file2)
9545           continue;
9546         for (let ch of change.textChanges) {
9547           edits.push({
9548             range: Range2.fromTextSpan(ch),
9549             newText: ch.newText
9550           });
9551         }
9552       }
9553     }
9554     if (edits.length)
9555       await document.applyEdits(edits);
9556     if (command)
9557       import_coc16.commands.executeCommand(command);
9558   }
9559 };
9560 var ConfigurePluginCommand = class {
9561   constructor(pluginManager) {
9562     this.pluginManager = pluginManager;
9563     this.id = "_typescript.configurePlugin";
9564   }
9565   execute(pluginId, configuration) {
9566     this.pluginManager.setConfiguration(pluginId, configuration);
9567   }
9568 };
9569 var FileReferencesCommand2 = class {
9570   constructor(service) {
9571     this.service = service;
9572     this.id = "tsserver.findAllFileReferences";
9573   }
9574   async execute() {
9575     const client = await this.service.getClientHost();
9576     if (client.serviceClient.apiVersion.lt(FileReferencesCommand2.minVersion)) {
9577       import_coc16.window.showMessage("Find file references failed. Requires TypeScript 4.2+.", "error");
9578       return;
9579     }
9580     const doc = await import_coc16.workspace.document;
9581     let {languageId} = doc.textDocument;
9582     if (client.serviceClient.modeIds.indexOf(languageId) == -1)
9583       return;
9584     const openedFiledPath = client.serviceClient.toOpenedFilePath(doc.uri);
9585     if (!openedFiledPath)
9586       return;
9587     const response = await client.serviceClient.execute("fileReferences", {file: openedFiledPath}, import_coc16.CancellationToken.None);
9588     if (response.type !== "response" || !response.body)
9589       return;
9590     const locations = response.body.refs.map((r) => Location2.fromTextSpan(client.serviceClient.toResource(r.file), r));
9591     await import_coc16.commands.executeCommand("editor.action.showReferences", doc.uri, import_vscode_languageserver_types2.Position.create(0, 0), locations);
9592   }
9593 };
9594 var FileReferencesCommand = FileReferencesCommand2;
9595 FileReferencesCommand.minVersion = api_default.v420;
9596 function registCommand(cmd) {
9597   let {id, execute} = cmd;
9598   return import_coc16.commands.registerCommand(id, execute, cmd);
9599 }
9600
9601 // src/server/features/quickfix.ts
9602 var ApplyCodeActionCommand2 = class {
9603   constructor(client, formattingConfigurationManager) {
9604     this.client = client;
9605     this.formattingConfigurationManager = formattingConfigurationManager;
9606     this.id = ApplyCodeActionCommand2.ID;
9607   }
9608   async execute(action) {
9609     return applyCodeActionCommands(this.client, action);
9610   }
9611 };
9612 var ApplyCodeActionCommand = ApplyCodeActionCommand2;
9613 ApplyCodeActionCommand.ID = "_typescript.applyCodeActionCommand";
9614 var ApplyFixAllCodeAction2 = class {
9615   constructor(client, formattingConfigurationManager) {
9616     this.client = client;
9617     this.formattingConfigurationManager = formattingConfigurationManager;
9618     this.id = ApplyFixAllCodeAction2.ID;
9619   }
9620   async execute(document, file2, tsAction) {
9621     if (!tsAction.fixId) {
9622       return;
9623     }
9624     await this.formattingConfigurationManager.ensureConfigurationForDocument(document, import_vscode_languageserver_protocol14.CancellationToken.None);
9625     const args = {
9626       scope: {
9627         type: "file",
9628         args: {file: file2}
9629       },
9630       fixId: tsAction.fixId
9631     };
9632     try {
9633       const res = await this.client.execute("getCombinedCodeFix", args, import_vscode_languageserver_protocol14.CancellationToken.None);
9634       if (res.type != "response") {
9635         return;
9636       }
9637       let {body} = res;
9638       const edit = WorkspaceEdit.fromFileCodeEdits(this.client, body.changes);
9639       await import_coc17.workspace.applyEdit(edit);
9640       const token = import_vscode_languageserver_protocol14.CancellationToken.None;
9641       const {commands: commands7} = body;
9642       if (commands7 && commands7.length) {
9643         for (const command of commands7) {
9644           await this.client.execute("applyCodeActionCommand", {command}, token);
9645         }
9646       }
9647     } catch {
9648     }
9649   }
9650 };
9651 var ApplyFixAllCodeAction = ApplyFixAllCodeAction2;
9652 ApplyFixAllCodeAction.ID = "_typescript.applyFixAllCodeAction";
9653 var DiagnosticsSet = class {
9654   constructor(_values) {
9655     this._values = _values;
9656   }
9657   static from(diagnostics) {
9658     const values = new Map();
9659     for (const diagnostic of diagnostics) {
9660       values.set(DiagnosticsSet.key(diagnostic), diagnostic);
9661     }
9662     return new DiagnosticsSet(values);
9663   }
9664   static key(diagnostic) {
9665     const {start, end} = diagnostic.range;
9666     return `${diagnostic.code}-${start.line},${start.character}-${end.line},${end.character}`;
9667   }
9668   get values() {
9669     return this._values.values();
9670   }
9671 };
9672 var SupportedCodeActionProvider = class {
9673   constructor(client) {
9674     this.client = client;
9675   }
9676   async getFixableDiagnosticsForContext(context) {
9677     const supportedActions = await this.supportedCodeActions;
9678     const fixableDiagnostics = DiagnosticsSet.from(context.diagnostics.filter((diagnostic) => supportedActions.has(+diagnostic.code)));
9679     return Array.from(fixableDiagnostics.values);
9680   }
9681   get supportedCodeActions() {
9682     if (!this._supportedCodeActions) {
9683       return new Promise((resolve, reject) => {
9684         this.client.execute("getSupportedCodeFixes", null, import_vscode_languageserver_protocol14.CancellationToken.None).then((res) => {
9685           if (res.type !== "response") {
9686             resolve(new Set());
9687             return;
9688           }
9689           let codes = res.body.map((code) => +code).filter((code) => !isNaN(code));
9690           resolve(new Set(codes));
9691         }, reject);
9692       });
9693     }
9694     return Promise.resolve(this._supportedCodeActions);
9695   }
9696 };
9697 var TypeScriptQuickFixProvider = class {
9698   constructor(client, formattingConfigurationManager) {
9699     this.client = client;
9700     this.formattingConfigurationManager = formattingConfigurationManager;
9701     registCommand(new ApplyCodeActionCommand(client, formattingConfigurationManager));
9702     registCommand(new ApplyFixAllCodeAction(client, formattingConfigurationManager));
9703     this.supportedCodeActionProvider = new SupportedCodeActionProvider(client);
9704   }
9705   async provideCodeActions(document, _range, context, token) {
9706     const file2 = this.client.toPath(document.uri);
9707     if (!file2) {
9708       return [];
9709     }
9710     await this.formattingConfigurationManager.ensureConfigurationForDocument(document, token);
9711     const fixableDiagnostics = await this.supportedCodeActionProvider.getFixableDiagnosticsForContext(context);
9712     if (!fixableDiagnostics.length) {
9713       return [];
9714     }
9715     if (this.client.bufferSyncSupport.hasPendingDiagnostics(document.uri)) {
9716       return [];
9717     }
9718     const results = [];
9719     for (const diagnostic of fixableDiagnostics) {
9720       results.push(...await this.getFixesForDiagnostic(document, file2, diagnostic, token));
9721     }
9722     return results;
9723   }
9724   async getFixesForDiagnostic(document, file2, diagnostic, token) {
9725     const args = {
9726       ...Range2.toFileRangeRequestArgs(file2, diagnostic.range),
9727       errorCodes: [+diagnostic.code]
9728     };
9729     const codeFixesResponse = await this.client.execute("getCodeFixes", args, token);
9730     if (codeFixesResponse.type != "response") {
9731       return [];
9732     }
9733     if (codeFixesResponse.body) {
9734       const results = [];
9735       for (const tsCodeFix of codeFixesResponse.body) {
9736         results.push(...await this.getAllFixesForTsCodeAction(document, file2, diagnostic, tsCodeFix));
9737       }
9738       return results;
9739     }
9740     return [];
9741   }
9742   async getAllFixesForTsCodeAction(document, file2, diagnostic, tsAction) {
9743     const singleFix = this.getSingleFixForTsCodeAction(diagnostic, tsAction);
9744     const fixAll = await this.getFixAllForTsCodeAction(document, file2, diagnostic, tsAction);
9745     return fixAll ? [singleFix, fixAll] : [singleFix];
9746   }
9747   getSingleFixForTsCodeAction(diagnostic, tsAction) {
9748     const codeAction = {
9749       title: tsAction.description,
9750       kind: import_vscode_languageserver_protocol14.CodeActionKind.QuickFix
9751     };
9752     codeAction.edit = getEditForCodeAction(this.client, tsAction);
9753     codeAction.diagnostics = [diagnostic];
9754     codeAction.isPreferred = true;
9755     if (tsAction.commands) {
9756       codeAction.command = {
9757         command: ApplyCodeActionCommand.ID,
9758         arguments: [tsAction],
9759         title: tsAction.description
9760       };
9761     }
9762     return codeAction;
9763   }
9764   async getFixAllForTsCodeAction(document, file2, diagnostic, tsAction) {
9765     if (!tsAction.fixId || !this.client.apiVersion.gte(api_default.v270)) {
9766       return void 0;
9767     }
9768     if (!this.client.diagnosticsManager.getDiagnostics(document.uri).some((x) => x.code === diagnostic.code && x !== diagnostic)) {
9769       return;
9770     }
9771     const action = {
9772       title: tsAction.fixAllDescription || "Fix all in file",
9773       kind: import_vscode_languageserver_protocol14.CodeActionKind.QuickFix
9774     };
9775     action.diagnostics = [diagnostic];
9776     action.command = {
9777       command: ApplyFixAllCodeAction.ID,
9778       arguments: [document, file2, tsAction],
9779       title: ""
9780     };
9781     return action;
9782   }
9783 };
9784 var quickfix_default = TypeScriptQuickFixProvider;
9785
9786 // src/server/features/refactor.ts
9787 var import_coc18 = __toModule(require("coc.nvim"));
9788 var import_vscode_languageserver_protocol15 = __toModule(require_main3());
9789 var ApplyRefactoringCommand2 = class {
9790   constructor(client) {
9791     this.client = client;
9792     this.id = ApplyRefactoringCommand2.ID;
9793   }
9794   async execute(document, file2, refactor, action, range) {
9795     const args = {
9796       ...Range2.toFileRangeRequestArgs(file2, range),
9797       refactor,
9798       action
9799     };
9800     const response = await this.client.execute("getEditsForRefactor", args, import_vscode_languageserver_protocol15.CancellationToken.None);
9801     const body = response && response.body;
9802     if (!body || !body.edits.length) {
9803       return false;
9804     }
9805     const workspaceEdit = await this.toWorkspaceEdit(body);
9806     if (!await import_coc18.workspace.applyEdit(workspaceEdit)) {
9807       return false;
9808     }
9809     const renameLocation = body.renameLocation;
9810     if (renameLocation) {
9811       import_coc18.commands.executeCommand("editor.action.rename", document.uri, Position.fromLocation(renameLocation));
9812     }
9813     return true;
9814   }
9815   async toWorkspaceEdit(body) {
9816     for (const edit of body.edits) {
9817       await import_coc18.workspace.createFile(edit.fileName, {ignoreIfExists: true});
9818     }
9819     let workspaceEdit = WorkspaceEdit.fromFileCodeEdits(this.client, body.edits);
9820     return workspaceEdit;
9821   }
9822 };
9823 var ApplyRefactoringCommand = ApplyRefactoringCommand2;
9824 ApplyRefactoringCommand.ID = "_typescript.applyRefactoring";
9825 var SelectRefactorCommand2 = class {
9826   constructor(doRefactoring) {
9827     this.doRefactoring = doRefactoring;
9828     this.id = SelectRefactorCommand2.ID;
9829   }
9830   async execute(document, file2, info, range) {
9831     let {actions} = info;
9832     const idx = actions.length == 1 ? 0 : await import_coc18.window.showQuickpick(actions.map((action) => action.description || action.name));
9833     if (idx == -1)
9834       return false;
9835     let label = info.actions[idx].name;
9836     if (!label)
9837       return false;
9838     return this.doRefactoring.execute(document, file2, info.name, label, range);
9839   }
9840 };
9841 var SelectRefactorCommand = SelectRefactorCommand2;
9842 SelectRefactorCommand.ID = "_typescript.selectRefactoring";
9843 var TypeScriptRefactorProvider2 = class {
9844   constructor(client, formattingOptionsManager) {
9845     this.client = client;
9846     this.formattingOptionsManager = formattingOptionsManager;
9847     const doRefactoringCommand = new ApplyRefactoringCommand(this.client);
9848     registCommand(doRefactoringCommand);
9849     registCommand(new SelectRefactorCommand(doRefactoringCommand));
9850   }
9851   async provideCodeActions(document, range, context, token) {
9852     if (!this.shouldTrigger(context)) {
9853       return void 0;
9854     }
9855     const file2 = this.client.toPath(document.uri);
9856     if (!file2)
9857       return void 0;
9858     await this.formattingOptionsManager.ensureConfigurationForDocument(document, token);
9859     const args = Range2.toFileRangeRequestArgs(file2, range);
9860     let response;
9861     try {
9862       response = await this.client.interruptGetErr(() => {
9863         return this.client.execute("getApplicableRefactors", args, token);
9864       });
9865       if (!response || !response.body) {
9866         return void 0;
9867       }
9868     } catch {
9869       return void 0;
9870     }
9871     return this.convertApplicableRefactors(response.body, document, file2, range, context.only && context.only.some((v) => v.includes(import_vscode_languageserver_protocol15.CodeActionKind.Refactor)));
9872   }
9873   convertApplicableRefactors(body, document, file2, rangeOrSelection, setPrefrred) {
9874     const actions = [];
9875     for (const info of body) {
9876       if (info.notApplicableReason)
9877         continue;
9878       if (!info.inlineable) {
9879         const codeAction = {
9880           title: info.description,
9881           kind: import_vscode_languageserver_protocol15.CodeActionKind.Refactor
9882         };
9883         codeAction.command = {
9884           title: info.description,
9885           command: SelectRefactorCommand.ID,
9886           arguments: [document, file2, info, rangeOrSelection]
9887         };
9888         actions.push(codeAction);
9889       } else {
9890         for (const action of info.actions) {
9891           let codeAction = this.refactorActionToCodeAction(action, document, file2, info, rangeOrSelection);
9892           if (setPrefrred) {
9893             codeAction.isPreferred = TypeScriptRefactorProvider2.isPreferred(action, info.actions);
9894           }
9895           actions.push(codeAction);
9896         }
9897       }
9898     }
9899     return actions;
9900   }
9901   refactorActionToCodeAction(action, document, file2, info, rangeOrSelection) {
9902     const codeAction = {
9903       title: action.description,
9904       kind: TypeScriptRefactorProvider2.getKind(action)
9905     };
9906     codeAction.command = {
9907       title: action.description,
9908       command: ApplyRefactoringCommand.ID,
9909       arguments: [document, file2, info.name, action.name, rangeOrSelection]
9910     };
9911     return codeAction;
9912   }
9913   shouldTrigger(context) {
9914     if (context.only && context.only.every((o) => !o.includes(import_vscode_languageserver_protocol15.CodeActionKind.Refactor))) {
9915       return false;
9916     }
9917     return true;
9918   }
9919   static getKind(refactor) {
9920     if (refactor.name.startsWith("function_")) {
9921       return TypeScriptRefactorProvider2.extractFunctionKind;
9922     } else if (refactor.name.startsWith("constant_")) {
9923       return TypeScriptRefactorProvider2.extractConstantKind;
9924     } else if (refactor.name.startsWith("Move")) {
9925       return TypeScriptRefactorProvider2.moveKind;
9926     }
9927     return import_vscode_languageserver_protocol15.CodeActionKind.Refactor;
9928   }
9929   static isPreferred(action, allActions) {
9930     let kind = TypeScriptRefactorProvider2.getKind(action);
9931     if (TypeScriptRefactorProvider2.extractConstantKind == kind) {
9932       const getScope = (name2) => {
9933         var _a;
9934         const scope2 = (_a = name2.match(/scope_(\d)/)) == null ? void 0 : _a[1];
9935         return scope2 ? +scope2 : void 0;
9936       };
9937       const scope = getScope(action.name);
9938       if (typeof scope !== "number") {
9939         return false;
9940       }
9941       return allActions.filter((otherAtion) => otherAtion !== action && otherAtion.name.startsWith("constant_")).every((otherAction) => {
9942         const otherScope = getScope(otherAction.name);
9943         return typeof otherScope === "number" ? scope < otherScope : true;
9944       });
9945     }
9946     let {name} = action;
9947     if (name.startsWith("Extract to type alias") || name.startsWith("Extract to interface")) {
9948       return true;
9949     }
9950     return false;
9951   }
9952 };
9953 var TypeScriptRefactorProvider = TypeScriptRefactorProvider2;
9954 TypeScriptRefactorProvider.extractFunctionKind = import_vscode_languageserver_protocol15.CodeActionKind.RefactorExtract + ".function";
9955 TypeScriptRefactorProvider.extractConstantKind = import_vscode_languageserver_protocol15.CodeActionKind.RefactorExtract + ".constant";
9956 TypeScriptRefactorProvider.moveKind = import_vscode_languageserver_protocol15.CodeActionKind.Refactor + ".move";
9957 TypeScriptRefactorProvider.metadata = {
9958   providedCodeActionKinds: [import_vscode_languageserver_protocol15.CodeActionKind.Refactor]
9959 };
9960 var refactor_default = TypeScriptRefactorProvider;
9961
9962 // src/server/features/references.ts
9963 var TypeScriptReferences = class {
9964   constructor(client) {
9965     this.client = client;
9966   }
9967   async provideReferences(document, position, context, token) {
9968     const filepath = this.client.toPath(document.uri);
9969     if (!filepath)
9970       return [];
9971     const args = Position.toFileLocationRequestArgs(filepath, position);
9972     try {
9973       const msg = await this.client.execute("references", args, token);
9974       if (!msg || msg.type != "response" || !msg.body) {
9975         return [];
9976       }
9977       const result = [];
9978       for (const ref of msg.body.refs) {
9979         if (!context.includeDeclaration && ref.isDefinition) {
9980           continue;
9981         }
9982         const url = this.client.toResource(ref.file);
9983         const location = Location2.fromTextSpan(url, ref);
9984         result.push(location);
9985       }
9986       return result;
9987     } catch {
9988       return [];
9989     }
9990   }
9991 };
9992 var references_default = TypeScriptReferences;
9993
9994 // src/server/features/referencesCodeLens.ts
9995 var TypeScriptReferencesCodeLensProvider = class extends TypeScriptBaseCodeLensProvider {
9996   resolveCodeLens(codeLens, token) {
9997     let {uri} = codeLens.data;
9998     let filepath = this.client.toPath(uri);
9999     const args = Position.toFileLocationRequestArgs(filepath, codeLens.range.start);
10000     return this.client.execute("references", args, token, {
10001       lowPriority: true
10002     }).then((response) => {
10003       if (!response || response.type != "response" || !response.body) {
10004         throw codeLens;
10005       }
10006       const locations = response.body.refs.map((reference) => Location2.fromTextSpan(this.client.toResource(reference.file), reference)).filter((location) => !(location.uri.toString() === uri && location.range.start.line === codeLens.range.start.line && location.range.start.character === codeLens.range.start.character));
10007       codeLens.command = {
10008         title: locations.length === 1 ? "1 reference" : `${locations.length} references`,
10009         command: locations.length ? "editor.action.showReferences" : "",
10010         arguments: [uri, codeLens.range.start, locations]
10011       };
10012       return codeLens;
10013     }).catch(() => {
10014       codeLens.command = {
10015         title: "0 references",
10016         command: ""
10017       };
10018       return codeLens;
10019     });
10020   }
10021   extractSymbol(document, item, parent) {
10022     if (parent && parent.kind === Kind.enum) {
10023       return super.getSymbolRange(document, item);
10024     }
10025     switch (item.kind) {
10026       case Kind.const:
10027       case Kind.let:
10028       case Kind.variable:
10029       case Kind.function:
10030         if (!item.kindModifiers.match(/\bexport\b/)) {
10031           break;
10032         }
10033       case Kind.class:
10034         if (item.text === "<class>") {
10035           break;
10036         }
10037       case Kind.method:
10038       case Kind.memberVariable:
10039       case Kind.memberGetAccessor:
10040       case Kind.memberSetAccessor:
10041       case Kind.constructorImplementation:
10042       case Kind.interface:
10043       case Kind.type:
10044       case Kind.enum:
10045         return super.getSymbolRange(document, item);
10046     }
10047     return null;
10048   }
10049 };
10050 var referencesCodeLens_default = TypeScriptReferencesCodeLensProvider;
10051
10052 // src/server/features/rename.ts
10053 var import_coc19 = __toModule(require("coc.nvim"));
10054 var import_path4 = __toModule(require("path"));
10055 var TypeScriptRenameProvider = class {
10056   constructor(client, fileConfigurationManager) {
10057     this.client = client;
10058     this.fileConfigurationManager = fileConfigurationManager;
10059   }
10060   async prepareRename(document, position, token) {
10061     const response = await this.execRename(document, position, token);
10062     if (!response || response.type !== "response" || !response.body) {
10063       return null;
10064     }
10065     const renameInfo = response.body.info;
10066     if (!renameInfo.canRename) {
10067       return Promise.reject(new Error("Invalid location for rename."));
10068     }
10069     if (this.client.apiVersion.gte(api_default.v310)) {
10070       const triggerSpan = renameInfo.triggerSpan;
10071       if (triggerSpan) {
10072         const range = Range2.fromTextSpan(triggerSpan);
10073         return range;
10074       }
10075     }
10076     return null;
10077   }
10078   async provideRenameEdits(document, position, newName, token) {
10079     const response = await this.execRename(document, position, token);
10080     if (!response || response.type !== "response" || !response.body) {
10081       return null;
10082     }
10083     const renameInfo = response.body.info;
10084     if (!renameInfo.canRename) {
10085       return Promise.reject(new Error("Invalid location for rename."));
10086     }
10087     if (this.client.apiVersion.gte(api_default.v310)) {
10088       if (renameInfo.fileToRename) {
10089         const edits = await this.renameFile(renameInfo.fileToRename, newName, token);
10090         if (edits) {
10091           return edits;
10092         } else {
10093           return Promise.reject(new Error("An error occurred while renaming file"));
10094         }
10095       }
10096     }
10097     return this.toWorkspaceEdit(response.body.locs, newName);
10098   }
10099   async execRename(document, position, token) {
10100     const file2 = this.client.toPath(document.uri);
10101     if (!file2)
10102       return void 0;
10103     const args = {
10104       ...Position.toFileLocationRequestArgs(file2, position),
10105       findInStrings: false,
10106       findInComments: false
10107     };
10108     await this.fileConfigurationManager.ensureConfigurationForDocument(document, token);
10109     return this.client.interruptGetErr(() => {
10110       return this.client.execute("rename", args, token);
10111     });
10112   }
10113   toWorkspaceEdit(locations, newName) {
10114     let changes = {};
10115     for (const spanGroup of locations) {
10116       const uri = this.client.toResource(spanGroup.file);
10117       if (uri) {
10118         changes[uri] = [];
10119         for (const textSpan of spanGroup.locs) {
10120           changes[uri].push({
10121             range: Range2.fromTextSpan(textSpan),
10122             newText: (textSpan.prefixText || "") + newName + (textSpan.suffixText || "")
10123           });
10124         }
10125       }
10126     }
10127     return {changes};
10128   }
10129   async renameFile(fileToRename, newName, token) {
10130     if (!import_path4.default.extname(newName)) {
10131       newName += import_path4.default.extname(fileToRename);
10132     }
10133     const dirname = import_path4.default.dirname(fileToRename);
10134     const newFilePath = import_path4.default.join(dirname, newName);
10135     const args = {
10136       file: fileToRename,
10137       oldFilePath: fileToRename,
10138       newFilePath
10139     };
10140     const response = await this.client.execute("getEditsForFileRename", args, token);
10141     if (response.type !== "response" || !response.body) {
10142       return void 0;
10143     }
10144     const edits = WorkspaceEdit.fromFileCodeEdits(this.client, response.body);
10145     edits.documentChanges = edits.documentChanges || [];
10146     edits.documentChanges.push({
10147       kind: "rename",
10148       oldUri: import_coc19.Uri.file(fileToRename).toString(),
10149       newUri: import_coc19.Uri.file(newFilePath).toString(),
10150       options: {
10151         overwrite: false,
10152         ignoreIfExists: true
10153       }
10154     });
10155     return edits;
10156   }
10157 };
10158 var rename_default = TypeScriptRenameProvider;
10159
10160 // src/server/features/signatureHelp.ts
10161 var TypeScriptSignatureHelpProvider = class {
10162   constructor(client) {
10163     this.client = client;
10164   }
10165   async provideSignatureHelp(document, position, token) {
10166     const filepath = this.client.toPath(document.uri);
10167     if (!filepath) {
10168       return void 0;
10169     }
10170     const args = Position.toFileLocationRequestArgs(filepath, position);
10171     let response;
10172     try {
10173       response = await this.client.interruptGetErr(() => this.client.execute("signatureHelp", args, token));
10174     } catch (e) {
10175       return void 0;
10176     }
10177     if (response.type !== "response" || !response.body) {
10178       return void 0;
10179     }
10180     let info = response.body;
10181     const result = {
10182       activeSignature: info.selectedItemIndex,
10183       activeParameter: this.getActiveParmeter(info),
10184       signatures: info.items.map((signature) => {
10185         return this.convertSignature(signature);
10186       })
10187     };
10188     return result;
10189   }
10190   getActiveParmeter(info) {
10191     const activeSignature = info.items[info.selectedItemIndex];
10192     if (activeSignature && activeSignature.isVariadic) {
10193       return Math.min(info.argumentIndex, activeSignature.parameters.length - 1);
10194     }
10195     return info.argumentIndex;
10196   }
10197   convertSignature(item) {
10198     var _a;
10199     let parameters = item.parameters.map((p) => {
10200       return {
10201         label: plain(p.displayParts),
10202         documentation: markdownDocumentation(p.documentation, [])
10203       };
10204     });
10205     let label = plain(item.prefixDisplayParts);
10206     label += parameters.map((parameter) => parameter.label).join(plain(item.separatorDisplayParts));
10207     label += plain(item.suffixDisplayParts);
10208     return {
10209       label,
10210       documentation: markdownDocumentation(item.documentation, (_a = item.tags) == null ? void 0 : _a.filter((x) => x.name !== "param")),
10211       parameters
10212     };
10213   }
10214 };
10215 TypeScriptSignatureHelpProvider.triggerCharacters = ["(", ",", "<"];
10216 var signatureHelp_default = TypeScriptSignatureHelpProvider;
10217
10218 // src/server/features/smartSelect.ts
10219 var SmartSelection = class {
10220   constructor(client) {
10221     this.client = client;
10222   }
10223   async provideSelectionRanges(document, positions, token) {
10224     const file2 = this.client.toPath(document.uri);
10225     if (!file2) {
10226       return void 0;
10227     }
10228     const args = {
10229       file: file2,
10230       locations: positions.map(Position.toLocation)
10231     };
10232     const response = await this.client.execute("selectionRange", args, token);
10233     if (response.type !== "response" || !response.body) {
10234       return void 0;
10235     }
10236     return response.body.map(SmartSelection.convertSelectionRange);
10237   }
10238   static convertSelectionRange(selectionRange) {
10239     return {
10240       range: Range2.fromTextSpan(selectionRange.textSpan),
10241       parent: selectionRange.parent ? SmartSelection.convertSelectionRange(selectionRange.parent) : void 0
10242     };
10243   }
10244 };
10245 var smartSelect_default = SmartSelection;
10246
10247 // src/server/features/tagClosing.ts
10248 var import_coc20 = __toModule(require("coc.nvim"));
10249 var TagClosing2 = class {
10250   constructor(client, descriptionLanguageId) {
10251     this.client = client;
10252     this.descriptionLanguageId = descriptionLanguageId;
10253     this._disposables = [];
10254     this._disposed = false;
10255     this._timeout = void 0;
10256     this._cancel = void 0;
10257     import_coc20.events.on("InsertCharPre", (character) => {
10258       this.lastInsert = character;
10259     }, null, this._disposables);
10260     import_coc20.events.on("TextChangedI", this.onChange, this, this._disposables);
10261     import_coc20.events.on("TextChangedP", this.onChange, this, this._disposables);
10262   }
10263   async onChange(bufnr, change) {
10264     let doc = import_coc20.workspace.getDocument(bufnr);
10265     if (!doc || !doc.attached)
10266       return;
10267     let enabled = this.isEnabled(doc.filetype, doc.uri);
10268     if (!enabled)
10269       return;
10270     let {pre, changedtick, lnum} = change;
10271     if (!pre.endsWith("/") && !pre.endsWith(">"))
10272       return;
10273     if (!pre.endsWith(this.lastInsert))
10274       return;
10275     if (pre.length > 1 && pre[pre.length - 2] == ">")
10276       return;
10277     const filepath = this.client.toOpenedFilePath(doc.uri);
10278     if (!filepath)
10279       return;
10280     if (this._timeout) {
10281       clearTimeout(this._timeout);
10282     }
10283     if (this._cancel) {
10284       this._cancel.cancel();
10285       this._cancel.dispose();
10286       this._cancel = void 0;
10287     }
10288     await doc.patchChange();
10289     this._timeout = setTimeout(async () => {
10290       this._timeout = void 0;
10291       if (this._disposed)
10292         return;
10293       if (doc.changedtick > changedtick)
10294         return;
10295       const position = import_coc20.Position.create(lnum - 1, pre.length);
10296       const args = Position.toFileLocationRequestArgs(filepath, position);
10297       this._cancel = new import_coc20.CancellationTokenSource();
10298       const response = await this.client.execute("jsxClosingTag", args, this._cancel.token);
10299       if (response.type !== "response" || !response.body) {
10300         return;
10301       }
10302       if (this._disposed)
10303         return;
10304       const insertion = response.body;
10305       if (doc.changedtick === changedtick) {
10306         import_coc20.snippetManager.insertSnippet(this.getTagSnippet(insertion).value, false, import_coc20.Range.create(position, position));
10307       }
10308     }, 50);
10309   }
10310   isEnabled(languageId, uri) {
10311     const configLang = TagClosing2._configurationLanguages[languageId];
10312     if (!configLang || configLang !== this.descriptionLanguageId) {
10313       return false;
10314     }
10315     if (!import_coc20.workspace.getConfiguration(void 0, uri).get(`${configLang}.autoClosingTags`)) {
10316       return false;
10317     }
10318     return true;
10319   }
10320   dispose() {
10321     this._disposed = true;
10322     if (this._timeout) {
10323       clearTimeout(this._timeout);
10324       this._timeout = void 0;
10325     }
10326     if (this._cancel) {
10327       this._cancel.cancel();
10328       this._cancel.dispose();
10329       this._cancel = void 0;
10330     }
10331     import_coc20.disposeAll(this._disposables);
10332     this._disposables = [];
10333   }
10334   getTagSnippet(closingTag) {
10335     const snippet = new SnippetString_default();
10336     snippet.appendPlaceholder("", 0);
10337     snippet.appendText(closingTag.newText);
10338     return snippet;
10339   }
10340 };
10341 var TagClosing = TagClosing2;
10342 TagClosing.minVersion = api_default.v300;
10343 TagClosing._configurationLanguages = {
10344   javascriptreact: "javascript",
10345   typescriptreact: "typescript"
10346 };
10347 var tagClosing_default = TagClosing;
10348
10349 // src/server/features/updatePathOnRename.ts
10350 var import_coc21 = __toModule(require("coc.nvim"));
10351 var import_vscode_languageserver_protocol16 = __toModule(require_main3());
10352
10353 // src/server/utils/mutex.ts
10354 var Mutex = class {
10355   constructor() {
10356     this.tasks = [];
10357     this.count = 1;
10358   }
10359   sched() {
10360     if (this.count > 0 && this.tasks.length > 0) {
10361       this.count--;
10362       let next = this.tasks.shift();
10363       next();
10364     }
10365   }
10366   get busy() {
10367     return this.count == 0;
10368   }
10369   acquire() {
10370     return new Promise((res) => {
10371       let task = () => {
10372         let released = false;
10373         res(() => {
10374           if (!released) {
10375             released = true;
10376             this.count++;
10377             this.sched();
10378           }
10379         });
10380       };
10381       this.tasks.push(task);
10382       process.nextTick(this.sched.bind(this));
10383     });
10384   }
10385   use(f) {
10386     return this.acquire().then((release) => {
10387       return f().then((res) => {
10388         release();
10389         return res;
10390       }).catch((err) => {
10391         release();
10392         throw err;
10393       });
10394     });
10395   }
10396 };
10397
10398 // src/server/features/updatePathOnRename.ts
10399 function wait(ms) {
10400   return new Promise((resolve) => {
10401     setTimeout(() => {
10402       resolve();
10403     }, ms);
10404   });
10405 }
10406 var UpdateImportsOnFileRenameHandler = class {
10407   constructor(client, fileConfigurationManager, languageId) {
10408     this.client = client;
10409     this.fileConfigurationManager = fileConfigurationManager;
10410     this.disposables = [];
10411     let glob = languageId == "typescript" ? "**/*.{ts,tsx}" : "**/*.{js,jsx}";
10412     const watcher = import_coc21.workspace.createFileSystemWatcher(glob);
10413     this.disposables.push(watcher);
10414     let mutex = new Mutex();
10415     watcher.onDidRename(async (e) => {
10416       let release = await mutex.acquire();
10417       try {
10418         await this.doRename(e.oldUri, e.newUri);
10419         release();
10420       } catch (e2) {
10421         this.client.logger.error("Error on rename:", e2);
10422         release();
10423       }
10424     }, null, this.disposables);
10425   }
10426   dispose() {
10427     import_coc21.disposeAll(this.disposables);
10428   }
10429   async doRename(oldResource, newResource) {
10430     if (oldResource.scheme !== "file" || newResource.scheme !== "file") {
10431       return;
10432     }
10433     const targetFile = newResource.fsPath;
10434     const oldFile = oldResource.fsPath;
10435     const newUri = newResource.toString();
10436     let oldDocument = import_coc21.workspace.getDocument(oldResource.toString());
10437     if (oldDocument) {
10438       await import_coc21.workspace.nvim.command(`silent ${oldDocument.bufnr}bwipeout!`);
10439     }
10440     let document = import_coc21.workspace.getDocument(newUri);
10441     if (document) {
10442       await import_coc21.workspace.nvim.command(`silent ${document.bufnr}bwipeout!`);
10443       await wait(30);
10444     }
10445     document = await import_coc21.workspace.loadFile(newUri);
10446     if (!document)
10447       return;
10448     await wait(50);
10449     const edits = await this.getEditsForFileRename(document.textDocument, oldFile, targetFile);
10450     if (!edits)
10451       return;
10452     if (await this.promptUser(newResource)) {
10453       await import_coc21.workspace.applyEdit(edits);
10454     }
10455   }
10456   async promptUser(newResource) {
10457     return await import_coc21.window.showPrompt(`Update imports for moved file: ${newResource.fsPath}?`);
10458   }
10459   async getEditsForFileRename(document, oldFile, newFile) {
10460     await this.fileConfigurationManager.ensureConfigurationForDocument(document, import_vscode_languageserver_protocol16.CancellationToken.None);
10461     const response = await this.client.interruptGetErr(() => {
10462       const args = {
10463         oldFilePath: oldFile,
10464         newFilePath: newFile
10465       };
10466       return this.client.execute("getEditsForFileRename", args, import_vscode_languageserver_protocol16.CancellationToken.None);
10467     });
10468     if (!response || response.type != "response" || !response.body) {
10469       return;
10470     }
10471     const edits = [];
10472     for (const edit of response.body) {
10473       if (edit.fileName.match(/[\/\\]node_modules[\/\\]/gi)) {
10474         continue;
10475       }
10476       for (const change of edit.textChanges) {
10477         if (change.newText.match(/\/node_modules\//gi)) {
10478           continue;
10479         }
10480       }
10481       edits.push(edit);
10482     }
10483     return WorkspaceEdit.fromFileCodeEdits(this.client, edits);
10484   }
10485 };
10486 var updatePathOnRename_default = UpdateImportsOnFileRenameHandler;
10487
10488 // src/server/organizeImports.ts
10489 var import_coc22 = __toModule(require("coc.nvim"));
10490 var import_vscode_languageserver_protocol17 = __toModule(require_main3());
10491 var OrganizeImportsCommand = class {
10492   constructor(service) {
10493     this.service = service;
10494     this.id = "tsserver.organizeImports";
10495   }
10496   async _execute(client, document) {
10497     let file2 = client.toPath(document.uri);
10498     const args = {
10499       scope: {
10500         type: "file",
10501         args: {
10502           file: file2
10503         }
10504       }
10505     };
10506     const response = await client.interruptGetErr(() => client.execute("organizeImports", args, import_vscode_languageserver_protocol17.CancellationToken.None));
10507     if (!response || response.type != "response" || !response.success) {
10508       return;
10509     }
10510     const edit = WorkspaceEdit.fromFileCodeEdits(client, response.body);
10511     let keys = Object.keys(edit.changes);
10512     if (keys.length == 1) {
10513       let doc = import_coc22.workspace.getDocument(keys[0]);
10514       if (doc) {
10515         await doc.applyEdits(edit.changes[keys[0]]);
10516         return;
10517       }
10518     }
10519     if (edit)
10520       await import_coc22.workspace.applyEdit(edit);
10521   }
10522   async execute(document) {
10523     let client = await this.service.getClientHost();
10524     if (!document) {
10525       let doc = await import_coc22.workspace.document;
10526       if (!doc.attached) {
10527         throw new Error(`Document not attached.`);
10528       }
10529       if (client.serviceClient.modeIds.indexOf(doc.filetype) == -1) {
10530         throw new Error(`filetype "${doc.filetype}" not supported by tsserver.`);
10531       }
10532       document = doc.textDocument;
10533     }
10534     await this._execute(client.serviceClient, document);
10535   }
10536 };
10537 var OrganizeImportsCodeActionProvider = class {
10538   constructor(client, fileConfigManager) {
10539     this.client = client;
10540     this.fileConfigManager = fileConfigManager;
10541     this.metadata = {
10542       providedCodeActionKinds: [import_vscode_languageserver_protocol17.CodeActionKind.SourceOrganizeImports]
10543     };
10544   }
10545   async provideCodeActions(document, _range, context, token) {
10546     if (this.client.modeIds.indexOf(document.languageId) == -1)
10547       return;
10548     if (!context.only || !context.only.includes(import_vscode_languageserver_protocol17.CodeActionKind.SourceOrganizeImports)) {
10549       return [];
10550     }
10551     await this.fileConfigManager.ensureConfigurationForDocument(document, token);
10552     const action = import_vscode_languageserver_protocol17.CodeAction.create("Organize Imports", {
10553       title: "",
10554       command: "tsserver.organizeImports",
10555       arguments: [document]
10556     }, import_vscode_languageserver_protocol17.CodeActionKind.SourceOrganizeImports);
10557     return [action];
10558   }
10559 };
10560
10561 // src/server/languageProvider.ts
10562 var suggestionSetting = "suggestionActions.enabled";
10563 var LanguageProvider = class {
10564   constructor(client, fileConfigurationManager, description, typingsStatus) {
10565     this.client = client;
10566     this.fileConfigurationManager = fileConfigurationManager;
10567     this.description = description;
10568     this.disposables = [];
10569     import_coc23.workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables);
10570     this.configurationChanged();
10571     let initialized = false;
10572     client.onTsServerStarted(async () => {
10573       if (!initialized) {
10574         initialized = true;
10575         this.registerProviders(client, typingsStatus);
10576       }
10577     });
10578   }
10579   configurationChanged() {
10580     const config = import_coc23.workspace.getConfiguration(this.id, null);
10581     this.client.diagnosticsManager.setEnableSuggestions(this.id, config.get(suggestionSetting, true));
10582   }
10583   dispose() {
10584     import_coc23.disposeAll(this.disposables);
10585   }
10586   _register(disposable) {
10587     this.disposables.push(disposable);
10588   }
10589   registerProviders(client, typingsStatus) {
10590     let languageIds = this.description.modeIds;
10591     let clientId = `tsserver-${this.description.id}`;
10592     this._register(import_coc23.languages.registerCompletionItemProvider(clientId, "TSC", languageIds, new completionItemProvider_default(client, typingsStatus, this.fileConfigurationManager, this.description.id), completionItemProvider_default.triggerCharacters));
10593     if (this.client.apiVersion.gte(api_default.v230)) {
10594       this._register(import_coc23.languages.registerCompletionItemProvider(`${this.description.id}-directive`, "TSC", languageIds, new directiveCommentCompletions_default(client), ["@"]));
10595     }
10596     let definitionProvider = new definitionProvider_default(client);
10597     this._register(import_coc23.languages.registerDefinitionProvider(languageIds, definitionProvider));
10598     this._register(import_coc23.languages.registerTypeDefinitionProvider(languageIds, definitionProvider));
10599     this._register(import_coc23.languages.registerImplementationProvider(languageIds, definitionProvider));
10600     this._register(import_coc23.languages.registerReferencesProvider(languageIds, new references_default(client)));
10601     this._register(import_coc23.languages.registerHoverProvider(languageIds, new hover_default(client)));
10602     this._register(import_coc23.languages.registerDocumentHighlightProvider(languageIds, new documentHighlight_default(this.client)));
10603     this._register(import_coc23.languages.registerSignatureHelpProvider(languageIds, new signatureHelp_default(client), ["(", ",", "<", ")"]));
10604     this._register(import_coc23.languages.registerDocumentSymbolProvider(languageIds, new documentSymbol_default(client)));
10605     this._register(import_coc23.languages.registerRenameProvider(languageIds, new rename_default(client, this.fileConfigurationManager)));
10606     let formatProvider = new formatting_default(client, this.fileConfigurationManager);
10607     this._register(import_coc23.languages.registerDocumentFormatProvider(languageIds, formatProvider));
10608     this._register(import_coc23.languages.registerDocumentRangeFormatProvider(languageIds, formatProvider));
10609     this._register(import_coc23.languages.registerOnTypeFormattingEditProvider(languageIds, formatProvider, [";", "}", "\n", String.fromCharCode(27)]));
10610     this._register(import_coc23.languages.registerCodeActionProvider(languageIds, new moduleInstall_default(client), "tsserver"));
10611     if (typeof import_coc23.languages["registerCallHierarchyProvider"] === "function") {
10612       this._register(import_coc23.languages.registerCallHierarchyProvider(languageIds, new callHierarchy_default(client)));
10613     }
10614     let {fileConfigurationManager} = this;
10615     let conf = fileConfigurationManager.getLanguageConfiguration(this.id);
10616     if (["javascript", "typescript"].includes(this.id)) {
10617       if (this.client.apiVersion.gte(api_default.v290) && conf.get("updateImportsOnFileMove.enable")) {
10618         this._register(new updatePathOnRename_default(client, this.fileConfigurationManager, this.id));
10619       }
10620     }
10621     if (this.client.apiVersion.gte(api_default.v280)) {
10622       this._register(import_coc23.languages.registerFoldingRangeProvider(languageIds, new folding_default(this.client)));
10623       this._register(import_coc23.languages.registerCodeActionProvider(languageIds, new OrganizeImportsCodeActionProvider(this.client, this.fileConfigurationManager), "tsserver", [import_vscode_languageserver_protocol18.CodeActionKind.SourceOrganizeImports]));
10624     }
10625     if (this.client.apiVersion.gte(api_default.v240)) {
10626       this._register(import_coc23.languages.registerCodeActionProvider(languageIds, new refactor_default(client, this.fileConfigurationManager), "tsserver", [import_vscode_languageserver_protocol18.CodeActionKind.Refactor]));
10627     }
10628     this._register(import_coc23.languages.registerCodeActionProvider(languageIds, new quickfix_default(client, this.fileConfigurationManager), "tsserver", [import_vscode_languageserver_protocol18.CodeActionKind.QuickFix]));
10629     this._register(import_coc23.languages.registerCodeActionProvider(languageIds, new importFix_default(this.client.bufferSyncSupport), "tsserver", [import_vscode_languageserver_protocol18.CodeActionKind.QuickFix]));
10630     let cachedResponse = new CachedNavTreeResponse();
10631     if (this.client.apiVersion.gte(api_default.v206) && conf.get("referencesCodeLens.enable")) {
10632       this._register(import_coc23.languages.registerCodeLensProvider(languageIds, new referencesCodeLens_default(client, cachedResponse)));
10633     }
10634     if (this.client.apiVersion.gte(api_default.v220) && conf.get("implementationsCodeLens.enable")) {
10635       this._register(import_coc23.languages.registerCodeLensProvider(languageIds, new implementationsCodeLens_default(client, cachedResponse)));
10636     }
10637     if (this.client.apiVersion.gte(api_default.v350)) {
10638       this._register(import_coc23.languages.registerSelectionRangeProvider(languageIds, new smartSelect_default(this.client)));
10639     }
10640     if (this.client.apiVersion.gte(api_default.v300)) {
10641       this._register(new tagClosing_default(this.client, this.description.id));
10642     }
10643   }
10644   handles(resource, doc) {
10645     if (doc && this.description.modeIds.indexOf(doc.languageId) >= 0) {
10646       return true;
10647     }
10648     const base = import_path5.default.basename(import_coc23.Uri.parse(resource).fsPath);
10649     return !!base && (!!this.description.configFilePattern && this.description.configFilePattern.test(base));
10650   }
10651   get id() {
10652     return this.description.id;
10653   }
10654   get diagnosticSource() {
10655     return this.description.diagnosticSource;
10656   }
10657   triggerAllDiagnostics() {
10658     this.client.bufferSyncSupport.requestAllDiagnostics();
10659   }
10660   diagnosticsReceived(diagnosticsKind, file2, diagnostics) {
10661     const config = import_coc23.workspace.getConfiguration(this.id, file2.toString());
10662     const reportUnnecessary = config.get("showUnused", true);
10663     const reportDeprecated = config.get("showDeprecated", true);
10664     this.client.diagnosticsManager.diagnosticsReceived(diagnosticsKind, file2.toString(), diagnostics.filter((diag) => {
10665       if (!reportUnnecessary) {
10666         if (diag.reportUnnecessary && diag.severity === import_vscode_languageserver_protocol18.DiagnosticSeverity.Information) {
10667           return false;
10668         }
10669       }
10670       if (!reportDeprecated) {
10671         if (diag.reportDeprecated && diag.severity === import_vscode_languageserver_protocol18.DiagnosticSeverity.Hint) {
10672           return false;
10673         }
10674       }
10675       return true;
10676     }));
10677   }
10678 };
10679 var languageProvider_default = LanguageProvider;
10680
10681 // src/server/typescriptServiceClient.ts
10682 var import_coc32 = __toModule(require("coc.nvim"));
10683 var import_fs4 = __toModule(require("fs"));
10684 var import_os2 = __toModule(require("os"));
10685 var import_path8 = __toModule(require("path"));
10686 var import_vscode_languageserver_protocol21 = __toModule(require_main3());
10687
10688 // src/utils/fileSchemess.ts
10689 var file = "file";
10690 var git = "git";
10691 var vsls = "vsls";
10692 var disabledSchemes = new Set([
10693   git,
10694   vsls
10695 ]);
10696
10697 // src/server/typescriptService.ts
10698 var ServerResponse;
10699 (function(ServerResponse2) {
10700   class Cancelled {
10701     constructor(reason) {
10702       this.reason = reason;
10703       this.type = "cancelled";
10704     }
10705   }
10706   ServerResponse2.Cancelled = Cancelled;
10707   ServerResponse2.NoContent = new class {
10708     constructor() {
10709       this.type = "noContent";
10710     }
10711   }();
10712 })(ServerResponse || (ServerResponse = {}));
10713 var ExectuionTarget;
10714 (function(ExectuionTarget2) {
10715   ExectuionTarget2[ExectuionTarget2["Semantic"] = 0] = "Semantic";
10716   ExectuionTarget2[ExectuionTarget2["Syntax"] = 1] = "Syntax";
10717 })(ExectuionTarget || (ExectuionTarget = {}));
10718
10719 // src/server/callbackMap.ts
10720 var CallbackMap = class {
10721   constructor() {
10722     this._callbacks = new Map();
10723     this._asyncCallbacks = new Map();
10724   }
10725   destroy(cause) {
10726     const cancellation = new ServerResponse.Cancelled(cause);
10727     for (const callback of this._callbacks.values()) {
10728       callback.onSuccess(cancellation);
10729     }
10730     this._callbacks.clear();
10731     for (const callback of this._asyncCallbacks.values()) {
10732       callback.onSuccess(cancellation);
10733     }
10734     this._asyncCallbacks.clear();
10735   }
10736   add(seq, callback, isAsync) {
10737     if (isAsync) {
10738       this._asyncCallbacks.set(seq, callback);
10739     } else {
10740       this._callbacks.set(seq, callback);
10741     }
10742   }
10743   fetch(seq) {
10744     const callback = this._callbacks.get(seq) || this._asyncCallbacks.get(seq);
10745     this.delete(seq);
10746     return callback;
10747   }
10748   delete(seq) {
10749     if (!this._callbacks.delete(seq)) {
10750       this._asyncCallbacks.delete(seq);
10751     }
10752   }
10753 };
10754
10755 // src/server/features/bufferSyncSupport.ts
10756 var import_coc25 = __toModule(require("coc.nvim"));
10757 var import_vscode_languageserver_protocol19 = __toModule(require_main3());
10758
10759 // src/server/utils/async.ts
10760 var Delayer = class {
10761   constructor(defaultDelay) {
10762     this.defaultDelay = defaultDelay;
10763     this.timeout = null;
10764     this.completionPromise = null;
10765     this.onSuccess = null;
10766     this.task = null;
10767   }
10768   trigger(task, delay = this.defaultDelay) {
10769     this.task = task;
10770     if (delay >= 0) {
10771       this.cancelTimeout();
10772     }
10773     if (!this.completionPromise) {
10774       this.completionPromise = new Promise((resolve) => {
10775         this.onSuccess = resolve;
10776       }).then(() => {
10777         this.completionPromise = null;
10778         this.onSuccess = null;
10779         let result = this.task && this.task();
10780         this.task = null;
10781         return result;
10782       });
10783     }
10784     if (delay >= 0 || this.timeout === null) {
10785       this.timeout = setTimeout(() => {
10786         this.timeout = null;
10787         if (this.onSuccess) {
10788           this.onSuccess(void 0);
10789         }
10790       }, delay >= 0 ? delay : this.defaultDelay);
10791     }
10792     return this.completionPromise;
10793   }
10794   cancelTimeout() {
10795     if (this.timeout !== null) {
10796       clearTimeout(this.timeout);
10797       this.timeout = null;
10798     }
10799   }
10800 };
10801
10802 // src/server/utils/languageModeIds.ts
10803 var typescript = "typescript";
10804 var typescriptreact = "typescriptreact";
10805 var typescripttsx = "typescript.tsx";
10806 var typescriptjsx = "typescript.jsx";
10807 var javascript = "javascript";
10808 var javascriptreact = "javascriptreact";
10809 var javascriptjsx = "javascript.jsx";
10810 function mode2ScriptKind(mode) {
10811   switch (mode) {
10812     case typescript:
10813       return "TS";
10814     case typescripttsx:
10815       return "TSX";
10816     case typescriptjsx:
10817       return "TSX";
10818     case typescriptreact:
10819       return "TSX";
10820     case javascript:
10821       return "JS";
10822     case javascriptreact:
10823       return "JSX";
10824   }
10825   return void 0;
10826 }
10827
10828 // src/server/features/resourceMap.ts
10829 var import_coc24 = __toModule(require("coc.nvim"));
10830 function defaultPathNormalizer(resource) {
10831   let u = import_coc24.Uri.parse(resource);
10832   if (u.scheme === "file") {
10833     return u.fsPath;
10834   }
10835   return resource.toString();
10836 }
10837 var ResourceMap = class {
10838   constructor(_normalizePath = defaultPathNormalizer) {
10839     this._normalizePath = _normalizePath;
10840     this._map = new Map();
10841   }
10842   get size() {
10843     return this._map.size;
10844   }
10845   get entries() {
10846     return this._map.values();
10847   }
10848   has(uri) {
10849     const file2 = this.toKey(uri);
10850     return !!file2 && this._map.has(file2);
10851   }
10852   get(uri) {
10853     const file2 = this.toKey(uri);
10854     if (!file2)
10855       return void 0;
10856     let entry = this._map.get(file2);
10857     return entry ? entry.value : void 0;
10858   }
10859   set(uri, value) {
10860     const file2 = this.toKey(uri);
10861     if (file2) {
10862       this._map.set(file2, {uri, value});
10863     }
10864   }
10865   delete(uri) {
10866     const file2 = this.toKey(uri);
10867     if (file2) {
10868       this._map.delete(file2);
10869     }
10870   }
10871   get values() {
10872     return Array.from(this._map.values()).map((x) => x.value);
10873   }
10874   get uris() {
10875     return Array.from(this._map.values()).map((x) => x.uri);
10876   }
10877   clear() {
10878     this._map.clear();
10879   }
10880   toKey(uri) {
10881     const key = this._normalizePath ? this._normalizePath(uri) : uri;
10882     if (!key) {
10883       return key;
10884     }
10885     return this.isCaseInsensitivePath(key) ? key.toLowerCase() : key;
10886   }
10887   isCaseInsensitivePath(path9) {
10888     if (isWindowsPath(path9)) {
10889       return true;
10890     }
10891     return path9[0] === "/" && this.onIsCaseInsenitiveFileSystem;
10892   }
10893   get onIsCaseInsenitiveFileSystem() {
10894     if (process.platform === "win32") {
10895       return true;
10896     }
10897     if (process.platform === "darwin") {
10898       return true;
10899     }
10900     return false;
10901   }
10902 };
10903 function isWindowsPath(path9) {
10904   return /^[a-zA-Z]:\\/.test(path9);
10905 }
10906
10907 // src/server/features/bufferSyncSupport.ts
10908 var BufferKind;
10909 (function(BufferKind2) {
10910   BufferKind2[BufferKind2["TypeScript"] = 1] = "TypeScript";
10911   BufferKind2[BufferKind2["JavaScript"] = 2] = "JavaScript";
10912 })(BufferKind || (BufferKind = {}));
10913 var BufferState;
10914 (function(BufferState2) {
10915   BufferState2[BufferState2["Initial"] = 1] = "Initial";
10916   BufferState2[BufferState2["Open"] = 2] = "Open";
10917   BufferState2[BufferState2["Closed"] = 2] = "Closed";
10918 })(BufferState || (BufferState = {}));
10919 var BufferOperationType;
10920 (function(BufferOperationType2) {
10921   BufferOperationType2[BufferOperationType2["Close"] = 0] = "Close";
10922   BufferOperationType2[BufferOperationType2["Open"] = 1] = "Open";
10923   BufferOperationType2[BufferOperationType2["Change"] = 2] = "Change";
10924 })(BufferOperationType || (BufferOperationType = {}));
10925 var CloseOperation = class {
10926   constructor(args) {
10927     this.args = args;
10928     this.type = 0;
10929   }
10930 };
10931 var OpenOperation = class {
10932   constructor(args) {
10933     this.args = args;
10934     this.type = 1;
10935   }
10936 };
10937 var ChangeOperation = class {
10938   constructor(args) {
10939     this.args = args;
10940     this.type = 2;
10941   }
10942 };
10943 var SyncedBuffer = class {
10944   constructor(document, filepath, client, synchronizer) {
10945     this.document = document;
10946     this.filepath = filepath;
10947     this.client = client;
10948     this.synchronizer = synchronizer;
10949     this.state = 1;
10950   }
10951   open() {
10952     const args = {
10953       file: this.filepath,
10954       fileContent: this.document.getText(),
10955       projectRootPath: this.client.getProjectRootPath(this.document.uri)
10956     };
10957     const scriptKind = mode2ScriptKind(this.document.languageId);
10958     if (scriptKind) {
10959       args.scriptKindName = scriptKind;
10960     }
10961     if (this.client.apiVersion.gte(api_default.v240)) {
10962       const tsPluginsForDocument = this.client.pluginManager.plugins.filter((x) => x.languages.indexOf(this.document.languageId) >= 0);
10963       if (tsPluginsForDocument.length) {
10964         args.plugins = tsPluginsForDocument.map((plugin) => plugin.name);
10965       }
10966     }
10967     this.synchronizer.open(this.resource, args);
10968     this.state = 2;
10969   }
10970   get resource() {
10971     return this.document.uri;
10972   }
10973   get lineCount() {
10974     return this.document.lineCount;
10975   }
10976   get kind() {
10977     if (this.document.languageId.startsWith("javascript")) {
10978       return 2;
10979     }
10980     return 1;
10981   }
10982   close() {
10983     if (this.state !== 2) {
10984       this.state = 2;
10985       return false;
10986     }
10987     this.state = 2;
10988     return this.synchronizer.close(this.resource, this.filepath);
10989   }
10990   onContentChanged(events3) {
10991     if (this.state !== 2) {
10992       console.error(`Unexpected buffer state: ${this.state}`);
10993     }
10994     this.synchronizer.change(this.resource, this.filepath, events3);
10995   }
10996 };
10997 var SyncedBufferMap = class extends ResourceMap {
10998   getForPath(filePath) {
10999     return this.get(import_coc25.Uri.file(filePath).toString());
11000   }
11001   get allBuffers() {
11002     return this.values;
11003   }
11004 };
11005 var PendingDiagnostics = class extends ResourceMap {
11006   getOrderedFileSet() {
11007     const orderedResources = Array.from(this.entries).sort((a, b) => a.value - b.value).map((entry) => entry.uri);
11008     const map = new ResourceMap(this._normalizePath);
11009     for (const resource of orderedResources) {
11010       map.set(resource, void 0);
11011     }
11012     return map;
11013   }
11014 };
11015 var BufferSynchronizer = class {
11016   constructor(client, pathNormalizer) {
11017     this.client = client;
11018     this._pending = new ResourceMap(pathNormalizer);
11019   }
11020   open(resource, args) {
11021     if (this.supportsBatching) {
11022       this.updatePending(resource, new OpenOperation(args));
11023     } else {
11024       this.client.executeWithoutWaitingForResponse("open", args);
11025     }
11026   }
11027   close(resource, filepath) {
11028     if (this.supportsBatching) {
11029       return this.updatePending(resource, new CloseOperation(filepath));
11030     } else {
11031       const args = {file: filepath};
11032       this.client.executeWithoutWaitingForResponse("close", args);
11033       return true;
11034     }
11035   }
11036   change(resource, filepath, events3) {
11037     if (!events3.length) {
11038       return;
11039     }
11040     if (this.supportsBatching) {
11041       this.updatePending(resource, new ChangeOperation({
11042         fileName: filepath,
11043         textChanges: events3.map((change) => ({
11044           newText: change.text,
11045           start: Position.toLocation(change.range.start),
11046           end: Position.toLocation(change.range.end)
11047         })).reverse()
11048       }));
11049     } else {
11050       for (const {range, text} of events3) {
11051         const args = {
11052           insertString: text,
11053           ...Range2.toFormattingRequestArgs(filepath, range)
11054         };
11055         this.client.executeWithoutWaitingForResponse("change", args);
11056       }
11057     }
11058   }
11059   reset() {
11060     this._pending.clear();
11061   }
11062   beforeCommand(command) {
11063     if (command === "updateOpen") {
11064       return;
11065     }
11066     this.flush();
11067   }
11068   flush() {
11069     if (!this.supportsBatching) {
11070       this._pending.clear();
11071       return;
11072     }
11073     if (this._pending.size > 0) {
11074       const closedFiles = [];
11075       const openFiles = [];
11076       const changedFiles = [];
11077       for (const change of this._pending.values) {
11078         switch (change.type) {
11079           case 2:
11080             changedFiles.push(change.args);
11081             break;
11082           case 1:
11083             openFiles.push(change.args);
11084             break;
11085           case 0:
11086             closedFiles.push(change.args);
11087             break;
11088         }
11089       }
11090       this.client.execute("updateOpen", {changedFiles, closedFiles, openFiles}, import_vscode_languageserver_protocol19.CancellationToken.None, {nonRecoverable: true});
11091       this._pending.clear();
11092     }
11093   }
11094   get supportsBatching() {
11095     return this.client.apiVersion.gte(api_default.v340);
11096   }
11097   updatePending(resource, op) {
11098     switch (op.type) {
11099       case 0:
11100         const existing = this._pending.get(resource);
11101         switch (existing == null ? void 0 : existing.type) {
11102           case 1:
11103             this._pending.delete(resource);
11104             return false;
11105         }
11106         break;
11107     }
11108     if (this._pending.has(resource)) {
11109       this.flush();
11110     }
11111     this._pending.set(resource, op);
11112     return true;
11113   }
11114 };
11115 var GetErrRequest = class {
11116   constructor(client, uris, _token, onDone) {
11117     this.uris = uris;
11118     this._token = _token;
11119     this._done = false;
11120     let files = uris.map((uri) => client.normalizePath(uri));
11121     const args = {
11122       delay: 0,
11123       files
11124     };
11125     const done = () => {
11126       if (this._done) {
11127         return;
11128       }
11129       this._done = true;
11130       onDone();
11131     };
11132     client.executeAsync("geterr", args, _token.token).then(done, done);
11133   }
11134   static executeGetErrRequest(client, uris, onDone) {
11135     const token = new import_vscode_languageserver_protocol19.CancellationTokenSource();
11136     return new GetErrRequest(client, uris, token, onDone);
11137   }
11138   cancel() {
11139     if (!this._done) {
11140       this._token.cancel();
11141     }
11142     this._token.dispose();
11143   }
11144 };
11145 var BufferSyncSupport = class {
11146   constructor(client, modeIds) {
11147     this.disposables = [];
11148     this._validateJavaScript = true;
11149     this._validateTypeScript = true;
11150     this.listening = false;
11151     this._onDelete = new import_vscode_languageserver_protocol19.Emitter();
11152     this.onDelete = this._onDelete.event;
11153     this._onWillChange = new import_vscode_languageserver_protocol19.Emitter();
11154     this.onWillChange = this._onWillChange.event;
11155     this.client = client;
11156     this.modeIds = new Set(modeIds);
11157     this.diagnosticDelayer = new Delayer(300);
11158     const pathNormalizer = (path9) => this.client.toPath(path9);
11159     this.syncedBuffers = new SyncedBufferMap(pathNormalizer);
11160     this.pendingDiagnostics = new PendingDiagnostics(pathNormalizer);
11161     this.synchronizer = new BufferSynchronizer(client, pathNormalizer);
11162     this.updateConfiguration();
11163     import_coc25.workspace.onDidChangeConfiguration(this.updateConfiguration, this, this.disposables);
11164   }
11165   listen() {
11166     if (this.listening) {
11167       return;
11168     }
11169     this.listening = true;
11170     import_coc25.workspace.onDidOpenTextDocument(this.openTextDocument, this, this.disposables);
11171     import_coc25.workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this.disposables);
11172     import_coc25.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this.disposables);
11173     import_coc25.workspace.textDocuments.forEach(this.openTextDocument, this);
11174   }
11175   handles(resource) {
11176     return this.syncedBuffers.has(resource);
11177   }
11178   dispose() {
11179     this.pendingDiagnostics.clear();
11180     import_coc25.disposeAll(this.disposables);
11181     this._onWillChange.dispose();
11182     this._onDelete.dispose();
11183   }
11184   ensureHasBuffer(resource) {
11185     if (this.syncedBuffers.has(resource)) {
11186       return true;
11187     }
11188     const existingDocument = import_coc25.workspace.textDocuments.find((doc) => doc.uri.toString() === resource);
11189     if (existingDocument) {
11190       return this.openTextDocument(existingDocument);
11191     }
11192     return false;
11193   }
11194   toResource(filePath) {
11195     const buffer = this.syncedBuffers.getForPath(filePath);
11196     if (buffer)
11197       return buffer.resource;
11198     return import_coc25.Uri.file(filePath).toString();
11199   }
11200   reset() {
11201     var _a;
11202     (_a = this.pendingGetErr) == null ? void 0 : _a.cancel();
11203     this.pendingDiagnostics.clear();
11204     this.synchronizer.reset();
11205   }
11206   reinitialize() {
11207     this.reset();
11208     for (const buffer of this.syncedBuffers.allBuffers) {
11209       buffer.open();
11210     }
11211   }
11212   openTextDocument(document) {
11213     if (!this.modeIds.has(document.languageId)) {
11214       return false;
11215     }
11216     const resource = document.uri;
11217     const filepath = this.client.normalizePath(import_coc25.Uri.parse(resource));
11218     if (!filepath) {
11219       return false;
11220     }
11221     if (this.syncedBuffers.has(resource)) {
11222       return true;
11223     }
11224     const syncedBuffer = new SyncedBuffer(document, filepath, this.client, this.synchronizer);
11225     this.syncedBuffers.set(resource, syncedBuffer);
11226     syncedBuffer.open();
11227     this.requestDiagnostic(syncedBuffer);
11228     return true;
11229   }
11230   closeResource(resource) {
11231     const syncedBuffer = this.syncedBuffers.get(resource);
11232     if (!syncedBuffer) {
11233       return;
11234     }
11235     this.pendingDiagnostics.delete(resource);
11236     this.syncedBuffers.delete(resource);
11237     const wasBufferOpen = syncedBuffer.close();
11238     this._onDelete.fire(resource);
11239     if (wasBufferOpen) {
11240       this.requestAllDiagnostics();
11241     }
11242   }
11243   onDidCloseTextDocument(document) {
11244     this.closeResource(document.uri);
11245   }
11246   onDidChangeTextDocument(e) {
11247     const syncedBuffer = this.syncedBuffers.get(e.textDocument.uri);
11248     if (!syncedBuffer) {
11249       return;
11250     }
11251     this._onWillChange.fire(syncedBuffer.resource);
11252     syncedBuffer.onContentChanged(e.contentChanges);
11253     const didTrigger = this.requestDiagnostic(syncedBuffer);
11254     if (!didTrigger && this.pendingGetErr) {
11255       this.pendingGetErr.cancel();
11256       this.pendingGetErr = void 0;
11257       this.triggerDiagnostics();
11258     }
11259   }
11260   beforeCommand(command) {
11261     this.synchronizer.beforeCommand(command);
11262   }
11263   interuptGetErr(f) {
11264     if (!this.pendingGetErr) {
11265       return f();
11266     }
11267     this.pendingGetErr.cancel();
11268     this.pendingGetErr = void 0;
11269     const result = f();
11270     this.triggerDiagnostics();
11271     return result;
11272   }
11273   getErr(resources) {
11274     const handledResources = resources.filter((resource) => {
11275       let syncedBuffer = this.syncedBuffers.get(resource.toString());
11276       return syncedBuffer && this.shouldValidate(syncedBuffer);
11277     });
11278     if (!handledResources.length) {
11279       return;
11280     }
11281     for (const resource of handledResources) {
11282       this.pendingDiagnostics.set(resource.toString(), Date.now());
11283     }
11284     this.triggerDiagnostics();
11285   }
11286   triggerDiagnostics(delay = 200) {
11287     this.diagnosticDelayer.trigger(() => {
11288       this.sendPendingDiagnostics();
11289     }, delay);
11290   }
11291   requestAllDiagnostics() {
11292     for (const buffer of this.syncedBuffers.allBuffers) {
11293       if (this.shouldValidate(buffer)) {
11294         this.pendingDiagnostics.set(buffer.resource, Date.now());
11295       }
11296     }
11297     this.triggerDiagnostics();
11298   }
11299   requestDiagnostic(buffer) {
11300     if (!this.shouldValidate(buffer)) {
11301       return false;
11302     }
11303     this.pendingDiagnostics.set(buffer.resource, Date.now());
11304     const delay = Math.min(Math.max(Math.ceil(buffer.lineCount / 20), 300), 800);
11305     this.triggerDiagnostics(delay);
11306     return true;
11307   }
11308   hasPendingDiagnostics(uri) {
11309     return this.pendingDiagnostics.has(uri);
11310   }
11311   sendPendingDiagnostics() {
11312     const orderedFileSet = this.pendingDiagnostics.getOrderedFileSet();
11313     if (this.pendingGetErr) {
11314       this.pendingGetErr.cancel();
11315       for (const uri of this.pendingGetErr.uris) {
11316         let resource = uri.toString();
11317         let syncedBuffer = this.syncedBuffers.get(resource);
11318         if (syncedBuffer && this.shouldValidate(syncedBuffer)) {
11319           orderedFileSet.set(resource, void 0);
11320         } else {
11321           orderedFileSet.delete(resource);
11322         }
11323       }
11324       this.pendingGetErr = void 0;
11325     }
11326     for (const buffer of this.syncedBuffers.values) {
11327       if (this.shouldValidate(buffer)) {
11328         orderedFileSet.set(buffer.resource, void 0);
11329       }
11330     }
11331     if (orderedFileSet.size) {
11332       let uris = Array.from(orderedFileSet.uris).map((uri) => import_coc25.Uri.parse(uri));
11333       const getErr = this.pendingGetErr = GetErrRequest.executeGetErrRequest(this.client, uris, () => {
11334         if (this.pendingGetErr === getErr) {
11335           this.pendingGetErr = void 0;
11336         }
11337       });
11338     }
11339     this.pendingDiagnostics.clear();
11340   }
11341   updateConfiguration() {
11342     const jsConfig = import_coc25.workspace.getConfiguration("javascript", null);
11343     const tsConfig = import_coc25.workspace.getConfiguration("typescript", null);
11344     this._validateJavaScript = jsConfig.get("validate.enable", true);
11345     this._validateTypeScript = tsConfig.get("validate.enable", true);
11346   }
11347   shouldValidate(buffer) {
11348     switch (buffer.kind) {
11349       case 2:
11350         return this._validateJavaScript;
11351       case 1:
11352       default:
11353         return this._validateTypeScript;
11354     }
11355   }
11356 };
11357 var bufferSyncSupport_default = BufferSyncSupport;
11358
11359 // src/server/features/diagnostics.ts
11360 var import_coc26 = __toModule(require("coc.nvim"));
11361 var import_vscode_languageserver_protocol20 = __toModule(require_main3());
11362 var DiagnosticSet = class {
11363   constructor() {
11364     this._map = new ResourceMap();
11365   }
11366   set(uri, diagnostics) {
11367     this._map.set(uri, diagnostics);
11368   }
11369   get(uri) {
11370     return this._map.get(uri) || [];
11371   }
11372   clear() {
11373     this._map = new ResourceMap();
11374   }
11375 };
11376 var DiagnosticKind;
11377 (function(DiagnosticKind2) {
11378   DiagnosticKind2[DiagnosticKind2["Syntax"] = 0] = "Syntax";
11379   DiagnosticKind2[DiagnosticKind2["Semantic"] = 1] = "Semantic";
11380   DiagnosticKind2[DiagnosticKind2["Suggestion"] = 2] = "Suggestion";
11381 })(DiagnosticKind || (DiagnosticKind = {}));
11382 var allDiagnosticKinds = [
11383   0,
11384   1,
11385   2
11386 ];
11387 var DiagnosticsManager = class {
11388   constructor() {
11389     this._diagnostics = new Map();
11390     this._pendingUpdates = new ResourceMap();
11391     this._enableJavascriptSuggestions = true;
11392     this._enableTypescriptSuggestions = true;
11393     this.updateDelay = 200;
11394     for (const kind of allDiagnosticKinds) {
11395       this._diagnostics.set(kind, new DiagnosticSet());
11396     }
11397     this._currentDiagnostics = import_coc26.languages.createDiagnosticCollection("tsserver");
11398   }
11399   dispose() {
11400     this._currentDiagnostics.dispose();
11401     for (const value of this._pendingUpdates.values) {
11402       clearTimeout(value);
11403     }
11404     this._pendingUpdates = new ResourceMap();
11405   }
11406   reInitialize() {
11407     this._currentDiagnostics.clear();
11408     for (const diagnosticSet of this._diagnostics.values()) {
11409       diagnosticSet.clear();
11410     }
11411   }
11412   setEnableSuggestions(languageId, value) {
11413     let curr = languageId == "javascript" ? this._enableJavascriptSuggestions : this._enableTypescriptSuggestions;
11414     if (curr == value) {
11415       return;
11416     }
11417     if (languageId == "javascript") {
11418       this._enableJavascriptSuggestions = value;
11419     } else {
11420       this._enableTypescriptSuggestions = value;
11421     }
11422   }
11423   diagnosticsReceived(kind, uri, diagnostics) {
11424     const collection = this._diagnostics.get(kind);
11425     if (!collection)
11426       return;
11427     let doc = import_coc26.workspace.getDocument(uri);
11428     if (doc)
11429       uri = doc.uri;
11430     if (diagnostics.length === 0) {
11431       const existing = collection.get(uri);
11432       if (existing.length === 0) {
11433         return;
11434       }
11435     }
11436     collection.set(uri, diagnostics);
11437     this.scheduleDiagnosticsUpdate(uri);
11438   }
11439   configFileDiagnosticsReceived(uri, diagnostics) {
11440     this._currentDiagnostics.set(uri, diagnostics);
11441   }
11442   delete(uri) {
11443     this._currentDiagnostics.delete(uri);
11444   }
11445   getDiagnostics(uri) {
11446     return this._currentDiagnostics.get(uri) || [];
11447     return [];
11448   }
11449   scheduleDiagnosticsUpdate(uri) {
11450     if (!this._pendingUpdates.has(uri)) {
11451       this._pendingUpdates.set(uri, setTimeout(() => this.updateCurrentDiagnostics(uri), this.updateDelay));
11452     }
11453   }
11454   updateCurrentDiagnostics(uri) {
11455     if (this._pendingUpdates.has(uri)) {
11456       clearTimeout(this._pendingUpdates.get(uri));
11457       this._pendingUpdates.delete(uri);
11458     }
11459     const allDiagnostics = [
11460       ...this._diagnostics.get(0).get(uri),
11461       ...this._diagnostics.get(1).get(uri),
11462       ...this.getSuggestionDiagnostics(uri)
11463     ];
11464     this._currentDiagnostics.set(uri, allDiagnostics);
11465   }
11466   getSuggestionDiagnostics(uri) {
11467     const enabled = this.suggestionsEnabled(uri);
11468     return this._diagnostics.get(2).get(uri).filter((x) => {
11469       if (!enabled) {
11470         return x.tags && (x.tags.includes(import_vscode_languageserver_protocol20.DiagnosticTag.Unnecessary) || x.tags.includes(import_vscode_languageserver_protocol20.DiagnosticTag.Deprecated));
11471       }
11472       return enabled;
11473     });
11474   }
11475   suggestionsEnabled(uri) {
11476     let doc = import_coc26.workspace.getDocument(uri);
11477     if (!doc)
11478       return false;
11479     if (doc.filetype.startsWith("javascript")) {
11480       return this._enableJavascriptSuggestions;
11481     }
11482     if (doc.filetype.startsWith("typescript")) {
11483       return this._enableTypescriptSuggestions;
11484     }
11485     return true;
11486   }
11487 };
11488
11489 // src/server/requestQueue.ts
11490 var RequestQueueingType;
11491 (function(RequestQueueingType2) {
11492   RequestQueueingType2[RequestQueueingType2["Normal"] = 1] = "Normal";
11493   RequestQueueingType2[RequestQueueingType2["LowPriority"] = 2] = "LowPriority";
11494   RequestQueueingType2[RequestQueueingType2["Fence"] = 3] = "Fence";
11495 })(RequestQueueingType || (RequestQueueingType = {}));
11496 var RequestQueue = class {
11497   constructor() {
11498     this.queue = [];
11499     this.sequenceNumber = 0;
11500   }
11501   get length() {
11502     return this.queue.length;
11503   }
11504   enqueue(item) {
11505     if (item.queueingType === 1) {
11506       let index = this.queue.length - 1;
11507       while (index >= 0) {
11508         if (this.queue[index].queueingType !== 2) {
11509           break;
11510         }
11511         --index;
11512       }
11513       this.queue.splice(index + 1, 0, item);
11514     } else {
11515       this.queue.push(item);
11516     }
11517   }
11518   dequeue() {
11519     return this.queue.shift();
11520   }
11521   tryDeletePendingRequest(seq) {
11522     for (let i = 0; i < this.queue.length; i++) {
11523       if (this.queue[i].request.seq === seq) {
11524         this.queue.splice(i, 1);
11525         return true;
11526       }
11527     }
11528     return false;
11529   }
11530   createRequest(command, args) {
11531     return {
11532       seq: this.sequenceNumber++,
11533       type: "request",
11534       command,
11535       arguments: args
11536     };
11537   }
11538 };
11539
11540 // src/server/utils/configuration.ts
11541 var import_coc27 = __toModule(require("coc.nvim"));
11542 var import_which = __toModule(require_which());
11543 var TsServerLogLevel;
11544 (function(TsServerLogLevel2) {
11545   TsServerLogLevel2[TsServerLogLevel2["Off"] = 0] = "Off";
11546   TsServerLogLevel2[TsServerLogLevel2["Normal"] = 1] = "Normal";
11547   TsServerLogLevel2[TsServerLogLevel2["Terse"] = 2] = "Terse";
11548   TsServerLogLevel2[TsServerLogLevel2["Verbose"] = 3] = "Verbose";
11549 })(TsServerLogLevel || (TsServerLogLevel = {}));
11550 (function(TsServerLogLevel2) {
11551   function fromString(value) {
11552     switch (value && value.toLowerCase()) {
11553       case "normal":
11554         return TsServerLogLevel2.Normal;
11555       case "terse":
11556         return TsServerLogLevel2.Terse;
11557       case "verbose":
11558         return TsServerLogLevel2.Verbose;
11559       case "off":
11560       default:
11561         return TsServerLogLevel2.Off;
11562     }
11563   }
11564   TsServerLogLevel2.fromString = fromString;
11565   function toString2(value) {
11566     switch (value) {
11567       case TsServerLogLevel2.Normal:
11568         return "normal";
11569       case TsServerLogLevel2.Terse:
11570         return "terse";
11571       case TsServerLogLevel2.Verbose:
11572         return "verbose";
11573       case TsServerLogLevel2.Off:
11574       default:
11575         return "off";
11576     }
11577   }
11578   TsServerLogLevel2.toString = toString2;
11579 })(TsServerLogLevel || (TsServerLogLevel = {}));
11580 var TypeScriptServiceConfiguration = class {
11581   constructor() {
11582     this._configuration = import_coc27.workspace.getConfiguration("tsserver");
11583     import_coc27.workspace.onDidChangeConfiguration(() => {
11584       this._configuration = import_coc27.workspace.getConfiguration("tsserver");
11585     });
11586   }
11587   get locale() {
11588     return this._configuration.get("locale", null);
11589   }
11590   get globalTsdk() {
11591     return this._configuration.get("tsdk", null);
11592   }
11593   get ignoreLocalTsserver() {
11594     return this._configuration.get("ignoreLocalTsserver", false);
11595   }
11596   get tsServerLogLevel() {
11597     return TsServerLogLevel.fromString(this._configuration.get("log", null));
11598   }
11599   get watchOptions() {
11600     return this._configuration.get("watchOptions");
11601   }
11602   get typingsCacheLocation() {
11603     return this._configuration.get("typingsCacheLocation", "");
11604   }
11605   get tsServerPluginPaths() {
11606     return this._configuration.get("pluginPaths", []);
11607   }
11608   get checkJs() {
11609     return this._configuration.get("implicitProjectConfig.checkJs", false);
11610   }
11611   get experimentalDecorators() {
11612     return this._configuration.get("implicitProjectConfig.experimentalDecorators", false);
11613   }
11614   get disableAutomaticTypeAcquisition() {
11615     return this._configuration.get("disableAutomaticTypeAcquisition", false);
11616   }
11617   get formatOnType() {
11618     return this._configuration.get("formatOnType", false);
11619   }
11620   get maxTsServerMemory() {
11621     return this._configuration.get("maxTsServerMemory", 0);
11622   }
11623   get debugPort() {
11624     return this._configuration.get("debugPort", parseInt(process.env["TSS_DEBUG"], 10));
11625   }
11626   get npmLocation() {
11627     let path9 = this._configuration.get("npm", "");
11628     if (path9)
11629       return import_coc27.workspace.expand(path9);
11630     try {
11631       path9 = import_which.default.sync("npm");
11632     } catch (e) {
11633       return null;
11634     }
11635     return path9;
11636   }
11637   static loadFromWorkspace() {
11638     return new TypeScriptServiceConfiguration();
11639   }
11640 };
11641
11642 // src/server/utils/logger.ts
11643 var import_coc28 = __toModule(require("coc.nvim"));
11644
11645 // src/server/utils/is.ts
11646 var toString = Object.prototype.toString;
11647 function boolean(value) {
11648   return value === true || value === false;
11649 }
11650 function string(value) {
11651   return toString.call(value) === "[object String]";
11652 }
11653
11654 // src/server/utils/logger.ts
11655 var Logger = class {
11656   get output() {
11657     if (this._channel) {
11658       return this._channel;
11659     }
11660     this._channel = import_coc28.window.createOutputChannel("tsserver");
11661     return this._channel;
11662   }
11663   dispose() {
11664     if (this._channel) {
11665       this._channel.dispose();
11666     }
11667   }
11668   data2String(data) {
11669     if (data instanceof Error) {
11670       if (string(data.stack)) {
11671         return data.stack;
11672       }
11673       return data.message;
11674     }
11675     if (boolean(data.success) && !data.success && string(data.message)) {
11676       return data.message;
11677     }
11678     if (string(data)) {
11679       return data;
11680     }
11681     return data.toString();
11682   }
11683   info(message, data) {
11684     this.logLevel("Info", message, data);
11685   }
11686   warn(message, data) {
11687     this.logLevel("Warn", message, data);
11688   }
11689   error(message, data) {
11690     if (data && data.message === "No content available.") {
11691       return;
11692     }
11693     this.logLevel("Error", message, data);
11694   }
11695   logLevel(level, message, data) {
11696     this.output.appendLine(`[${level}  - ${new Date().toLocaleTimeString()}] ${message}`);
11697     if (data) {
11698       this.output.appendLine(this.data2String(data));
11699     }
11700   }
11701 };
11702 var logger_default = Logger;
11703
11704 // src/server/utils/process.ts
11705 var import_child_process2 = __toModule(require("child_process"));
11706 var import_net = __toModule(require("net"));
11707 var import_os = __toModule(require("os"));
11708 var import_path6 = __toModule(require("path"));
11709 var import_fs2 = __toModule(require("fs"));
11710 function makeRandomHexString(length) {
11711   let chars = ["0", "1", "2", "3", "4", "5", "6", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
11712   let result = "";
11713   for (let i = 0; i < length; i++) {
11714     const idx = Math.floor(chars.length * Math.random());
11715     result += chars[idx];
11716   }
11717   return result;
11718 }
11719 function getTempDirectory() {
11720   let dir = import_path6.default.join(import_os.default.tmpdir(), `coc.nvim-${process.pid}`);
11721   if (!import_fs2.default.existsSync(dir)) {
11722     import_fs2.default.mkdirSync(dir);
11723   }
11724   return dir;
11725 }
11726 function generatePipeName() {
11727   return getPipeName(makeRandomHexString(40));
11728 }
11729 function getPipeName(name) {
11730   const fullName = "coc-tsc-" + name;
11731   if (process.platform === "win32") {
11732     return "\\\\.\\pipe\\" + fullName + "-sock";
11733   }
11734   const tmpdir = getTempDirectory();
11735   return import_path6.default.join(tmpdir, fullName + ".sock");
11736 }
11737 function getTempFile(name) {
11738   const fullName = "coc-nvim-" + name;
11739   return import_path6.default.join(getTempDirectory(), fullName + ".sock");
11740 }
11741 function generatePatchedEnv(env, stdInPipeName, stdOutPipeName, stdErrPipeName) {
11742   const newEnv = Object.assign({}, env);
11743   newEnv["STDIN_PIPE_NAME"] = stdInPipeName;
11744   newEnv["STDOUT_PIPE_NAME"] = stdOutPipeName;
11745   newEnv["STDERR_PIPE_NAME"] = stdErrPipeName;
11746   newEnv["TSS_LOG"] = `-level verbose -file ${import_path6.default.join(import_os.default.tmpdir(), "coc-nvim-tsc.log")}`;
11747   newEnv["PATH"] = newEnv["PATH"] || process.env.PATH;
11748   return newEnv;
11749 }
11750 function fork(modulePath, args, options, logger, callback) {
11751   let callbackCalled = false;
11752   const resolve = (result) => {
11753     if (callbackCalled) {
11754       return;
11755     }
11756     callbackCalled = true;
11757     callback(null, result);
11758   };
11759   const reject = (err) => {
11760     if (callbackCalled) {
11761       return;
11762     }
11763     callbackCalled = true;
11764     callback(err, null);
11765   };
11766   const stdInPipeName = generatePipeName();
11767   const stdOutPipeName = generatePipeName();
11768   const stdErrPipeName = generatePipeName();
11769   const newEnv = generatePatchedEnv(process.env, stdInPipeName, stdOutPipeName, stdErrPipeName);
11770   newEnv["NODE_PATH"] = import_path6.default.join(modulePath, "..", "..", "..");
11771   let childProcess;
11772   let stdErrServer = import_net.default.createServer((stdErrStream) => {
11773     childProcess.stderr = stdErrStream;
11774   });
11775   stdErrServer.listen(stdErrPipeName);
11776   let stdOutServer = import_net.default.createServer((stdOutStream) => {
11777     stdOutStream.once("data", (_chunk) => {
11778       childProcess.stdin = import_net.default.connect(stdInPipeName);
11779       childProcess.stdout = stdOutStream;
11780       resolve(childProcess);
11781     });
11782   });
11783   stdOutServer.listen(stdOutPipeName);
11784   let serverClosed = false;
11785   const closeServer = () => {
11786     if (serverClosed) {
11787       return;
11788     }
11789     serverClosed = true;
11790     stdOutServer.close();
11791     stdErrServer.close();
11792   };
11793   logger.info("Forking TSServer", `PATH: ${newEnv["PATH"]} `);
11794   const bootstrapperPath = import_path6.default.resolve(__dirname, "../bin/tsserverForkStart");
11795   childProcess = import_child_process2.default.fork(bootstrapperPath, [modulePath].concat(args), {
11796     silent: true,
11797     env: newEnv,
11798     execArgv: options.execArgv
11799   });
11800   childProcess.once("error", (err) => {
11801     closeServer();
11802     reject(err);
11803   });
11804   childProcess.once("exit", (err) => {
11805     closeServer();
11806     reject(err);
11807   });
11808 }
11809
11810 // src/server/utils/tracer.ts
11811 var import_coc29 = __toModule(require("coc.nvim"));
11812 var Trace;
11813 (function(Trace2) {
11814   Trace2[Trace2["Off"] = 0] = "Off";
11815   Trace2[Trace2["Messages"] = 1] = "Messages";
11816   Trace2[Trace2["Verbose"] = 2] = "Verbose";
11817 })(Trace || (Trace = {}));
11818 (function(Trace2) {
11819   function fromString(value) {
11820     value = value || "";
11821     value = value.toLowerCase();
11822     switch (value) {
11823       case "off":
11824         return Trace2.Off;
11825       case "messages":
11826         return Trace2.Messages;
11827       case "verbose":
11828         return Trace2.Verbose;
11829       default:
11830         return Trace2.Off;
11831     }
11832   }
11833   Trace2.fromString = fromString;
11834 })(Trace || (Trace = {}));
11835 var Tracer = class {
11836   constructor(logger) {
11837     this.logger = logger;
11838     this.trace = Tracer.readTrace();
11839   }
11840   static readTrace() {
11841     let result = Trace.fromString(import_coc29.workspace.getConfiguration("tsserver").get("trace.server", "off"));
11842     if (result === 0 && !!process.env.TSS_TRACE) {
11843       result = 1;
11844     }
11845     return result;
11846   }
11847   traceRequest(request, responseExpected, queueLength) {
11848     if (this.trace === 0)
11849       return;
11850     let data;
11851     if (this.trace === 2 && request.arguments) {
11852       data = `Arguments: ${JSON.stringify(request.arguments, null, 4)}`;
11853     }
11854     this.logTrace(`Sending request: ${request.command} (${request.seq}). Response expected: ${responseExpected ? "yes" : "no"}. Current queue length: ${queueLength}`, data);
11855   }
11856   traceResponse(response, startTime) {
11857     if (this.trace === 0) {
11858       return;
11859     }
11860     let data;
11861     if (this.trace === 2 && response.body) {
11862       data = `Result: ${JSON.stringify(response.body, null, 4)}`;
11863     }
11864     this.logTrace(`Response received: ${response.command} (${response.request_seq}). Request took ${Date.now() - startTime} ms. Success: ${response.success} ${!response.success ? ". Message: " + response.message : ""}`, data);
11865   }
11866   traceEvent(event) {
11867     if (this.trace === 0) {
11868       return;
11869     }
11870     let data;
11871     if (this.trace === 2 && event.body) {
11872       data = `Data: ${JSON.stringify(event.body, null, 4)}`;
11873     }
11874     this.logTrace(`Event received: ${event.event} (${event.seq}).`, data);
11875   }
11876   logTrace(message, data) {
11877     if (this.trace !== 0) {
11878       this.logger.logLevel("Trace", message, data);
11879     }
11880   }
11881   traceRequestCompleted(command, request_seq, startTime) {
11882     if (this.trace === 0) {
11883       return;
11884     }
11885     this.logTrace(`Async response received: ${command} (${request_seq}). Request took ${Date.now() - startTime} ms.`);
11886   }
11887 };
11888 var tracer_default = Tracer;
11889
11890 // src/server/utils/tsconfig.ts
11891 function inferredProjectConfig(config) {
11892   const base = {
11893     module: "commonjs",
11894     target: "es2016",
11895     jsx: "preserve"
11896   };
11897   if (config.checkJs) {
11898     base.checkJs = true;
11899   }
11900   if (config.experimentalDecorators) {
11901     base.experimentalDecorators = true;
11902   }
11903   return base;
11904 }
11905
11906 // src/server/utils/versionProvider.ts
11907 var import_coc30 = __toModule(require("coc.nvim"));
11908 var import_fs3 = __toModule(require("fs"));
11909 var import_path7 = __toModule(require("path"));
11910 var TypeScriptVersion = class {
11911   constructor(path9, _pathLabel) {
11912     this.path = path9;
11913     this._pathLabel = _pathLabel;
11914     this._api = null;
11915   }
11916   get tscPath() {
11917     return import_path7.default.resolve(this.path, "../bin/tsc");
11918   }
11919   get tsServerPath() {
11920     return import_path7.default.resolve(this.path, "tsserver.js");
11921   }
11922   get pathLabel() {
11923     return typeof this._pathLabel === "undefined" ? this.path : this._pathLabel;
11924   }
11925   get isValid() {
11926     return this.version != null;
11927   }
11928   get version() {
11929     if (this._api)
11930       return this._api;
11931     let api = this._api = this.getTypeScriptVersion(this.tsServerPath);
11932     return api;
11933   }
11934   get versionString() {
11935     const version = this.version;
11936     return version ? version.versionString : null;
11937   }
11938   getTypeScriptVersion(serverPath) {
11939     if (!import_fs3.default.existsSync(serverPath)) {
11940       return void 0;
11941     }
11942     const p = serverPath.split(import_path7.default.sep);
11943     if (p.length <= 2) {
11944       return void 0;
11945     }
11946     const p2 = p.slice(0, -2);
11947     const modulePath = p2.join(import_path7.default.sep);
11948     let fileName = import_path7.default.join(modulePath, "package.json");
11949     if (!import_fs3.default.existsSync(fileName)) {
11950       if (import_path7.default.basename(modulePath) === "built") {
11951         fileName = import_path7.default.join(modulePath, "..", "package.json");
11952       }
11953     }
11954     if (!import_fs3.default.existsSync(fileName)) {
11955       return void 0;
11956     }
11957     const contents = import_fs3.default.readFileSync(fileName).toString();
11958     let desc = null;
11959     try {
11960       desc = JSON.parse(contents);
11961     } catch (err) {
11962       return void 0;
11963     }
11964     if (!desc || !desc.version) {
11965       return void 0;
11966     }
11967     return desc.version ? api_default.fromVersionString(desc.version) : void 0;
11968   }
11969 };
11970 var MODULE_FOLDERS = ["node_modules/typescript/lib", ".vscode/pnpify/typescript/lib", ".yarn/sdks/typescript/lib"];
11971 var TypeScriptVersionProvider = class {
11972   constructor(configuration) {
11973     this.configuration = configuration;
11974   }
11975   updateConfiguration(configuration) {
11976     this.configuration = configuration;
11977   }
11978   getDefaultVersion() {
11979     let {globalTsdk} = this.configuration;
11980     if (globalTsdk)
11981       return new TypeScriptVersion(globalTsdk);
11982     return this.bundledVersion;
11983   }
11984   get globalVersion() {
11985     let {globalTsdk} = this.configuration;
11986     if (globalTsdk)
11987       return new TypeScriptVersion(import_coc30.workspace.expand(globalTsdk));
11988     return void 0;
11989   }
11990   getLocalVersion() {
11991     let folders = import_coc30.workspace.workspaceFolders.map((f) => import_coc30.Uri.parse(f.uri).fsPath);
11992     for (let p of folders) {
11993       for (let folder of MODULE_FOLDERS) {
11994         let libFolder = import_path7.default.join(p, folder);
11995         if (import_fs3.default.existsSync(libFolder)) {
11996           let version = new TypeScriptVersion(libFolder);
11997           if (version.isValid)
11998             return version;
11999         }
12000       }
12001     }
12002     return null;
12003   }
12004   get bundledVersion() {
12005     try {
12006       const file2 = require.resolve("typescript");
12007       const bundledVersion = new TypeScriptVersion(import_path7.default.dirname(file2), "");
12008       return bundledVersion;
12009     } catch (e) {
12010       import_coc30.window.showMessage("Bundled typescript module not found", "error");
12011       return null;
12012     }
12013   }
12014 };
12015
12016 // src/server/utils/versionStatus.ts
12017 var import_coc31 = __toModule(require("coc.nvim"));
12018 var VersionStatus = class {
12019   constructor(_normalizePath, enableJavascript) {
12020     this._normalizePath = _normalizePath;
12021     this.enableJavascript = enableJavascript;
12022     this._versionString = "";
12023     this._versionBarEntry = import_coc31.window.createStatusBarItem(99);
12024     this._onChangeEditorSub = import_coc31.events.on("BufEnter", this.onBufEnter, this);
12025     this._versionBarEntry.show();
12026   }
12027   dispose() {
12028     this._versionBarEntry.dispose();
12029     this._onChangeEditorSub.dispose();
12030   }
12031   onDidChangeTypeScriptVersion(version) {
12032     this._versionString = version.versionString;
12033   }
12034   set loading(isLoading) {
12035     if (isLoading) {
12036       this._versionBarEntry.text = `Initializing tsserver ${this._versionString}`;
12037     } else {
12038       this._versionBarEntry.text = `TSC ${this._versionString}`;
12039     }
12040     this._versionBarEntry.isProgress = isLoading;
12041   }
12042   checkFiletype(filetype) {
12043     if (filetype.startsWith("javascript") && this.enableJavascript) {
12044       return true;
12045     }
12046     return filetype.startsWith("typescript");
12047   }
12048   async onBufEnter(bufnr) {
12049     let filetype = await import_coc31.workspace.nvim.call("getbufvar", [bufnr, "&filetype", ""]);
12050     if (this.checkFiletype(filetype)) {
12051       this._versionBarEntry.show();
12052     } else {
12053       this._versionBarEntry.hide();
12054     }
12055   }
12056 };
12057 var versionStatus_default = VersionStatus;
12058
12059 // src/server/utils/wireProtocol.ts
12060 var DefaultSize = 8192;
12061 var ContentLength = "Content-Length: ";
12062 var ContentLengthSize = Buffer.byteLength(ContentLength, "utf8");
12063 var Blank = Buffer.from(" ", "utf8")[0];
12064 var BackslashR = Buffer.from("\r", "utf8")[0];
12065 var BackslashN = Buffer.from("\n", "utf8")[0];
12066 var ProtocolBuffer = class {
12067   constructor() {
12068     this.index = 0;
12069     this.buffer = Buffer.allocUnsafe(DefaultSize);
12070   }
12071   append(data) {
12072     let toAppend = null;
12073     if (Buffer.isBuffer(data)) {
12074       toAppend = data;
12075     } else {
12076       toAppend = Buffer.from(data, "utf8");
12077     }
12078     if (this.buffer.length - this.index >= toAppend.length) {
12079       toAppend.copy(this.buffer, this.index, 0, toAppend.length);
12080     } else {
12081       let newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
12082       if (this.index === 0) {
12083         this.buffer = Buffer.allocUnsafe(newSize);
12084         toAppend.copy(this.buffer, 0, 0, toAppend.length);
12085       } else {
12086         this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
12087       }
12088     }
12089     this.index += toAppend.length;
12090   }
12091   tryReadContentLength() {
12092     let result = -1;
12093     let current = 0;
12094     while (current < this.index && (this.buffer[current] === Blank || this.buffer[current] === BackslashR || this.buffer[current] === BackslashN)) {
12095       current++;
12096     }
12097     if (this.index < current + ContentLengthSize) {
12098       return result;
12099     }
12100     current += ContentLengthSize;
12101     let start = current;
12102     while (current < this.index && this.buffer[current] !== BackslashR) {
12103       current++;
12104     }
12105     if (current + 3 >= this.index || this.buffer[current + 1] !== BackslashN || this.buffer[current + 2] !== BackslashR || this.buffer[current + 3] !== BackslashN) {
12106       return result;
12107     }
12108     let data = this.buffer.toString("utf8", start, current);
12109     result = parseInt(data, 10);
12110     this.buffer = this.buffer.slice(current + 4);
12111     this.index = this.index - (current + 4);
12112     return result;
12113   }
12114   tryReadContent(length) {
12115     if (this.index < length) {
12116       return null;
12117     }
12118     let result = this.buffer.toString("utf8", 0, length);
12119     let sourceStart = length;
12120     while (sourceStart < this.index && (this.buffer[sourceStart] === BackslashR || this.buffer[sourceStart] === BackslashN)) {
12121       sourceStart++;
12122     }
12123     this.buffer.copy(this.buffer, 0, sourceStart);
12124     this.index = this.index - sourceStart;
12125     return result;
12126   }
12127 };
12128 var Reader = class {
12129   constructor(readable, callback, onError) {
12130     this.readable = readable;
12131     this.callback = callback;
12132     this.onError = onError;
12133     this.buffer = new ProtocolBuffer();
12134     this.nextMessageLength = -1;
12135     this.readable.on("data", (data) => {
12136       this.onLengthData(data);
12137     });
12138   }
12139   onLengthData(data) {
12140     try {
12141       this.buffer.append(data);
12142       while (true) {
12143         if (this.nextMessageLength === -1) {
12144           this.nextMessageLength = this.buffer.tryReadContentLength();
12145           if (this.nextMessageLength === -1) {
12146             return;
12147           }
12148         }
12149         const msg = this.buffer.tryReadContent(this.nextMessageLength);
12150         if (msg === null) {
12151           return;
12152         }
12153         this.nextMessageLength = -1;
12154         const json = JSON.parse(msg);
12155         this.callback(json);
12156       }
12157     } catch (e) {
12158       this.onError(e);
12159     }
12160   }
12161 };
12162
12163 // src/server/typescriptServiceClient.ts
12164 var ForkedTsServerProcess = class {
12165   constructor(childProcess) {
12166     this.childProcess = childProcess;
12167     this.toCancelOnResourceChange = new Set();
12168   }
12169   onError(cb) {
12170     this.childProcess.on("error", cb);
12171   }
12172   onExit(cb) {
12173     this.childProcess.on("exit", cb);
12174   }
12175   write(serverRequest) {
12176     this.childProcess.stdin.write(JSON.stringify(serverRequest) + "\r\n", "utf8");
12177   }
12178   createReader(callback, onError) {
12179     new Reader(this.childProcess.stdout, callback, onError);
12180   }
12181   kill() {
12182     this.childProcess.kill();
12183   }
12184 };
12185 var TypeScriptServiceClient = class {
12186   constructor(pluginManager, modeIds) {
12187     this.pluginManager = pluginManager;
12188     this.modeIds = modeIds;
12189     this.state = import_coc32.ServiceStat.Initial;
12190     this.logger = new logger_default();
12191     this.tsServerLogFile = null;
12192     this.cancellationPipeName = null;
12193     this._callbacks = new CallbackMap();
12194     this._requestQueue = new RequestQueue();
12195     this._pendingResponses = new Set();
12196     this._onTsServerStarted = new import_vscode_languageserver_protocol21.Emitter();
12197     this._onProjectLanguageServiceStateChanged = new import_vscode_languageserver_protocol21.Emitter();
12198     this._onDidBeginInstallTypings = new import_vscode_languageserver_protocol21.Emitter();
12199     this._onDidEndInstallTypings = new import_vscode_languageserver_protocol21.Emitter();
12200     this._onTypesInstallerInitializationFailed = new import_vscode_languageserver_protocol21.Emitter();
12201     this.disposables = [];
12202     this.isRestarting = false;
12203     this._onDiagnosticsReceived = new import_vscode_languageserver_protocol21.Emitter();
12204     this._onConfigDiagnosticsReceived = new import_vscode_languageserver_protocol21.Emitter();
12205     this._onResendModelsRequested = new import_vscode_languageserver_protocol21.Emitter();
12206     this.pathSeparator = import_path8.default.sep;
12207     this.lastStart = Date.now();
12208     this.servicePromise = null;
12209     this.lastError = null;
12210     this.numberRestarts = 0;
12211     this.fileConfigurationManager = new fileConfigurationManager_default(this);
12212     this._configuration = TypeScriptServiceConfiguration.loadFromWorkspace();
12213     this.versionProvider = new TypeScriptVersionProvider(this._configuration);
12214     this._apiVersion = api_default.defaultVersion;
12215     this.tracer = new tracer_default(this.logger);
12216     this.versionStatus = new versionStatus_default(this.normalizePath.bind(this), this.fileConfigurationManager.enableJavascript());
12217     pluginManager.onDidUpdateConfig((update) => {
12218       this.configurePlugin(update.pluginId, update.config);
12219     }, null, this.disposables);
12220     pluginManager.onDidChangePlugins(() => {
12221       this.restartTsServer();
12222     }, null, this.disposables);
12223     this.bufferSyncSupport = new bufferSyncSupport_default(this, modeIds);
12224     this.onTsServerStarted(() => {
12225       this.bufferSyncSupport.listen();
12226     });
12227     this.diagnosticsManager = new DiagnosticsManager();
12228     this.bufferSyncSupport.onDelete((resource) => {
12229       this.cancelInflightRequestsForResource(resource);
12230       this.diagnosticsManager.delete(resource);
12231     }, null, this.disposables);
12232     this.bufferSyncSupport.onWillChange((resource) => {
12233       this.cancelInflightRequestsForResource(resource);
12234     });
12235   }
12236   get onDiagnosticsReceived() {
12237     return this._onDiagnosticsReceived.event;
12238   }
12239   get onConfigDiagnosticsReceived() {
12240     return this._onConfigDiagnosticsReceived.event;
12241   }
12242   get onResendModelsRequested() {
12243     return this._onResendModelsRequested.event;
12244   }
12245   get configuration() {
12246     return this._configuration;
12247   }
12248   dispose() {
12249     if (this.servicePromise) {
12250       this.servicePromise.then((childProcess) => {
12251         childProcess.kill();
12252       }).then(void 0, () => void 0);
12253     }
12254     this.bufferSyncSupport.dispose();
12255     this.logger.dispose();
12256     this._onTsServerStarted.dispose();
12257     this._onResendModelsRequested.dispose();
12258     this.versionStatus.dispose();
12259   }
12260   info(message, data) {
12261     this.logger.info(message, data);
12262   }
12263   error(message, data) {
12264     this.logger.error(message, data);
12265   }
12266   restartTsServer() {
12267     const start = () => {
12268       this.servicePromise = this.startService(true);
12269       return this.servicePromise;
12270     };
12271     if (this.servicePromise) {
12272       return Promise.resolve(this.servicePromise.then((childProcess) => {
12273         this.state = import_coc32.ServiceStat.Stopping;
12274         this.info("Killing TS Server");
12275         this.isRestarting = true;
12276         childProcess.kill();
12277         this.servicePromise = null;
12278       }).then(start));
12279     } else {
12280       return Promise.resolve(start());
12281     }
12282   }
12283   stop() {
12284     if (!this.servicePromise)
12285       return;
12286     return new Promise((resolve, reject) => {
12287       this.servicePromise.then((childProcess) => {
12288         if (this.state == import_coc32.ServiceStat.Running) {
12289           this.info("Killing TS Server");
12290           childProcess.onExit(() => {
12291             resolve();
12292           });
12293           childProcess.kill();
12294           this.servicePromise = null;
12295         } else {
12296           resolve();
12297         }
12298       }, reject);
12299     });
12300   }
12301   get onTsServerStarted() {
12302     return this._onTsServerStarted.event;
12303   }
12304   get onProjectLanguageServiceStateChanged() {
12305     return this._onProjectLanguageServiceStateChanged.event;
12306   }
12307   get onDidBeginInstallTypings() {
12308     return this._onDidBeginInstallTypings.event;
12309   }
12310   get onDidEndInstallTypings() {
12311     return this._onDidEndInstallTypings.event;
12312   }
12313   get onTypesInstallerInitializationFailed() {
12314     return this._onTypesInstallerInitializationFailed.event;
12315   }
12316   get apiVersion() {
12317     return this._apiVersion;
12318   }
12319   get tscPath() {
12320     return this._tscPath;
12321   }
12322   service() {
12323     if (this.servicePromise) {
12324       return this.servicePromise;
12325     }
12326     if (this.lastError) {
12327       return Promise.reject(this.lastError);
12328     }
12329     return this.startService().then(() => {
12330       if (this.servicePromise) {
12331         return this.servicePromise;
12332       }
12333     });
12334   }
12335   ensureServiceStarted() {
12336     if (!this.servicePromise) {
12337       this.startService().catch((err) => {
12338         import_coc32.window.showMessage(`TSServer start failed: ${err.message}`, "error");
12339         this.error(`Service start failed: ${err.stack}`);
12340       });
12341     }
12342   }
12343   async startService(resendModels = false) {
12344     const {ignoreLocalTsserver} = this.configuration;
12345     let currentVersion;
12346     if (!ignoreLocalTsserver)
12347       currentVersion = this.versionProvider.getLocalVersion();
12348     if (!currentVersion || !import_fs4.default.existsSync(currentVersion.tsServerPath)) {
12349       currentVersion = this.versionProvider.getDefaultVersion();
12350     }
12351     if (!currentVersion || !currentVersion.isValid) {
12352       if (this.configuration.globalTsdk) {
12353         import_coc32.window.showMessage(`Can not find typescript module, in 'tsserver.tsdk': ${this.configuration.globalTsdk}`, "error");
12354       } else {
12355         import_coc32.window.showMessage(`Can not find typescript module, run ':CocInstall coc-tsserver' to fix it!`, "error");
12356       }
12357       return;
12358     }
12359     this._apiVersion = currentVersion.version;
12360     this._tscPath = currentVersion.tscPath;
12361     this.versionStatus.onDidChangeTypeScriptVersion(currentVersion);
12362     this.lastError = null;
12363     const tsServerForkArgs = await this.getTsServerArgs(currentVersion);
12364     const debugPort = this._configuration.debugPort;
12365     const maxTsServerMemory = this._configuration.maxTsServerMemory;
12366     const options = {
12367       execArgv: [
12368         ...debugPort ? [`--inspect=${debugPort}`] : [],
12369         ...maxTsServerMemory ? [`--max-old-space-size=${maxTsServerMemory}`] : []
12370       ],
12371       cwd: import_coc32.workspace.root
12372     };
12373     this.servicePromise = this.startProcess(currentVersion, tsServerForkArgs, options, resendModels);
12374     return this.servicePromise;
12375   }
12376   startProcess(currentVersion, args, options, resendModels) {
12377     this.state = import_coc32.ServiceStat.Starting;
12378     return new Promise((resolve, reject) => {
12379       try {
12380         fork(currentVersion.tsServerPath, args, options, this.logger, (err, childProcess) => {
12381           if (err || !childProcess) {
12382             this.state = import_coc32.ServiceStat.StartFailed;
12383             this.lastError = err;
12384             this.error("Starting TSServer failed with error.", err.stack);
12385             return;
12386           }
12387           this.state = import_coc32.ServiceStat.Running;
12388           this.info("Started TSServer", JSON.stringify(currentVersion, null, 2));
12389           const handle = new ForkedTsServerProcess(childProcess);
12390           this.tsServerProcess = handle;
12391           this.lastStart = Date.now();
12392           handle.onError((err2) => {
12393             this.lastError = err2;
12394             this.error("TSServer errored with error.", err2);
12395             this.error(`TSServer log file: ${this.tsServerLogFile || ""}`);
12396             import_coc32.window.showMessage(`TSServer errored with error. ${err2.message}`, "error");
12397             this.serviceExited(false);
12398           });
12399           handle.onExit((code) => {
12400             if (code == null) {
12401               this.info("TSServer normal exit");
12402             } else {
12403               this.error(`TSServer exited with code: ${code}`);
12404             }
12405             this.info(`TSServer log file: ${this.tsServerLogFile || ""}`);
12406             this.serviceExited(!this.isRestarting);
12407             this.isRestarting = false;
12408           });
12409           handle.createReader((msg) => {
12410             this.dispatchMessage(msg);
12411           }, (error) => {
12412             this.error("ReaderError", error);
12413           });
12414           resolve(handle);
12415           this.serviceStarted(resendModels);
12416           this._onTsServerStarted.fire(currentVersion.version);
12417         });
12418       } catch (e) {
12419         reject(e);
12420       }
12421     });
12422   }
12423   async openTsServerLogFile() {
12424     const isRoot = process.getuid && process.getuid() == 0;
12425     let echoErr = (msg) => {
12426       import_coc32.window.showMessage(msg, "error");
12427     };
12428     if (isRoot) {
12429       echoErr("Log disabled for root user.");
12430       return false;
12431     }
12432     if (!this.apiVersion.gte(api_default.v222)) {
12433       echoErr("TS Server logging requires TS 2.2.2+");
12434       return false;
12435     }
12436     if (this._configuration.tsServerLogLevel === TsServerLogLevel.Off) {
12437       echoErr(`TS Server logging is off. Change 'tsserver.log' in 'coc-settings.json' to enable`);
12438       return false;
12439     }
12440     if (!this.tsServerLogFile) {
12441       echoErr("TS Server has not started logging.");
12442       return false;
12443     }
12444     try {
12445       await import_coc32.workspace.nvim.command(`edit ${this.tsServerLogFile}`);
12446       return true;
12447     } catch {
12448       echoErr("Could not open TS Server log file");
12449       return false;
12450     }
12451   }
12452   serviceStarted(resendModels) {
12453     this.bufferSyncSupport.reset();
12454     const watchOptions = this.apiVersion.gte(api_default.v380) ? this.configuration.watchOptions : void 0;
12455     const configureOptions = {
12456       hostInfo: "coc-nvim",
12457       preferences: {
12458         providePrefixAndSuffixTextForRename: true,
12459         allowRenameOfImportPath: true
12460       },
12461       watchOptions
12462     };
12463     this.executeWithoutWaitingForResponse("configure", configureOptions);
12464     this.setCompilerOptionsForInferredProjects(this._configuration);
12465     if (resendModels) {
12466       this._onResendModelsRequested.fire(void 0);
12467       this.fileConfigurationManager.reset();
12468       this.diagnosticsManager.reInitialize();
12469       this.bufferSyncSupport.reinitialize();
12470     }
12471     for (const [config, pluginName] of this.pluginManager.configurations()) {
12472       this.configurePlugin(config, pluginName);
12473     }
12474   }
12475   setCompilerOptionsForInferredProjects(configuration) {
12476     if (!this.apiVersion.gte(api_default.v206))
12477       return;
12478     const args = {
12479       options: this.getCompilerOptionsForInferredProjects(configuration)
12480     };
12481     this.executeWithoutWaitingForResponse("compilerOptionsForInferredProjects", args);
12482   }
12483   getCompilerOptionsForInferredProjects(configuration) {
12484     return {
12485       ...inferredProjectConfig(configuration),
12486       allowJs: true,
12487       allowSyntheticDefaultImports: true,
12488       allowNonTsExtensions: true
12489     };
12490   }
12491   serviceExited(restart) {
12492     this.state = import_coc32.ServiceStat.Stopped;
12493     this.servicePromise = null;
12494     this.tsServerLogFile = null;
12495     this._callbacks.destroy("Service died.");
12496     this._callbacks = new CallbackMap();
12497     this._requestQueue = new RequestQueue();
12498     this._pendingResponses = new Set();
12499     if (restart) {
12500       const diff = Date.now() - this.lastStart;
12501       this.numberRestarts++;
12502       let startService = true;
12503       if (this.numberRestarts > 5) {
12504         this.numberRestarts = 0;
12505         if (diff < 10 * 1e3) {
12506           this.lastStart = Date.now();
12507           startService = false;
12508           import_coc32.window.showMessage("The TypeScript language service died 5 times right after it got started.", "error");
12509         } else if (diff < 60 * 1e3) {
12510           this.lastStart = Date.now();
12511           import_coc32.window.showMessage("The TypeScript language service died unexpectedly 5 times in the last 5 Minutes.", "error");
12512         }
12513       }
12514       if (startService) {
12515         this.startService(true);
12516       }
12517     }
12518   }
12519   toPath(uri) {
12520     return this.normalizePath(import_coc32.Uri.parse(uri));
12521   }
12522   toOpenedFilePath(uri, options = {}) {
12523     if (!this.bufferSyncSupport.ensureHasBuffer(uri)) {
12524       if (!options.suppressAlertOnFailure) {
12525         console.error(`Unexpected resource ${uri}`);
12526       }
12527       return void 0;
12528     }
12529     return this.toPath(uri);
12530   }
12531   toResource(filepath) {
12532     if (this._apiVersion.gte(api_default.v213)) {
12533       if (filepath.startsWith(this.inMemoryResourcePrefix + "untitled:")) {
12534         let resource = import_coc32.Uri.parse(filepath);
12535         if (this.inMemoryResourcePrefix) {
12536           const dirName = import_path8.default.dirname(resource.path);
12537           const fileName = import_path8.default.basename(resource.path);
12538           if (fileName.startsWith(this.inMemoryResourcePrefix)) {
12539             resource = resource.with({path: import_path8.default.posix.join(dirName, fileName.slice(this.inMemoryResourcePrefix.length))});
12540           }
12541         }
12542         return resource.toString();
12543       }
12544     }
12545     return import_coc32.Uri.file(filepath).toString();
12546   }
12547   normalizePath(resource) {
12548     if (disabledSchemes.has(resource.scheme)) {
12549       return void 0;
12550     }
12551     switch (resource.scheme) {
12552       case file: {
12553         let result = resource.fsPath;
12554         if (!result)
12555           return void 0;
12556         result = import_path8.default.normalize(result);
12557         return result.replace(new RegExp("\\" + this.pathSeparator, "g"), "/");
12558       }
12559       default: {
12560         return this.inMemoryResourcePrefix + resource.toString(true);
12561       }
12562     }
12563   }
12564   getDocument(resource) {
12565     if (resource.startsWith("untitled:")) {
12566       let bufnr = parseInt(resource.split(":", 2)[1], 10);
12567       return import_coc32.workspace.getDocument(bufnr);
12568     }
12569     return import_coc32.workspace.getDocument(resource);
12570   }
12571   get inMemoryResourcePrefix() {
12572     return this._apiVersion.gte(api_default.v270) ? "^" : "";
12573   }
12574   asUrl(filepath) {
12575     if (this._apiVersion.gte(api_default.v213)) {
12576       if (filepath.startsWith(this.inMemoryResourcePrefix + "untitled:")) {
12577         let resource = import_coc32.Uri.parse(filepath.slice(this.inMemoryResourcePrefix.length));
12578         if (this.inMemoryResourcePrefix) {
12579           const dirName = import_path8.default.dirname(resource.path);
12580           const fileName = import_path8.default.basename(resource.path);
12581           if (fileName.startsWith(this.inMemoryResourcePrefix)) {
12582             resource = resource.with({
12583               path: import_path8.default.posix.join(dirName, fileName.slice(this.inMemoryResourcePrefix.length))
12584             });
12585           }
12586         }
12587         return resource;
12588       }
12589     }
12590     return import_coc32.Uri.file(filepath);
12591   }
12592   execute(command, args, token, config) {
12593     var _a;
12594     let execution;
12595     if (config == null ? void 0 : config.cancelOnResourceChange) {
12596       const source = new import_vscode_languageserver_protocol21.CancellationTokenSource();
12597       token.onCancellationRequested(() => source.cancel());
12598       const inFlight = {
12599         resource: config.cancelOnResourceChange,
12600         cancel: () => source.cancel()
12601       };
12602       (_a = this.tsServerProcess) == null ? void 0 : _a.toCancelOnResourceChange.add(inFlight);
12603       execution = this.executeImpl(command, args, {
12604         isAsync: false,
12605         token: source.token,
12606         expectsResult: true,
12607         ...config
12608       }).finally(() => {
12609         var _a2;
12610         (_a2 = this.tsServerProcess) == null ? void 0 : _a2.toCancelOnResourceChange.delete(inFlight);
12611         source.dispose();
12612       });
12613     } else {
12614       execution = this.executeImpl(command, args, {
12615         isAsync: false,
12616         token,
12617         expectsResult: true,
12618         ...config
12619       });
12620     }
12621     if (config == null ? void 0 : config.nonRecoverable) {
12622       execution.catch((err) => this.fatalError(command, err));
12623     }
12624     return execution;
12625   }
12626   fatalError(command, error) {
12627     console.error(`A non-recoverable error occured while executing tsserver command: ${command}`);
12628     if (this.state === import_coc32.ServiceStat.Running) {
12629       this.info("Killing TS Server by fatal error:", error);
12630       this.service().then((service) => {
12631         service.kill();
12632       });
12633     }
12634   }
12635   executeAsync(command, args, token) {
12636     return this.executeImpl(command, args, {
12637       isAsync: true,
12638       token,
12639       expectsResult: true
12640     });
12641   }
12642   executeWithoutWaitingForResponse(command, args) {
12643     this.executeImpl(command, args, {
12644       isAsync: false,
12645       token: void 0,
12646       expectsResult: false
12647     });
12648   }
12649   executeImpl(command, args, executeInfo) {
12650     if (this.servicePromise == null) {
12651       return Promise.resolve(void 0);
12652     }
12653     this.bufferSyncSupport.beforeCommand(command);
12654     const request = this._requestQueue.createRequest(command, args);
12655     const requestInfo = {
12656       request,
12657       expectsResponse: executeInfo.expectsResult,
12658       isAsync: executeInfo.isAsync,
12659       queueingType: getQueueingType(command, executeInfo.lowPriority)
12660     };
12661     let result;
12662     if (executeInfo.expectsResult) {
12663       result = new Promise((resolve, reject) => {
12664         this._callbacks.add(request.seq, {onSuccess: resolve, onError: reject, startTime: Date.now(), isAsync: executeInfo.isAsync}, executeInfo.isAsync);
12665         if (executeInfo.token) {
12666           executeInfo.token.onCancellationRequested(() => {
12667             this.tryCancelRequest(request.seq, command);
12668           });
12669         }
12670       }).catch((err) => {
12671         throw err;
12672       });
12673     }
12674     this._requestQueue.enqueue(requestInfo);
12675     this.sendNextRequests();
12676     return result;
12677   }
12678   sendNextRequests() {
12679     while (this._pendingResponses.size === 0 && this._requestQueue.length > 0) {
12680       const item = this._requestQueue.dequeue();
12681       if (item) {
12682         this.sendRequest(item);
12683       }
12684     }
12685   }
12686   sendRequest(requestItem) {
12687     const serverRequest = requestItem.request;
12688     this.tracer.traceRequest(serverRequest, requestItem.expectsResponse, this._requestQueue.length);
12689     if (requestItem.expectsResponse && !requestItem.isAsync) {
12690       this._pendingResponses.add(requestItem.request.seq);
12691     }
12692     this.service().then((childProcess) => {
12693       try {
12694         childProcess.write(serverRequest);
12695       } catch (err) {
12696         const callback = this.fetchCallback(serverRequest.seq);
12697         if (callback) {
12698           callback.onError(err);
12699         }
12700       }
12701     });
12702   }
12703   tryCancelRequest(seq, command) {
12704     try {
12705       if (this._requestQueue.tryDeletePendingRequest(seq)) {
12706         this.tracer.logTrace(`TypeScript Server: canceled request with sequence number ${seq}`);
12707         return true;
12708       }
12709       if (this.cancellationPipeName) {
12710         this.tracer.logTrace(`TypeScript Server: trying to cancel ongoing request with sequence number ${seq}`);
12711         try {
12712           import_fs4.default.writeFileSync(this.cancellationPipeName + seq, "");
12713         } catch {
12714         }
12715         return true;
12716       }
12717       this.tracer.logTrace(`TypeScript Server: tried to cancel request with sequence number ${seq}. But request got already delivered.`);
12718       return false;
12719     } finally {
12720       const callback = this.fetchCallback(seq);
12721       if (callback) {
12722         callback.onSuccess(new ServerResponse.Cancelled(`Cancelled request ${seq} - ${command}`));
12723       }
12724     }
12725   }
12726   fetchCallback(seq) {
12727     const callback = this._callbacks.fetch(seq);
12728     if (!callback) {
12729       return void 0;
12730     }
12731     this._pendingResponses.delete(seq);
12732     return callback;
12733   }
12734   dispatchMessage(message) {
12735     try {
12736       switch (message.type) {
12737         case "response":
12738           this.dispatchResponse(message);
12739           break;
12740         case "event":
12741           const event = message;
12742           if (event.event === "requestCompleted") {
12743             const seq = event.body.request_seq;
12744             const p = this._callbacks.fetch(seq);
12745             if (p) {
12746               this.tracer.traceRequestCompleted("requestCompleted", seq, p.startTime);
12747               p.onSuccess(void 0);
12748             }
12749           } else {
12750             this.tracer.traceEvent(event);
12751             this.dispatchEvent(event);
12752           }
12753           break;
12754         default:
12755           throw new Error(`Unknown message type ${message.type} received`);
12756       }
12757     } finally {
12758       this.sendNextRequests();
12759     }
12760   }
12761   dispatchResponse(response) {
12762     const callback = this.fetchCallback(response.request_seq);
12763     if (!callback) {
12764       return;
12765     }
12766     this.tracer.traceResponse(response, callback.startTime);
12767     if (response.success) {
12768       callback.onSuccess(response);
12769     } else if (response.message === "No content available.") {
12770       callback.onSuccess(ServerResponse.NoContent);
12771     } else {
12772       callback.onError(new Error(response.message));
12773     }
12774   }
12775   dispatchEvent(event) {
12776     switch (event.event) {
12777       case "syntaxDiag":
12778       case "semanticDiag":
12779       case "suggestionDiag":
12780         const diagnosticEvent = event;
12781         if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) {
12782           this._onDiagnosticsReceived.fire({
12783             kind: getDiagnosticsKind(event),
12784             resource: this.asUrl(diagnosticEvent.body.file),
12785             diagnostics: diagnosticEvent.body.diagnostics
12786           });
12787         }
12788         break;
12789       case "configFileDiag":
12790         this._onConfigDiagnosticsReceived.fire(event);
12791         break;
12792       case "projectLanguageServiceState":
12793         if (event.body) {
12794           this._onProjectLanguageServiceStateChanged.fire(event.body);
12795         }
12796         break;
12797       case "beginInstallTypes":
12798         if (event.body) {
12799           this._onDidBeginInstallTypings.fire(event.body);
12800         }
12801         break;
12802       case "endInstallTypes":
12803         if (event.body) {
12804           this._onDidEndInstallTypings.fire(event.body);
12805         }
12806         break;
12807       case "projectsUpdatedInBackground":
12808         const body = event.body;
12809         const resources = body.openFiles.map(import_coc32.Uri.file);
12810         this.bufferSyncSupport.getErr(resources);
12811         break;
12812       case "typesInstallerInitializationFailed":
12813         if (event.body) {
12814           this._onTypesInstallerInitializationFailed.fire(event.body);
12815         }
12816         break;
12817       case "projectLoadingStart":
12818         this.versionStatus.loading = true;
12819         break;
12820       case "projectLoadingFinish":
12821         this.versionStatus.loading = false;
12822         break;
12823     }
12824   }
12825   async getTsServerArgs(currentVersion) {
12826     const args = [];
12827     args.push("--allowLocalPluginLoads");
12828     if (this.apiVersion.gte(api_default.v250)) {
12829       args.push("--useInferredProjectPerProjectRoot");
12830     } else {
12831       args.push("--useSingleInferredProject");
12832     }
12833     if (this.apiVersion.gte(api_default.v206) && this._configuration.disableAutomaticTypeAcquisition) {
12834       args.push("--disableAutomaticTypingAcquisition");
12835     }
12836     if (this.apiVersion.gte(api_default.v222)) {
12837       this.cancellationPipeName = getTempFile(`tscancellation-${makeRandomHexString(20)}`);
12838       args.push("--cancellationPipeName", this.cancellationPipeName + "*");
12839     }
12840     if (this.apiVersion.gte(api_default.v222)) {
12841       const isRoot = process.getuid && process.getuid() == 0;
12842       if (this._configuration.tsServerLogLevel !== TsServerLogLevel.Off && !isRoot) {
12843         const logDir = getTempDirectory();
12844         if (logDir) {
12845           this.tsServerLogFile = import_path8.default.join(logDir, `tsserver.log`);
12846           this.info("TSServer log file :", this.tsServerLogFile);
12847         } else {
12848           this.tsServerLogFile = null;
12849           this.error("Could not create TSServer log directory");
12850         }
12851         if (this.tsServerLogFile) {
12852           args.push("--logVerbosity", TsServerLogLevel.toString(this._configuration.tsServerLogLevel));
12853           args.push("--logFile", this.tsServerLogFile);
12854         }
12855       }
12856     }
12857     if (this.apiVersion.gte(api_default.v230)) {
12858       const pluginNames = this.pluginManager.plugins.map((x) => x.name);
12859       let pluginPaths = this._configuration.tsServerPluginPaths;
12860       pluginPaths = pluginPaths.reduce((p, c) => {
12861         if (import_path8.default.isAbsolute(c)) {
12862           p.push(c);
12863         } else {
12864           let roots = import_coc32.workspace.workspaceFolders.map((o) => import_coc32.Uri.parse(o.uri).fsPath);
12865           p.push(...roots.map((r) => import_path8.default.join(r, c)));
12866         }
12867         return p;
12868       }, []);
12869       if (pluginNames.length) {
12870         const isUsingBundledTypeScriptVersion = currentVersion.path == this.versionProvider.bundledVersion.path;
12871         args.push("--globalPlugins", pluginNames.join(","));
12872         for (const plugin of this.pluginManager.plugins) {
12873           if (isUsingBundledTypeScriptVersion || plugin.enableForWorkspaceTypeScriptVersions) {
12874             pluginPaths.push(plugin.path);
12875           }
12876         }
12877       }
12878       if (pluginPaths.length) {
12879         args.push("--pluginProbeLocations", pluginPaths.join(","));
12880       }
12881     }
12882     if (this._configuration.locale) {
12883       args.push("--locale", this._configuration.locale);
12884     }
12885     if (this._configuration.typingsCacheLocation) {
12886       args.push("--globalTypingsCacheLocation", `"${this._configuration.typingsCacheLocation}"`);
12887     }
12888     if (this.apiVersion.gte(api_default.v234)) {
12889       let {npmLocation} = this._configuration;
12890       if (npmLocation) {
12891         this.logger.info(`using npm from ${npmLocation}`);
12892         args.push("--npmLocation", `"${npmLocation}"`);
12893       }
12894     }
12895     if (this.apiVersion.gte(api_default.v291)) {
12896       args.push("--noGetErrOnBackgroundUpdate");
12897     }
12898     if (this.apiVersion.gte(api_default.v345)) {
12899       args.push("--validateDefaultNpmLocation");
12900     }
12901     return args;
12902   }
12903   getProjectRootPath(uri) {
12904     let root = import_coc32.workspace.cwd;
12905     let u = import_coc32.Uri.parse(uri);
12906     if (u.scheme !== "file")
12907       return void 0;
12908     let folder = import_coc32.workspace.getWorkspaceFolder(uri);
12909     if (folder) {
12910       root = import_coc32.Uri.parse(folder.uri).fsPath;
12911     } else {
12912       let filepath = import_coc32.Uri.parse(uri).fsPath;
12913       if (!filepath.startsWith(root)) {
12914         root = import_path8.default.dirname(filepath);
12915       }
12916     }
12917     if (root == import_os2.default.homedir())
12918       return void 0;
12919     return root;
12920   }
12921   configurePlugin(pluginName, configuration) {
12922     if (this.apiVersion.gte(api_default.v314)) {
12923       if (!this.servicePromise)
12924         return;
12925       this.servicePromise.then(() => {
12926         this.executeWithoutWaitingForResponse("configurePlugin", {pluginName, configuration});
12927       });
12928     }
12929   }
12930   interruptGetErr(f) {
12931     return this.bufferSyncSupport.interuptGetErr(f);
12932   }
12933   cancelInflightRequestsForResource(resource) {
12934     if (this.state !== import_coc32.ServiceStat.Running || !this.tsServerProcess) {
12935       return;
12936     }
12937     for (const request of this.tsServerProcess.toCancelOnResourceChange) {
12938       if (request.resource.toString() === resource.toString()) {
12939         request.cancel();
12940       }
12941     }
12942   }
12943 };
12944 var typescriptServiceClient_default = TypeScriptServiceClient;
12945 function getDiagnosticsKind(event) {
12946   switch (event.event) {
12947     case "syntaxDiag":
12948       return DiagnosticKind.Syntax;
12949     case "semanticDiag":
12950       return DiagnosticKind.Semantic;
12951     case "suggestionDiag":
12952       return DiagnosticKind.Suggestion;
12953   }
12954   throw new Error("Unknown dignostics kind");
12955 }
12956 var fenceCommands = new Set(["change", "close", "open"]);
12957 function getQueueingType(command, lowPriority) {
12958   if (fenceCommands.has(command)) {
12959     return RequestQueueingType.Fence;
12960   }
12961   return lowPriority ? RequestQueueingType.LowPriority : RequestQueueingType.Normal;
12962 }
12963
12964 // src/server/utils/languageDescription.ts
12965 var DiagnosticLanguage;
12966 (function(DiagnosticLanguage2) {
12967   DiagnosticLanguage2[DiagnosticLanguage2["JavaScript"] = 0] = "JavaScript";
12968   DiagnosticLanguage2[DiagnosticLanguage2["TypeScript"] = 1] = "TypeScript";
12969 })(DiagnosticLanguage || (DiagnosticLanguage = {}));
12970 var standardLanguageDescriptions = [
12971   {
12972     id: "typescript",
12973     diagnosticSource: "ts",
12974     diagnosticOwner: "typescript",
12975     modeIds: [
12976       typescript,
12977       typescriptreact,
12978       typescripttsx,
12979       typescriptjsx
12980     ],
12981     diagnosticLanguage: 1,
12982     configFile: "tsconfig.json",
12983     configFilePattern: /^tsconfig(\..*)?\.json$/gi
12984   },
12985   {
12986     id: "javascript",
12987     diagnosticSource: "ts",
12988     diagnosticOwner: "typescript",
12989     modeIds: [javascript, javascriptreact, javascriptjsx],
12990     diagnosticLanguage: 0,
12991     configFile: "jsconfig.json",
12992     configFilePattern: /^jsconfig(\..*)?\.json$/gi
12993   }
12994 ];
12995
12996 // src/server/utils/typingsStatus.ts
12997 var import_coc33 = __toModule(require("coc.nvim"));
12998 var import_vscode_languageserver_protocol22 = __toModule(require_main3());
12999 var typingsInstallTimeout = 30 * 1e3;
13000 var TypingsStatus = class {
13001   constructor(client) {
13002     this._acquiringTypings = Object.create({});
13003     this._subscriptions = [];
13004     this._client = client;
13005     this._subscriptions.push(this._client.onDidBeginInstallTypings((event) => this.onBeginInstallTypings(event.eventId)));
13006     this._subscriptions.push(this._client.onDidEndInstallTypings((event) => this.onEndInstallTypings(event.eventId)));
13007   }
13008   dispose() {
13009     this._subscriptions.forEach((x) => x.dispose());
13010     for (const eventId of Object.keys(this._acquiringTypings)) {
13011       clearTimeout(this._acquiringTypings[eventId]);
13012     }
13013   }
13014   get isAcquiringTypings() {
13015     return Object.keys(this._acquiringTypings).length > 0;
13016   }
13017   onBeginInstallTypings(eventId) {
13018     if (this._acquiringTypings[eventId]) {
13019       return;
13020     }
13021     this._acquiringTypings[eventId] = setTimeout(() => {
13022       this.onEndInstallTypings(eventId);
13023     }, typingsInstallTimeout);
13024   }
13025   onEndInstallTypings(eventId) {
13026     const timer = this._acquiringTypings[eventId];
13027     if (timer) {
13028       clearTimeout(timer);
13029     }
13030     delete this._acquiringTypings[eventId];
13031   }
13032 };
13033 var typingsStatus_default = TypingsStatus;
13034 var AtaProgressReporter = class {
13035   constructor(client) {
13036     this._promises = new Map();
13037     this._invalid = false;
13038     this.statusItem = import_coc33.window.createStatusBarItem(10, {progress: true});
13039     const disposables = [];
13040     disposables.push(client.onDidBeginInstallTypings((e) => this._onBegin(e.eventId)));
13041     disposables.push(client.onDidEndInstallTypings((e) => this._onEndOrTimeout(e.eventId)));
13042     disposables.push(client.onTypesInstallerInitializationFailed((_) => this.onTypesInstallerInitializationFailed()));
13043     this._disposable = import_vscode_languageserver_protocol22.Disposable.create(() => {
13044       disposables.forEach((disposable) => {
13045         disposable.dispose();
13046       });
13047     });
13048   }
13049   dispose() {
13050     this._disposable.dispose();
13051     this._promises.forEach((value) => value());
13052   }
13053   _onBegin(eventId) {
13054     const handle = setTimeout(() => this._onEndOrTimeout(eventId), typingsInstallTimeout);
13055     new Promise((resolve) => {
13056       this._promises.set(eventId, () => {
13057         clearTimeout(handle);
13058         resolve();
13059       });
13060     });
13061     this.statusItem.text = "Fetching data for better TypeScript IntelliSense";
13062     this.statusItem.show();
13063   }
13064   _onEndOrTimeout(eventId) {
13065     this.statusItem.hide();
13066     const resolve = this._promises.get(eventId);
13067     if (resolve) {
13068       this._promises.delete(eventId);
13069       resolve();
13070     }
13071   }
13072   onTypesInstallerInitializationFailed() {
13073     this.statusItem.hide();
13074     if (!this._invalid) {
13075       import_coc33.window.showMessage("Could not install typings files for JavaScript language features. Please ensure that NPM is installed", "error");
13076     }
13077     this._invalid = true;
13078   }
13079 };
13080
13081 // src/server/typescriptServiceClientHost.ts
13082 var styleCheckDiagnostics = [
13083   6133,
13084   6138,
13085   7027,
13086   7028,
13087   7029,
13088   7030
13089 ];
13090 var TypeScriptServiceClientHost = class {
13091   constructor(descriptions, pluginManager) {
13092     this.languagePerId = new Map();
13093     this.disposables = [];
13094     this.reportStyleCheckAsWarnings = true;
13095     let timer;
13096     const handleProjectChange = () => {
13097       if (timer)
13098         clearTimeout(timer);
13099       timer = setTimeout(() => {
13100         this.triggerAllDiagnostics();
13101       }, 1500);
13102     };
13103     const configFileWatcher = import_coc34.workspace.createFileSystemWatcher("**/[tj]sconfig.json");
13104     this.disposables.push(configFileWatcher);
13105     configFileWatcher.onDidCreate(this.reloadProjects, this, this.disposables);
13106     configFileWatcher.onDidDelete(this.reloadProjects, this, this.disposables);
13107     configFileWatcher.onDidChange(handleProjectChange, this, this.disposables);
13108     const packageFileWatcher = import_coc34.workspace.createFileSystemWatcher("**/package.json");
13109     packageFileWatcher.onDidCreate(this.reloadProjects, this, this.disposables);
13110     packageFileWatcher.onDidChange(handleProjectChange, this, this.disposables);
13111     const allModeIds = this.getAllModeIds(descriptions, pluginManager);
13112     this.client = new typescriptServiceClient_default(pluginManager, allModeIds);
13113     this.disposables.push(this.client);
13114     this.client.onDiagnosticsReceived(({kind, resource, diagnostics}) => {
13115       this.diagnosticsReceived(kind, resource, diagnostics).catch((e) => {
13116         console.error(e);
13117       });
13118     }, null, this.disposables);
13119     this.disposables.push(new watchBuild_default(this.client));
13120     this.disposables.push(import_coc34.languages.registerWorkspaceSymbolProvider(new workspaceSymbols_default(this.client, allModeIds)));
13121     this.client.onConfigDiagnosticsReceived((diag) => {
13122       let {body} = diag;
13123       if (body) {
13124         let {configFile, diagnostics} = body;
13125         let uri = import_coc34.Uri.file(configFile);
13126         if (diagnostics.length == 0) {
13127           this.client.diagnosticsManager.configFileDiagnosticsReceived(uri.toString(), []);
13128         } else {
13129           let diagnosticList = diagnostics.map((o) => {
13130             let {text, code, category, start, end} = o;
13131             let range;
13132             if (!start || !end) {
13133               range = import_vscode_languageserver_protocol23.Range.create(import_vscode_languageserver_protocol23.Position.create(0, 0), import_vscode_languageserver_protocol23.Position.create(0, 1));
13134             } else {
13135               range = import_vscode_languageserver_protocol23.Range.create(start.line - 1, start.offset - 1, end.line - 1, end.offset - 1);
13136             }
13137             let severity = category == "error" ? import_vscode_languageserver_protocol23.DiagnosticSeverity.Error : import_vscode_languageserver_protocol23.DiagnosticSeverity.Warning;
13138             return import_vscode_languageserver_protocol23.Diagnostic.create(range, text, severity, code);
13139           });
13140           this.client.diagnosticsManager.configFileDiagnosticsReceived(uri.toString(), diagnosticList);
13141         }
13142       }
13143     }, null, this.disposables);
13144     this.typingsStatus = new typingsStatus_default(this.client);
13145     this.ataProgressReporter = new AtaProgressReporter(this.client);
13146     this.fileConfigurationManager = new fileConfigurationManager_default(this.client);
13147     for (const description of descriptions) {
13148       const manager = new languageProvider_default(this.client, this.fileConfigurationManager, description, this.typingsStatus);
13149       this.languagePerId.set(description.id, manager);
13150     }
13151     const languageIds = new Set();
13152     for (const plugin of pluginManager.plugins) {
13153       if (plugin.configNamespace && plugin.languages.length) {
13154         this.registerExtensionLanguageProvider({
13155           id: plugin.configNamespace,
13156           modeIds: Array.from(plugin.languages),
13157           diagnosticSource: "ts-plugin",
13158           diagnosticLanguage: DiagnosticLanguage.TypeScript,
13159           diagnosticOwner: "typescript",
13160           isExternal: true
13161         });
13162       } else {
13163         for (const language2 of plugin.languages) {
13164           languageIds.add(language2);
13165         }
13166       }
13167     }
13168     if (languageIds.size) {
13169       this.registerExtensionLanguageProvider({
13170         id: "typescript-plugins",
13171         modeIds: Array.from(languageIds.values()),
13172         diagnosticSource: "ts-plugin",
13173         diagnosticLanguage: DiagnosticLanguage.TypeScript,
13174         diagnosticOwner: "typescript",
13175         isExternal: true
13176       });
13177     }
13178     this.client.ensureServiceStarted();
13179     this.client.onTsServerStarted(() => {
13180       this.triggerAllDiagnostics();
13181     });
13182     import_coc34.workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables);
13183     this.configurationChanged();
13184   }
13185   registerExtensionLanguageProvider(description) {
13186     const manager = new languageProvider_default(this.client, this.fileConfigurationManager, description, this.typingsStatus);
13187     this.languagePerId.set(description.id, manager);
13188   }
13189   dispose() {
13190     import_coc34.disposeAll(this.disposables);
13191     for (let language2 of this.languagePerId.values()) {
13192       language2.dispose();
13193     }
13194     this.languagePerId.clear();
13195     this.fileConfigurationManager.dispose();
13196     this.typingsStatus.dispose();
13197     this.ataProgressReporter.dispose();
13198   }
13199   reset() {
13200     this.fileConfigurationManager.reset();
13201   }
13202   get serviceClient() {
13203     return this.client;
13204   }
13205   reloadProjects() {
13206     this.client.diagnosticsManager.reInitialize();
13207     this.client.execute("reloadProjects", null, import_vscode_languageserver_protocol23.CancellationToken.None);
13208     this.triggerAllDiagnostics();
13209   }
13210   getProvider(languageId) {
13211     return this.languagePerId.get(languageId);
13212   }
13213   configurationChanged() {
13214     const config = import_coc34.workspace.getConfiguration("tsserver");
13215     this.reportStyleCheckAsWarnings = config.get("reportStyleChecksAsWarnings", true);
13216   }
13217   async findLanguage(uri) {
13218     try {
13219       let doc = this.client.getDocument(uri);
13220       if (!doc)
13221         return void 0;
13222       let languages4 = Array.from(this.languagePerId.values());
13223       return languages4.find((language2) => language2.handles(uri, doc.textDocument));
13224     } catch {
13225       return void 0;
13226     }
13227   }
13228   async handles(doc) {
13229     let languages4 = Array.from(this.languagePerId.values());
13230     let idx = languages4.findIndex((language2) => language2.handles(doc.uri, doc));
13231     if (idx != -1)
13232       return true;
13233     return this.client.bufferSyncSupport.handles(doc.uri);
13234   }
13235   triggerAllDiagnostics() {
13236     for (const language2 of this.languagePerId.values()) {
13237       language2.triggerAllDiagnostics();
13238     }
13239   }
13240   async diagnosticsReceived(kind, resource, diagnostics) {
13241     const language2 = await this.findLanguage(resource.toString());
13242     if (language2) {
13243       language2.diagnosticsReceived(kind, resource, this.createMarkerDatas(diagnostics));
13244     }
13245   }
13246   createMarkerDatas(diagnostics) {
13247     return diagnostics.map((tsDiag) => this.tsDiagnosticToLspDiagnostic(tsDiag));
13248   }
13249   tsDiagnosticToLspDiagnostic(diagnostic) {
13250     const {start, end, text} = diagnostic;
13251     const range = {
13252       start: Position.fromLocation(start),
13253       end: Position.fromLocation(end)
13254     };
13255     let relatedInformation;
13256     if (diagnostic.relatedInformation) {
13257       relatedInformation = diagnostic.relatedInformation.map((o) => {
13258         let {span, message} = o;
13259         return {
13260           location: Location2.fromTextSpan(this.client.toResource(span.file), span),
13261           message
13262         };
13263       });
13264     }
13265     let tags = [];
13266     if (diagnostic.reportsUnnecessary) {
13267       tags.push(import_vscode_languageserver_protocol23.DiagnosticTag.Unnecessary);
13268     }
13269     if (diagnostic.reportsDeprecated) {
13270       tags.push(import_vscode_languageserver_protocol23.DiagnosticTag.Deprecated);
13271     }
13272     tags = tags.length ? tags : void 0;
13273     return {
13274       range,
13275       tags,
13276       message: text,
13277       code: diagnostic.code ? diagnostic.code : null,
13278       severity: this.getDiagnosticSeverity(diagnostic),
13279       reportDeprecated: diagnostic.reportsDeprecated,
13280       reportUnnecessary: diagnostic.reportsUnnecessary,
13281       source: diagnostic.source || "tsserver",
13282       relatedInformation
13283     };
13284   }
13285   getDiagnosticSeverity(diagnostic) {
13286     if (this.reportStyleCheckAsWarnings && this.isStyleCheckDiagnostic(diagnostic.code) && diagnostic.category === DiagnosticCategory.error) {
13287       return import_vscode_languageserver_protocol23.DiagnosticSeverity.Warning;
13288     }
13289     switch (diagnostic.category) {
13290       case DiagnosticCategory.error:
13291         return import_vscode_languageserver_protocol23.DiagnosticSeverity.Error;
13292       case DiagnosticCategory.warning:
13293         return import_vscode_languageserver_protocol23.DiagnosticSeverity.Warning;
13294       case DiagnosticCategory.suggestion:
13295         return import_vscode_languageserver_protocol23.DiagnosticSeverity.Information;
13296       default:
13297         return import_vscode_languageserver_protocol23.DiagnosticSeverity.Error;
13298     }
13299   }
13300   isStyleCheckDiagnostic(code) {
13301     return code ? styleCheckDiagnostics.indexOf(code) !== -1 : false;
13302   }
13303   getAllModeIds(descriptions, pluginManager) {
13304     const allModeIds = flatten([
13305       ...descriptions.map((x) => x.modeIds),
13306       ...pluginManager.plugins.map((x) => x.languages)
13307     ]);
13308     return allModeIds;
13309   }
13310 };
13311 var typescriptServiceClientHost_default = TypeScriptServiceClientHost;
13312
13313 // src/server/index.ts
13314 var TsserverService = class {
13315   constructor(pluginManager) {
13316     this.pluginManager = pluginManager;
13317     this.id = "tsserver";
13318     this.name = "tsserver";
13319     this.state = import_coc35.ServiceStat.Initial;
13320     this._onDidServiceReady = new import_vscode_languageserver_protocol24.Emitter();
13321     this.onServiceReady = this._onDidServiceReady.event;
13322     this.disposables = [];
13323     this.descriptions = [];
13324     const config = import_coc35.workspace.getConfiguration("tsserver");
13325     const enableJavascript = !!config.get("enableJavascript");
13326     this.enable = config.get("enable");
13327     this.descriptions = standardLanguageDescriptions.filter((o) => {
13328       return enableJavascript ? true : o.id != "javascript";
13329     });
13330     this.selector = this.descriptions.reduce((arr, c) => {
13331       return arr.concat(c.modeIds);
13332     }, []);
13333   }
13334   get config() {
13335     return import_coc35.workspace.getConfiguration("tsserver");
13336   }
13337   getClientHost() {
13338     if (this.state == import_coc35.ServiceStat.Running)
13339       return Promise.resolve(this.clientHost);
13340     this.start();
13341     return new Promise((resolve, reject) => {
13342       let timer = setTimeout(() => {
13343         reject(new Error(`Server not started after 5s`));
13344       }, 5e3);
13345       let disposable = this.onServiceReady(() => {
13346         clearTimeout(timer);
13347         disposable.dispose();
13348         resolve(this.clientHost);
13349       });
13350     });
13351   }
13352   start() {
13353     if (this.clientHost)
13354       return;
13355     this.state = import_coc35.ServiceStat.Starting;
13356     this.clientHost = new typescriptServiceClientHost_default(this.descriptions, this.pluginManager);
13357     this.disposables.push(this.clientHost);
13358     let client = this.clientHost.serviceClient;
13359     return new Promise((resolve) => {
13360       let started = false;
13361       client.onTsServerStarted(() => {
13362         Object.defineProperty(this, "state", {
13363           get: () => {
13364             return this.clientHost.serviceClient.state;
13365           }
13366         });
13367         this._onDidServiceReady.fire(void 0);
13368         if (!started) {
13369           started = true;
13370           resolve();
13371         }
13372       });
13373     });
13374   }
13375   dispose() {
13376     import_coc35.disposeAll(this.disposables);
13377   }
13378   async restart() {
13379     if (!this.clientHost)
13380       return;
13381     let client = this.clientHost.serviceClient;
13382     await client.restartTsServer();
13383   }
13384   async stop() {
13385     if (!this.clientHost)
13386       return;
13387     this.clientHost.reset();
13388     let client = this.clientHost.serviceClient;
13389     await client.stop();
13390     return;
13391   }
13392 };
13393 var server_default = TsserverService;
13394
13395 // src/utils/plugins.ts
13396 var import_coc36 = __toModule(require("coc.nvim"));
13397 var import_vscode_languageserver_protocol25 = __toModule(require_main3());
13398 var TypeScriptServerPlugin;
13399 (function(TypeScriptServerPlugin2) {
13400   function equals2(a, b) {
13401     return a.path === b.path && a.name === b.name && a.enableForWorkspaceTypeScriptVersions === b.enableForWorkspaceTypeScriptVersions && equals(a.languages, b.languages);
13402   }
13403   TypeScriptServerPlugin2.equals = equals2;
13404 })(TypeScriptServerPlugin || (TypeScriptServerPlugin = {}));
13405 var PluginManager = class {
13406   constructor() {
13407     this._pluginConfigurations = new Map();
13408     this._disposables = [];
13409     this._onDidUpdatePlugins = this._register(new import_vscode_languageserver_protocol25.Emitter());
13410     this.onDidChangePlugins = this._onDidUpdatePlugins.event;
13411     this._onDidUpdateConfig = this._register(new import_vscode_languageserver_protocol25.Emitter());
13412     this.onDidUpdateConfig = this._onDidUpdateConfig.event;
13413     let loadPlugins = () => {
13414       if (!this._plugins) {
13415         return;
13416       }
13417       const newPlugins = this.readPlugins();
13418       if (!equals(flatten(Array.from(this._plugins.values())), flatten(Array.from(newPlugins.values())), TypeScriptServerPlugin.equals)) {
13419         this._plugins = newPlugins;
13420         this._onDidUpdatePlugins.fire(this);
13421       }
13422     };
13423     import_coc36.extensions.onDidActiveExtension(loadPlugins, void 0, this._disposables);
13424     import_coc36.extensions.onDidUnloadExtension(loadPlugins, void 0, this._disposables);
13425   }
13426   dispose() {
13427     import_coc36.disposeAll(this._disposables);
13428   }
13429   get plugins() {
13430     if (!this._plugins) {
13431       this._plugins = this.readPlugins();
13432     }
13433     return flatten(Array.from(this._plugins.values()));
13434   }
13435   _register(value) {
13436     this._disposables.push(value);
13437     return value;
13438   }
13439   setConfiguration(pluginId, config) {
13440     this._pluginConfigurations.set(pluginId, config);
13441     this._onDidUpdateConfig.fire({pluginId, config});
13442   }
13443   configurations() {
13444     return this._pluginConfigurations.entries();
13445   }
13446   readPlugins() {
13447     const pluginMap = new Map();
13448     for (const extension of import_coc36.extensions.all) {
13449       const pack = extension.packageJSON;
13450       if (pack.contributes && Array.isArray(pack.contributes.typescriptServerPlugins)) {
13451         const plugins = [];
13452         for (const plugin of pack.contributes.typescriptServerPlugins) {
13453           plugins.push({
13454             name: plugin.name,
13455             enableForWorkspaceTypeScriptVersions: !!plugin.enableForWorkspaceTypeScriptVersions,
13456             path: extension.extensionPath,
13457             languages: Array.isArray(plugin.languages) ? plugin.languages : []
13458           });
13459         }
13460         if (plugins.length) {
13461           pluginMap.set(extension.id, plugins);
13462         }
13463       }
13464     }
13465     return pluginMap;
13466   }
13467 };
13468
13469 // src/index.ts
13470 async function activate(context) {
13471   let {subscriptions, logger} = context;
13472   const config = import_coc37.workspace.getConfiguration().get("tsserver", {});
13473   if (!config.enable)
13474     return;
13475   const pluginManager = new PluginManager();
13476   const service = new server_default(pluginManager);
13477   function registCommand2(cmd) {
13478     let {id, execute} = cmd;
13479     subscriptions.push(import_coc37.commands.registerCommand(id, execute, cmd));
13480   }
13481   registCommand2(new ConfigurePluginCommand(pluginManager));
13482   registCommand2(new AutoFixCommand(service));
13483   registCommand2(new ReloadProjectsCommand(service));
13484   registCommand2(new FileReferencesCommand(service));
13485   registCommand2(new OpenTsServerLogCommand(service));
13486   registCommand2(new TypeScriptGoToProjectConfigCommand(service));
13487   registCommand2(new OrganizeImportsCommand(service));
13488   registCommand2({
13489     id: "tsserver.restart",
13490     execute: () => {
13491       service.stop().then(() => {
13492         setTimeout(() => {
13493           service.restart();
13494         }, 100);
13495       });
13496     }
13497   });
13498   service.start().then(() => {
13499     subscriptions.push(import_coc37.services.regist(service));
13500   }, (e) => {
13501     logger.error(`Error on service start:`, e);
13502   });
13503   return {
13504     configurePlugin: (pluginId, configuration) => {
13505       pluginManager.setConfiguration(pluginId, configuration);
13506     }
13507   };
13508 }
13509 //# sourceMappingURL=index.js.map