some deletions
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-tsserver / lib / index.js
diff --git a/.config/coc/extensions/node_modules/coc-tsserver/lib/index.js b/.config/coc/extensions/node_modules/coc-tsserver/lib/index.js
deleted file mode 100644 (file)
index 872689f..0000000
+++ /dev/null
@@ -1,15374 +0,0 @@
-(function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap
-/******/       // The module cache
-/******/       var installedModules = {};
-/******/
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-/******/
-/******/               // Check if module is in cache
-/******/               if(installedModules[moduleId]) {
-/******/                       return installedModules[moduleId].exports;
-/******/               }
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = installedModules[moduleId] = {
-/******/                       i: moduleId,
-/******/                       l: false,
-/******/                       exports: {}
-/******/               };
-/******/
-/******/               // Execute the module function
-/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/               // Flag the module as loaded
-/******/               module.l = true;
-/******/
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/
-/******/
-/******/       // expose the modules object (__webpack_modules__)
-/******/       __webpack_require__.m = modules;
-/******/
-/******/       // expose the module cache
-/******/       __webpack_require__.c = installedModules;
-/******/
-/******/       // define getter function for harmony exports
-/******/       __webpack_require__.d = function(exports, name, getter) {
-/******/               if(!__webpack_require__.o(exports, name)) {
-/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/               }
-/******/       };
-/******/
-/******/       // define __esModule on exports
-/******/       __webpack_require__.r = function(exports) {
-/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/               }
-/******/               Object.defineProperty(exports, '__esModule', { value: true });
-/******/       };
-/******/
-/******/       // create a fake namespace object
-/******/       // mode & 1: value is a module id, require it
-/******/       // mode & 2: merge all properties of value into the ns
-/******/       // mode & 4: return value when already ns object
-/******/       // mode & 8|1: behave like require
-/******/       __webpack_require__.t = function(value, mode) {
-/******/               if(mode & 1) value = __webpack_require__(value);
-/******/               if(mode & 8) return value;
-/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/               var ns = Object.create(null);
-/******/               __webpack_require__.r(ns);
-/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/               if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/               return ns;
-/******/       };
-/******/
-/******/       // getDefaultExport function for compatibility with non-harmony modules
-/******/       __webpack_require__.n = function(module) {
-/******/               var getter = module && module.__esModule ?
-/******/                       function getDefault() { return module['default']; } :
-/******/                       function getModuleExports() { return module; };
-/******/               __webpack_require__.d(getter, 'a', getter);
-/******/               return getter;
-/******/       };
-/******/
-/******/       // Object.prototype.hasOwnProperty.call
-/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/       // __webpack_public_path__
-/******/       __webpack_require__.p = "";
-/******/
-/******/
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(__webpack_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.activate = void 0;
-const coc_nvim_1 = __webpack_require__(1);
-const server_1 = __importDefault(__webpack_require__(2));
-const commands_1 = __webpack_require__(141);
-const organizeImports_1 = __webpack_require__(112);
-const plugins_1 = __webpack_require__(142);
-async function activate(context) {
-    let { subscriptions, logger } = context;
-    const config = coc_nvim_1.workspace.getConfiguration().get('tsserver', {});
-    if (!config.enable)
-        return;
-    const pluginManager = new plugins_1.PluginManager();
-    const service = new server_1.default(pluginManager);
-    function registCommand(cmd) {
-        let { id, execute } = cmd;
-        subscriptions.push(coc_nvim_1.commands.registerCommand(id, execute, cmd));
-    }
-    registCommand(new commands_1.ConfigurePluginCommand(pluginManager));
-    registCommand(new commands_1.AutoFixCommand(service));
-    registCommand(new commands_1.ReloadProjectsCommand(service));
-    registCommand(new commands_1.OpenTsServerLogCommand(service));
-    registCommand(new commands_1.TypeScriptGoToProjectConfigCommand(service));
-    registCommand(new organizeImports_1.OrganizeImportsCommand(service));
-    service.start().then(() => {
-        subscriptions.push(coc_nvim_1.services.regist(service));
-        registCommand(coc_nvim_1.commands.register({
-            id: 'tsserver.restart',
-            execute: () => {
-                // tslint:disable-next-line:no-floating-promises
-                service.stop().then(() => {
-                    setTimeout(() => {
-                        service.restart();
-                    }, 100);
-                });
-            }
-        }));
-    }, e => {
-        logger.error(`Error on service start:`, e);
-    });
-    return {
-        configurePlugin: (pluginId, configuration) => {
-            pluginManager.setConfiguration(pluginId, configuration);
-        }
-    };
-}
-exports.activate = activate;
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-module.exports = require("coc.nvim");
-
-/***/ }),
-/* 2 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const typescriptServiceClientHost_1 = __importDefault(__webpack_require__(33));
-const languageDescription_1 = __webpack_require__(140);
-class TsserverService {
-    constructor(pluginManager) {
-        this.pluginManager = pluginManager;
-        this.id = 'tsserver';
-        this.name = 'tsserver';
-        this.state = coc_nvim_1.ServiceStat.Initial;
-        this._onDidServiceReady = new vscode_languageserver_protocol_1.Emitter();
-        this.onServiceReady = this._onDidServiceReady.event;
-        this.disposables = [];
-        this.descriptions = [];
-        const config = coc_nvim_1.workspace.getConfiguration('tsserver');
-        const enableJavascript = !!config.get('enableJavascript');
-        this.enable = config.get('enable');
-        this.descriptions = languageDescription_1.standardLanguageDescriptions.filter(o => {
-            return enableJavascript ? true : o.id != 'javascript';
-        });
-        this.selector = this.descriptions.reduce((arr, c) => {
-            return arr.concat(c.modeIds);
-        }, []);
-    }
-    get config() {
-        return coc_nvim_1.workspace.getConfiguration('tsserver');
-    }
-    /**
-     * Get running client host.
-     */
-    getClientHost() {
-        if (this.state == coc_nvim_1.ServiceStat.Running)
-            return Promise.resolve(this.clientHost);
-        this.start();
-        return new Promise((resolve, reject) => {
-            let timer = setTimeout(() => {
-                reject(new Error(`Server not started after 5s`));
-            }, 5000);
-            let disposable = this.onServiceReady(() => {
-                clearTimeout(timer);
-                disposable.dispose();
-                resolve(this.clientHost);
-            });
-        });
-    }
-    start() {
-        if (this.clientHost)
-            return;
-        this.state = coc_nvim_1.ServiceStat.Starting;
-        this.clientHost = new typescriptServiceClientHost_1.default(this.descriptions, this.pluginManager);
-        this.disposables.push(this.clientHost);
-        let client = this.clientHost.serviceClient;
-        return new Promise(resolve => {
-            let started = false;
-            client.onTsServerStarted(() => {
-                Object.defineProperty(this, 'state', {
-                    get: () => {
-                        return this.clientHost.serviceClient.state;
-                    }
-                });
-                this._onDidServiceReady.fire(void 0);
-                if (!started) {
-                    started = true;
-                    resolve();
-                }
-            });
-        });
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-    }
-    async restart() {
-        if (!this.clientHost)
-            return;
-        let client = this.clientHost.serviceClient;
-        await client.restartTsServer();
-    }
-    async stop() {
-        if (!this.clientHost)
-            return;
-        this.clientHost.reset();
-        let client = this.clientHost.serviceClient;
-        await client.stop();
-        return;
-    }
-}
-exports.default = TsserverService;
-
-
-/***/ }),
-/* 3 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-function __export(m) {\r
-    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r
-}\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-exports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;\r
-exports.ResponseError = vscode_jsonrpc_1.ResponseError;\r
-exports.CancellationToken = vscode_jsonrpc_1.CancellationToken;\r
-exports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;\r
-exports.Disposable = vscode_jsonrpc_1.Disposable;\r
-exports.Event = vscode_jsonrpc_1.Event;\r
-exports.Emitter = vscode_jsonrpc_1.Emitter;\r
-exports.Trace = vscode_jsonrpc_1.Trace;\r
-exports.TraceFormat = vscode_jsonrpc_1.TraceFormat;\r
-exports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;\r
-exports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;\r
-exports.RequestType = vscode_jsonrpc_1.RequestType;\r
-exports.RequestType0 = vscode_jsonrpc_1.RequestType0;\r
-exports.NotificationType = vscode_jsonrpc_1.NotificationType;\r
-exports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;\r
-exports.MessageReader = vscode_jsonrpc_1.MessageReader;\r
-exports.MessageWriter = vscode_jsonrpc_1.MessageWriter;\r
-exports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;\r
-exports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;\r
-exports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;\r
-exports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;\r
-exports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;\r
-exports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;\r
-exports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;\r
-exports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;\r
-exports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;\r
-exports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;\r
-exports.ProgressType = vscode_jsonrpc_1.ProgressType;\r
-__export(__webpack_require__(18));\r
-__export(__webpack_require__(19));\r
-const callHierarchy = __webpack_require__(31);\r
-const st = __webpack_require__(32);\r
-var Proposed;\r
-(function (Proposed) {\r
-    let CallHierarchyPrepareRequest;\r
-    (function (CallHierarchyPrepareRequest) {\r
-        CallHierarchyPrepareRequest.method = callHierarchy.CallHierarchyPrepareRequest.method;\r
-        CallHierarchyPrepareRequest.type = callHierarchy.CallHierarchyPrepareRequest.type;\r
-    })(CallHierarchyPrepareRequest = Proposed.CallHierarchyPrepareRequest || (Proposed.CallHierarchyPrepareRequest = {}));\r
-    let CallHierarchyIncomingCallsRequest;\r
-    (function (CallHierarchyIncomingCallsRequest) {\r
-        CallHierarchyIncomingCallsRequest.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;\r
-        CallHierarchyIncomingCallsRequest.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;\r
-    })(CallHierarchyIncomingCallsRequest = Proposed.CallHierarchyIncomingCallsRequest || (Proposed.CallHierarchyIncomingCallsRequest = {}));\r
-    let CallHierarchyOutgoingCallsRequest;\r
-    (function (CallHierarchyOutgoingCallsRequest) {\r
-        CallHierarchyOutgoingCallsRequest.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;\r
-        CallHierarchyOutgoingCallsRequest.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;\r
-    })(CallHierarchyOutgoingCallsRequest = Proposed.CallHierarchyOutgoingCallsRequest || (Proposed.CallHierarchyOutgoingCallsRequest = {}));\r
-    Proposed.SemanticTokenTypes = st.SemanticTokenTypes;\r
-    Proposed.SemanticTokenModifiers = st.SemanticTokenModifiers;\r
-    Proposed.SemanticTokens = st.SemanticTokens;\r
-    let SemanticTokensRequest;\r
-    (function (SemanticTokensRequest) {\r
-        SemanticTokensRequest.method = st.SemanticTokensRequest.method;\r
-        SemanticTokensRequest.type = st.SemanticTokensRequest.type;\r
-    })(SemanticTokensRequest = Proposed.SemanticTokensRequest || (Proposed.SemanticTokensRequest = {}));\r
-    let SemanticTokensEditsRequest;\r
-    (function (SemanticTokensEditsRequest) {\r
-        SemanticTokensEditsRequest.method = st.SemanticTokensEditsRequest.method;\r
-        SemanticTokensEditsRequest.type = st.SemanticTokensEditsRequest.type;\r
-    })(SemanticTokensEditsRequest = Proposed.SemanticTokensEditsRequest || (Proposed.SemanticTokensEditsRequest = {}));\r
-    let SemanticTokensRangeRequest;\r
-    (function (SemanticTokensRangeRequest) {\r
-        SemanticTokensRangeRequest.method = st.SemanticTokensRangeRequest.method;\r
-        SemanticTokensRangeRequest.type = st.SemanticTokensRangeRequest.type;\r
-    })(SemanticTokensRangeRequest = Proposed.SemanticTokensRangeRequest || (Proposed.SemanticTokensRangeRequest = {}));\r
-})(Proposed = exports.Proposed || (exports.Proposed = {}));\r
-function createProtocolConnection(reader, writer, logger, strategy) {\r
-    return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);\r
-}\r
-exports.createProtocolConnection = createProtocolConnection;\r
-
-
-/***/ }),
-/* 4 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-/// <reference path="../typings/thenable.d.ts" />\r
-\r
-function __export(m) {\r
-    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r
-}\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const Is = __webpack_require__(5);\r
-const messages_1 = __webpack_require__(6);\r
-exports.RequestType = messages_1.RequestType;\r
-exports.RequestType0 = messages_1.RequestType0;\r
-exports.RequestType1 = messages_1.RequestType1;\r
-exports.RequestType2 = messages_1.RequestType2;\r
-exports.RequestType3 = messages_1.RequestType3;\r
-exports.RequestType4 = messages_1.RequestType4;\r
-exports.RequestType5 = messages_1.RequestType5;\r
-exports.RequestType6 = messages_1.RequestType6;\r
-exports.RequestType7 = messages_1.RequestType7;\r
-exports.RequestType8 = messages_1.RequestType8;\r
-exports.RequestType9 = messages_1.RequestType9;\r
-exports.ResponseError = messages_1.ResponseError;\r
-exports.ErrorCodes = messages_1.ErrorCodes;\r
-exports.NotificationType = messages_1.NotificationType;\r
-exports.NotificationType0 = messages_1.NotificationType0;\r
-exports.NotificationType1 = messages_1.NotificationType1;\r
-exports.NotificationType2 = messages_1.NotificationType2;\r
-exports.NotificationType3 = messages_1.NotificationType3;\r
-exports.NotificationType4 = messages_1.NotificationType4;\r
-exports.NotificationType5 = messages_1.NotificationType5;\r
-exports.NotificationType6 = messages_1.NotificationType6;\r
-exports.NotificationType7 = messages_1.NotificationType7;\r
-exports.NotificationType8 = messages_1.NotificationType8;\r
-exports.NotificationType9 = messages_1.NotificationType9;\r
-const messageReader_1 = __webpack_require__(7);\r
-exports.MessageReader = messageReader_1.MessageReader;\r
-exports.StreamMessageReader = messageReader_1.StreamMessageReader;\r
-exports.IPCMessageReader = messageReader_1.IPCMessageReader;\r
-exports.SocketMessageReader = messageReader_1.SocketMessageReader;\r
-const messageWriter_1 = __webpack_require__(9);\r
-exports.MessageWriter = messageWriter_1.MessageWriter;\r
-exports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;\r
-exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;\r
-exports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;\r
-const events_1 = __webpack_require__(8);\r
-exports.Disposable = events_1.Disposable;\r
-exports.Event = events_1.Event;\r
-exports.Emitter = events_1.Emitter;\r
-const cancellation_1 = __webpack_require__(10);\r
-exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;\r
-exports.CancellationToken = cancellation_1.CancellationToken;\r
-const linkedMap_1 = __webpack_require__(11);\r
-__export(__webpack_require__(12));\r
-__export(__webpack_require__(17));\r
-var CancelNotification;\r
-(function (CancelNotification) {\r
-    CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');\r
-})(CancelNotification || (CancelNotification = {}));\r
-var ProgressNotification;\r
-(function (ProgressNotification) {\r
-    ProgressNotification.type = new messages_1.NotificationType('$/progress');\r
-})(ProgressNotification || (ProgressNotification = {}));\r
-class ProgressType {\r
-    constructor() {\r
-    }\r
-}\r
-exports.ProgressType = ProgressType;\r
-exports.NullLogger = Object.freeze({\r
-    error: () => { },\r
-    warn: () => { },\r
-    info: () => { },\r
-    log: () => { }\r
-});\r
-var Trace;\r
-(function (Trace) {\r
-    Trace[Trace["Off"] = 0] = "Off";\r
-    Trace[Trace["Messages"] = 1] = "Messages";\r
-    Trace[Trace["Verbose"] = 2] = "Verbose";\r
-})(Trace = exports.Trace || (exports.Trace = {}));\r
-(function (Trace) {\r
-    function fromString(value) {\r
-        if (!Is.string(value)) {\r
-            return Trace.Off;\r
-        }\r
-        value = value.toLowerCase();\r
-        switch (value) {\r
-            case 'off':\r
-                return Trace.Off;\r
-            case 'messages':\r
-                return Trace.Messages;\r
-            case 'verbose':\r
-                return Trace.Verbose;\r
-            default:\r
-                return Trace.Off;\r
-        }\r
-    }\r
-    Trace.fromString = fromString;\r
-    function toString(value) {\r
-        switch (value) {\r
-            case Trace.Off:\r
-                return 'off';\r
-            case Trace.Messages:\r
-                return 'messages';\r
-            case Trace.Verbose:\r
-                return 'verbose';\r
-            default:\r
-                return 'off';\r
-        }\r
-    }\r
-    Trace.toString = toString;\r
-})(Trace = exports.Trace || (exports.Trace = {}));\r
-var TraceFormat;\r
-(function (TraceFormat) {\r
-    TraceFormat["Text"] = "text";\r
-    TraceFormat["JSON"] = "json";\r
-})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));\r
-(function (TraceFormat) {\r
-    function fromString(value) {\r
-        value = value.toLowerCase();\r
-        if (value === 'json') {\r
-            return TraceFormat.JSON;\r
-        }\r
-        else {\r
-            return TraceFormat.Text;\r
-        }\r
-    }\r
-    TraceFormat.fromString = fromString;\r
-})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));\r
-var SetTraceNotification;\r
-(function (SetTraceNotification) {\r
-    SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');\r
-})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));\r
-var LogTraceNotification;\r
-(function (LogTraceNotification) {\r
-    LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');\r
-})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));\r
-var ConnectionErrors;\r
-(function (ConnectionErrors) {\r
-    /**\r
-     * The connection is closed.\r
-     */\r
-    ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";\r
-    /**\r
-     * The connection got disposed.\r
-     */\r
-    ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";\r
-    /**\r
-     * The connection is already in listening mode.\r
-     */\r
-    ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";\r
-})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));\r
-class ConnectionError extends Error {\r
-    constructor(code, message) {\r
-        super(message);\r
-        this.code = code;\r
-        Object.setPrototypeOf(this, ConnectionError.prototype);\r
-    }\r
-}\r
-exports.ConnectionError = ConnectionError;\r
-var ConnectionStrategy;\r
-(function (ConnectionStrategy) {\r
-    function is(value) {\r
-        let candidate = value;\r
-        return candidate && Is.func(candidate.cancelUndispatched);\r
-    }\r
-    ConnectionStrategy.is = is;\r
-})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));\r
-var ConnectionState;\r
-(function (ConnectionState) {\r
-    ConnectionState[ConnectionState["New"] = 1] = "New";\r
-    ConnectionState[ConnectionState["Listening"] = 2] = "Listening";\r
-    ConnectionState[ConnectionState["Closed"] = 3] = "Closed";\r
-    ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";\r
-})(ConnectionState || (ConnectionState = {}));\r
-function _createMessageConnection(messageReader, messageWriter, logger, strategy) {\r
-    let sequenceNumber = 0;\r
-    let notificationSquenceNumber = 0;\r
-    let unknownResponseSquenceNumber = 0;\r
-    const version = '2.0';\r
-    let starRequestHandler = undefined;\r
-    let requestHandlers = Object.create(null);\r
-    let starNotificationHandler = undefined;\r
-    let notificationHandlers = Object.create(null);\r
-    let progressHandlers = new Map();\r
-    let timer;\r
-    let messageQueue = new linkedMap_1.LinkedMap();\r
-    let responsePromises = Object.create(null);\r
-    let requestTokens = Object.create(null);\r
-    let trace = Trace.Off;\r
-    let traceFormat = TraceFormat.Text;\r
-    let tracer;\r
-    let state = ConnectionState.New;\r
-    let errorEmitter = new events_1.Emitter();\r
-    let closeEmitter = new events_1.Emitter();\r
-    let unhandledNotificationEmitter = new events_1.Emitter();\r
-    let unhandledProgressEmitter = new events_1.Emitter();\r
-    let disposeEmitter = new events_1.Emitter();\r
-    function createRequestQueueKey(id) {\r
-        return 'req-' + id.toString();\r
-    }\r
-    function createResponseQueueKey(id) {\r
-        if (id === null) {\r
-            return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();\r
-        }\r
-        else {\r
-            return 'res-' + id.toString();\r
-        }\r
-    }\r
-    function createNotificationQueueKey() {\r
-        return 'not-' + (++notificationSquenceNumber).toString();\r
-    }\r
-    function addMessageToQueue(queue, message) {\r
-        if (messages_1.isRequestMessage(message)) {\r
-            queue.set(createRequestQueueKey(message.id), message);\r
-        }\r
-        else if (messages_1.isResponseMessage(message)) {\r
-            queue.set(createResponseQueueKey(message.id), message);\r
-        }\r
-        else {\r
-            queue.set(createNotificationQueueKey(), message);\r
-        }\r
-    }\r
-    function cancelUndispatched(_message) {\r
-        return undefined;\r
-    }\r
-    function isListening() {\r
-        return state === ConnectionState.Listening;\r
-    }\r
-    function isClosed() {\r
-        return state === ConnectionState.Closed;\r
-    }\r
-    function isDisposed() {\r
-        return state === ConnectionState.Disposed;\r
-    }\r
-    function closeHandler() {\r
-        if (state === ConnectionState.New || state === ConnectionState.Listening) {\r
-            state = ConnectionState.Closed;\r
-            closeEmitter.fire(undefined);\r
-        }\r
-        // If the connection is disposed don't sent close events.\r
-    }\r
-    function readErrorHandler(error) {\r
-        errorEmitter.fire([error, undefined, undefined]);\r
-    }\r
-    function writeErrorHandler(data) {\r
-        errorEmitter.fire(data);\r
-    }\r
-    messageReader.onClose(closeHandler);\r
-    messageReader.onError(readErrorHandler);\r
-    messageWriter.onClose(closeHandler);\r
-    messageWriter.onError(writeErrorHandler);\r
-    function triggerMessageQueue() {\r
-        if (timer || messageQueue.size === 0) {\r
-            return;\r
-        }\r
-        timer = setImmediate(() => {\r
-            timer = undefined;\r
-            processMessageQueue();\r
-        });\r
-    }\r
-    function processMessageQueue() {\r
-        if (messageQueue.size === 0) {\r
-            return;\r
-        }\r
-        let message = messageQueue.shift();\r
-        try {\r
-            if (messages_1.isRequestMessage(message)) {\r
-                handleRequest(message);\r
-            }\r
-            else if (messages_1.isNotificationMessage(message)) {\r
-                handleNotification(message);\r
-            }\r
-            else if (messages_1.isResponseMessage(message)) {\r
-                handleResponse(message);\r
-            }\r
-            else {\r
-                handleInvalidMessage(message);\r
-            }\r
-        }\r
-        finally {\r
-            triggerMessageQueue();\r
-        }\r
-    }\r
-    let callback = (message) => {\r
-        try {\r
-            // We have received a cancellation message. Check if the message is still in the queue\r
-            // and cancel it if allowed to do so.\r
-            if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {\r
-                let key = createRequestQueueKey(message.params.id);\r
-                let toCancel = messageQueue.get(key);\r
-                if (messages_1.isRequestMessage(toCancel)) {\r
-                    let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);\r
-                    if (response && (response.error !== void 0 || response.result !== void 0)) {\r
-                        messageQueue.delete(key);\r
-                        response.id = toCancel.id;\r
-                        traceSendingResponse(response, message.method, Date.now());\r
-                        messageWriter.write(response);\r
-                        return;\r
-                    }\r
-                }\r
-            }\r
-            addMessageToQueue(messageQueue, message);\r
-        }\r
-        finally {\r
-            triggerMessageQueue();\r
-        }\r
-    };\r
-    function handleRequest(requestMessage) {\r
-        if (isDisposed()) {\r
-            // we return here silently since we fired an event when the\r
-            // connection got disposed.\r
-            return;\r
-        }\r
-        function reply(resultOrError, method, startTime) {\r
-            let message = {\r
-                jsonrpc: version,\r
-                id: requestMessage.id\r
-            };\r
-            if (resultOrError instanceof messages_1.ResponseError) {\r
-                message.error = resultOrError.toJson();\r
-            }\r
-            else {\r
-                message.result = resultOrError === void 0 ? null : resultOrError;\r
-            }\r
-            traceSendingResponse(message, method, startTime);\r
-            messageWriter.write(message);\r
-        }\r
-        function replyError(error, method, startTime) {\r
-            let message = {\r
-                jsonrpc: version,\r
-                id: requestMessage.id,\r
-                error: error.toJson()\r
-            };\r
-            traceSendingResponse(message, method, startTime);\r
-            messageWriter.write(message);\r
-        }\r
-        function replySuccess(result, method, startTime) {\r
-            // The JSON RPC defines that a response must either have a result or an error\r
-            // So we can't treat undefined as a valid response result.\r
-            if (result === void 0) {\r
-                result = null;\r
-            }\r
-            let message = {\r
-                jsonrpc: version,\r
-                id: requestMessage.id,\r
-                result: result\r
-            };\r
-            traceSendingResponse(message, method, startTime);\r
-            messageWriter.write(message);\r
-        }\r
-        traceReceivedRequest(requestMessage);\r
-        let element = requestHandlers[requestMessage.method];\r
-        let type;\r
-        let requestHandler;\r
-        if (element) {\r
-            type = element.type;\r
-            requestHandler = element.handler;\r
-        }\r
-        let startTime = Date.now();\r
-        if (requestHandler || starRequestHandler) {\r
-            let cancellationSource = new cancellation_1.CancellationTokenSource();\r
-            let tokenKey = String(requestMessage.id);\r
-            requestTokens[tokenKey] = cancellationSource;\r
-            try {\r
-                let handlerResult;\r
-                if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {\r
-                    handlerResult = requestHandler\r
-                        ? requestHandler(cancellationSource.token)\r
-                        : starRequestHandler(requestMessage.method, cancellationSource.token);\r
-                }\r
-                else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {\r
-                    handlerResult = requestHandler\r
-                        ? requestHandler(...requestMessage.params, cancellationSource.token)\r
-                        : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);\r
-                }\r
-                else {\r
-                    handlerResult = requestHandler\r
-                        ? requestHandler(requestMessage.params, cancellationSource.token)\r
-                        : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);\r
-                }\r
-                let promise = handlerResult;\r
-                if (!handlerResult) {\r
-                    delete requestTokens[tokenKey];\r
-                    replySuccess(handlerResult, requestMessage.method, startTime);\r
-                }\r
-                else if (promise.then) {\r
-                    promise.then((resultOrError) => {\r
-                        delete requestTokens[tokenKey];\r
-                        reply(resultOrError, requestMessage.method, startTime);\r
-                    }, error => {\r
-                        delete requestTokens[tokenKey];\r
-                        if (error instanceof messages_1.ResponseError) {\r
-                            replyError(error, requestMessage.method, startTime);\r
-                        }\r
-                        else if (error && Is.string(error.message)) {\r
-                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\r
-                        }\r
-                        else {\r
-                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\r
-                        }\r
-                    });\r
-                }\r
-                else {\r
-                    delete requestTokens[tokenKey];\r
-                    reply(handlerResult, requestMessage.method, startTime);\r
-                }\r
-            }\r
-            catch (error) {\r
-                delete requestTokens[tokenKey];\r
-                if (error instanceof messages_1.ResponseError) {\r
-                    reply(error, requestMessage.method, startTime);\r
-                }\r
-                else if (error && Is.string(error.message)) {\r
-                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\r
-                }\r
-                else {\r
-                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\r
-                }\r
-            }\r
-        }\r
-        else {\r
-            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);\r
-        }\r
-    }\r
-    function handleResponse(responseMessage) {\r
-        if (isDisposed()) {\r
-            // See handle request.\r
-            return;\r
-        }\r
-        if (responseMessage.id === null) {\r
-            if (responseMessage.error) {\r
-                logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);\r
-            }\r
-            else {\r
-                logger.error(`Received response message without id. No further error information provided.`);\r
-            }\r
-        }\r
-        else {\r
-            let key = String(responseMessage.id);\r
-            let responsePromise = responsePromises[key];\r
-            traceReceivedResponse(responseMessage, responsePromise);\r
-            if (responsePromise) {\r
-                delete responsePromises[key];\r
-                try {\r
-                    if (responseMessage.error) {\r
-                        let error = responseMessage.error;\r
-                        responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));\r
-                    }\r
-                    else if (responseMessage.result !== void 0) {\r
-                        responsePromise.resolve(responseMessage.result);\r
-                    }\r
-                    else {\r
-                        throw new Error('Should never happen.');\r
-                    }\r
-                }\r
-                catch (error) {\r
-                    if (error.message) {\r
-                        logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);\r
-                    }\r
-                    else {\r
-                        logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    }\r
-    function handleNotification(message) {\r
-        if (isDisposed()) {\r
-            // See handle request.\r
-            return;\r
-        }\r
-        let type = undefined;\r
-        let notificationHandler;\r
-        if (message.method === CancelNotification.type.method) {\r
-            notificationHandler = (params) => {\r
-                let id = params.id;\r
-                let source = requestTokens[String(id)];\r
-                if (source) {\r
-                    source.cancel();\r
-                }\r
-            };\r
-        }\r
-        else {\r
-            let element = notificationHandlers[message.method];\r
-            if (element) {\r
-                notificationHandler = element.handler;\r
-                type = element.type;\r
-            }\r
-        }\r
-        if (notificationHandler || starNotificationHandler) {\r
-            try {\r
-                traceReceivedNotification(message);\r
-                if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {\r
-                    notificationHandler ? notificationHandler() : starNotificationHandler(message.method);\r
-                }\r
-                else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {\r
-                    notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);\r
-                }\r
-                else {\r
-                    notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);\r
-                }\r
-            }\r
-            catch (error) {\r
-                if (error.message) {\r
-                    logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);\r
-                }\r
-                else {\r
-                    logger.error(`Notification handler '${message.method}' failed unexpectedly.`);\r
-                }\r
-            }\r
-        }\r
-        else {\r
-            unhandledNotificationEmitter.fire(message);\r
-        }\r
-    }\r
-    function handleInvalidMessage(message) {\r
-        if (!message) {\r
-            logger.error('Received empty message.');\r
-            return;\r
-        }\r
-        logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);\r
-        // Test whether we find an id to reject the promise\r
-        let responseMessage = message;\r
-        if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {\r
-            let key = String(responseMessage.id);\r
-            let responseHandler = responsePromises[key];\r
-            if (responseHandler) {\r
-                responseHandler.reject(new Error('The received response has neither a result nor an error property.'));\r
-            }\r
-        }\r
-    }\r
-    function traceSendingRequest(message) {\r
-        if (trace === Trace.Off || !tracer) {\r
-            return;\r
-        }\r
-        if (traceFormat === TraceFormat.Text) {\r
-            let data = undefined;\r
-            if (trace === Trace.Verbose && message.params) {\r
-                data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;\r
-            }\r
-            tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);\r
-        }\r
-        else {\r
-            logLSPMessage('send-request', message);\r
-        }\r
-    }\r
-    function traceSendingNotification(message) {\r
-        if (trace === Trace.Off || !tracer) {\r
-            return;\r
-        }\r
-        if (traceFormat === TraceFormat.Text) {\r
-            let data = undefined;\r
-            if (trace === Trace.Verbose) {\r
-                if (message.params) {\r
-                    data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;\r
-                }\r
-                else {\r
-                    data = 'No parameters provided.\n\n';\r
-                }\r
-            }\r
-            tracer.log(`Sending notification '${message.method}'.`, data);\r
-        }\r
-        else {\r
-            logLSPMessage('send-notification', message);\r
-        }\r
-    }\r
-    function traceSendingResponse(message, method, startTime) {\r
-        if (trace === Trace.Off || !tracer) {\r
-            return;\r
-        }\r
-        if (traceFormat === TraceFormat.Text) {\r
-            let data = undefined;\r
-            if (trace === Trace.Verbose) {\r
-                if (message.error && message.error.data) {\r
-                    data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;\r
-                }\r
-                else {\r
-                    if (message.result) {\r
-                        data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;\r
-                    }\r
-                    else if (message.error === void 0) {\r
-                        data = 'No result returned.\n\n';\r
-                    }\r
-                }\r
-            }\r
-            tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);\r
-        }\r
-        else {\r
-            logLSPMessage('send-response', message);\r
-        }\r
-    }\r
-    function traceReceivedRequest(message) {\r
-        if (trace === Trace.Off || !tracer) {\r
-            return;\r
-        }\r
-        if (traceFormat === TraceFormat.Text) {\r
-            let data = undefined;\r
-            if (trace === Trace.Verbose && message.params) {\r
-                data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;\r
-            }\r
-            tracer.log(`Received request '${message.method} - (${message.id})'.`, data);\r
-        }\r
-        else {\r
-            logLSPMessage('receive-request', message);\r
-        }\r
-    }\r
-    function traceReceivedNotification(message) {\r
-        if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {\r
-            return;\r
-        }\r
-        if (traceFormat === TraceFormat.Text) {\r
-            let data = undefined;\r
-            if (trace === Trace.Verbose) {\r
-                if (message.params) {\r
-                    data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;\r
-                }\r
-                else {\r
-                    data = 'No parameters provided.\n\n';\r
-                }\r
-            }\r
-            tracer.log(`Received notification '${message.method}'.`, data);\r
-        }\r
-        else {\r
-            logLSPMessage('receive-notification', message);\r
-        }\r
-    }\r
-    function traceReceivedResponse(message, responsePromise) {\r
-        if (trace === Trace.Off || !tracer) {\r
-            return;\r
-        }\r
-        if (traceFormat === TraceFormat.Text) {\r
-            let data = undefined;\r
-            if (trace === Trace.Verbose) {\r
-                if (message.error && message.error.data) {\r
-                    data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;\r
-                }\r
-                else {\r
-                    if (message.result) {\r
-                        data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;\r
-                    }\r
-                    else if (message.error === void 0) {\r
-                        data = 'No result returned.\n\n';\r
-                    }\r
-                }\r
-            }\r
-            if (responsePromise) {\r
-                let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';\r
-                tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);\r
-            }\r
-            else {\r
-                tracer.log(`Received response ${message.id} without active response promise.`, data);\r
-            }\r
-        }\r
-        else {\r
-            logLSPMessage('receive-response', message);\r
-        }\r
-    }\r
-    function logLSPMessage(type, message) {\r
-        if (!tracer || trace === Trace.Off) {\r
-            return;\r
-        }\r
-        const lspMessage = {\r
-            isLSPMessage: true,\r
-            type,\r
-            message,\r
-            timestamp: Date.now()\r
-        };\r
-        tracer.log(lspMessage);\r
-    }\r
-    function throwIfClosedOrDisposed() {\r
-        if (isClosed()) {\r
-            throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');\r
-        }\r
-        if (isDisposed()) {\r
-            throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');\r
-        }\r
-    }\r
-    function throwIfListening() {\r
-        if (isListening()) {\r
-            throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');\r
-        }\r
-    }\r
-    function throwIfNotListening() {\r
-        if (!isListening()) {\r
-            throw new Error('Call listen() first.');\r
-        }\r
-    }\r
-    function undefinedToNull(param) {\r
-        if (param === void 0) {\r
-            return null;\r
-        }\r
-        else {\r
-            return param;\r
-        }\r
-    }\r
-    function computeMessageParams(type, params) {\r
-        let result;\r
-        let numberOfParams = type.numberOfParams;\r
-        switch (numberOfParams) {\r
-            case 0:\r
-                result = null;\r
-                break;\r
-            case 1:\r
-                result = undefinedToNull(params[0]);\r
-                break;\r
-            default:\r
-                result = [];\r
-                for (let i = 0; i < params.length && i < numberOfParams; i++) {\r
-                    result.push(undefinedToNull(params[i]));\r
-                }\r
-                if (params.length < numberOfParams) {\r
-                    for (let i = params.length; i < numberOfParams; i++) {\r
-                        result.push(null);\r
-                    }\r
-                }\r
-                break;\r
-        }\r
-        return result;\r
-    }\r
-    let connection = {\r
-        sendNotification: (type, ...params) => {\r
-            throwIfClosedOrDisposed();\r
-            let method;\r
-            let messageParams;\r
-            if (Is.string(type)) {\r
-                method = type;\r
-                switch (params.length) {\r
-                    case 0:\r
-                        messageParams = null;\r
-                        break;\r
-                    case 1:\r
-                        messageParams = params[0];\r
-                        break;\r
-                    default:\r
-                        messageParams = params;\r
-                        break;\r
-                }\r
-            }\r
-            else {\r
-                method = type.method;\r
-                messageParams = computeMessageParams(type, params);\r
-            }\r
-            let notificationMessage = {\r
-                jsonrpc: version,\r
-                method: method,\r
-                params: messageParams\r
-            };\r
-            traceSendingNotification(notificationMessage);\r
-            messageWriter.write(notificationMessage);\r
-        },\r
-        onNotification: (type, handler) => {\r
-            throwIfClosedOrDisposed();\r
-            if (Is.func(type)) {\r
-                starNotificationHandler = type;\r
-            }\r
-            else if (handler) {\r
-                if (Is.string(type)) {\r
-                    notificationHandlers[type] = { type: undefined, handler };\r
-                }\r
-                else {\r
-                    notificationHandlers[type.method] = { type, handler };\r
-                }\r
-            }\r
-        },\r
-        onProgress: (_type, token, handler) => {\r
-            if (progressHandlers.has(token)) {\r
-                throw new Error(`Progress handler for token ${token} already registered`);\r
-            }\r
-            progressHandlers.set(token, handler);\r
-            return {\r
-                dispose: () => {\r
-                    progressHandlers.delete(token);\r
-                }\r
-            };\r
-        },\r
-        sendProgress: (_type, token, value) => {\r
-            connection.sendNotification(ProgressNotification.type, { token, value });\r
-        },\r
-        onUnhandledProgress: unhandledProgressEmitter.event,\r
-        sendRequest: (type, ...params) => {\r
-            throwIfClosedOrDisposed();\r
-            throwIfNotListening();\r
-            let method;\r
-            let messageParams;\r
-            let token = undefined;\r
-            if (Is.string(type)) {\r
-                method = type;\r
-                switch (params.length) {\r
-                    case 0:\r
-                        messageParams = null;\r
-                        break;\r
-                    case 1:\r
-                        // The cancellation token is optional so it can also be undefined.\r
-                        if (cancellation_1.CancellationToken.is(params[0])) {\r
-                            messageParams = null;\r
-                            token = params[0];\r
-                        }\r
-                        else {\r
-                            messageParams = undefinedToNull(params[0]);\r
-                        }\r
-                        break;\r
-                    default:\r
-                        const last = params.length - 1;\r
-                        if (cancellation_1.CancellationToken.is(params[last])) {\r
-                            token = params[last];\r
-                            if (params.length === 2) {\r
-                                messageParams = undefinedToNull(params[0]);\r
-                            }\r
-                            else {\r
-                                messageParams = params.slice(0, last).map(value => undefinedToNull(value));\r
-                            }\r
-                        }\r
-                        else {\r
-                            messageParams = params.map(value => undefinedToNull(value));\r
-                        }\r
-                        break;\r
-                }\r
-            }\r
-            else {\r
-                method = type.method;\r
-                messageParams = computeMessageParams(type, params);\r
-                let numberOfParams = type.numberOfParams;\r
-                token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;\r
-            }\r
-            let id = sequenceNumber++;\r
-            let result = new Promise((resolve, reject) => {\r
-                let requestMessage = {\r
-                    jsonrpc: version,\r
-                    id: id,\r
-                    method: method,\r
-                    params: messageParams\r
-                };\r
-                let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };\r
-                traceSendingRequest(requestMessage);\r
-                try {\r
-                    messageWriter.write(requestMessage);\r
-                }\r
-                catch (e) {\r
-                    // Writing the message failed. So we need to reject the promise.\r
-                    responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));\r
-                    responsePromise = null;\r
-                }\r
-                if (responsePromise) {\r
-                    responsePromises[String(id)] = responsePromise;\r
-                }\r
-            });\r
-            if (token) {\r
-                token.onCancellationRequested(() => {\r
-                    connection.sendNotification(CancelNotification.type, { id });\r
-                });\r
-            }\r
-            return result;\r
-        },\r
-        onRequest: (type, handler) => {\r
-            throwIfClosedOrDisposed();\r
-            if (Is.func(type)) {\r
-                starRequestHandler = type;\r
-            }\r
-            else if (handler) {\r
-                if (Is.string(type)) {\r
-                    requestHandlers[type] = { type: undefined, handler };\r
-                }\r
-                else {\r
-                    requestHandlers[type.method] = { type, handler };\r
-                }\r
-            }\r
-        },\r
-        trace: (_value, _tracer, sendNotificationOrTraceOptions) => {\r
-            let _sendNotification = false;\r
-            let _traceFormat = TraceFormat.Text;\r
-            if (sendNotificationOrTraceOptions !== void 0) {\r
-                if (Is.boolean(sendNotificationOrTraceOptions)) {\r
-                    _sendNotification = sendNotificationOrTraceOptions;\r
-                }\r
-                else {\r
-                    _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;\r
-                    _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;\r
-                }\r
-            }\r
-            trace = _value;\r
-            traceFormat = _traceFormat;\r
-            if (trace === Trace.Off) {\r
-                tracer = undefined;\r
-            }\r
-            else {\r
-                tracer = _tracer;\r
-            }\r
-            if (_sendNotification && !isClosed() && !isDisposed()) {\r
-                connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });\r
-            }\r
-        },\r
-        onError: errorEmitter.event,\r
-        onClose: closeEmitter.event,\r
-        onUnhandledNotification: unhandledNotificationEmitter.event,\r
-        onDispose: disposeEmitter.event,\r
-        dispose: () => {\r
-            if (isDisposed()) {\r
-                return;\r
-            }\r
-            state = ConnectionState.Disposed;\r
-            disposeEmitter.fire(undefined);\r
-            let error = new Error('Connection got disposed.');\r
-            Object.keys(responsePromises).forEach((key) => {\r
-                responsePromises[key].reject(error);\r
-            });\r
-            responsePromises = Object.create(null);\r
-            requestTokens = Object.create(null);\r
-            messageQueue = new linkedMap_1.LinkedMap();\r
-            // Test for backwards compatibility\r
-            if (Is.func(messageWriter.dispose)) {\r
-                messageWriter.dispose();\r
-            }\r
-            if (Is.func(messageReader.dispose)) {\r
-                messageReader.dispose();\r
-            }\r
-        },\r
-        listen: () => {\r
-            throwIfClosedOrDisposed();\r
-            throwIfListening();\r
-            state = ConnectionState.Listening;\r
-            messageReader.listen(callback);\r
-        },\r
-        inspect: () => {\r
-            // eslint-disable-next-line no-console\r
-            console.log('inspect');\r
-        }\r
-    };\r
-    connection.onNotification(LogTraceNotification.type, (params) => {\r
-        if (trace === Trace.Off || !tracer) {\r
-            return;\r
-        }\r
-        tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);\r
-    });\r
-    connection.onNotification(ProgressNotification.type, (params) => {\r
-        const handler = progressHandlers.get(params.token);\r
-        if (handler) {\r
-            handler(params.value);\r
-        }\r
-        else {\r
-            unhandledProgressEmitter.fire(params);\r
-        }\r
-    });\r
-    return connection;\r
-}\r
-function isMessageReader(value) {\r
-    return value.listen !== void 0 && value.read === void 0;\r
-}\r
-function isMessageWriter(value) {\r
-    return value.write !== void 0 && value.end === void 0;\r
-}\r
-function createMessageConnection(input, output, logger, strategy) {\r
-    if (!logger) {\r
-        logger = exports.NullLogger;\r
-    }\r
-    let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);\r
-    let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);\r
-    return _createMessageConnection(reader, writer, logger, strategy);\r
-}\r
-exports.createMessageConnection = createMessageConnection;\r
-
-
-/***/ }),
-/* 5 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-function boolean(value) {\r
-    return value === true || value === false;\r
-}\r
-exports.boolean = boolean;\r
-function string(value) {\r
-    return typeof value === 'string' || value instanceof String;\r
-}\r
-exports.string = string;\r
-function number(value) {\r
-    return typeof value === 'number' || value instanceof Number;\r
-}\r
-exports.number = number;\r
-function error(value) {\r
-    return value instanceof Error;\r
-}\r
-exports.error = error;\r
-function func(value) {\r
-    return typeof value === 'function';\r
-}\r
-exports.func = func;\r
-function array(value) {\r
-    return Array.isArray(value);\r
-}\r
-exports.array = array;\r
-function stringArray(value) {\r
-    return array(value) && value.every(elem => string(elem));\r
-}\r
-exports.stringArray = stringArray;\r
-
-
-/***/ }),
-/* 6 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const is = __webpack_require__(5);\r
-/**\r
- * Predefined error codes.\r
- */\r
-var ErrorCodes;\r
-(function (ErrorCodes) {\r
-    // Defined by JSON RPC\r
-    ErrorCodes.ParseError = -32700;\r
-    ErrorCodes.InvalidRequest = -32600;\r
-    ErrorCodes.MethodNotFound = -32601;\r
-    ErrorCodes.InvalidParams = -32602;\r
-    ErrorCodes.InternalError = -32603;\r
-    ErrorCodes.serverErrorStart = -32099;\r
-    ErrorCodes.serverErrorEnd = -32000;\r
-    ErrorCodes.ServerNotInitialized = -32002;\r
-    ErrorCodes.UnknownErrorCode = -32001;\r
-    // Defined by the protocol.\r
-    ErrorCodes.RequestCancelled = -32800;\r
-    ErrorCodes.ContentModified = -32801;\r
-    // Defined by VSCode library.\r
-    ErrorCodes.MessageWriteError = 1;\r
-    ErrorCodes.MessageReadError = 2;\r
-})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));\r
-/**\r
- * An error object return in a response in case a request\r
- * has failed.\r
- */\r
-class ResponseError extends Error {\r
-    constructor(code, message, data) {\r
-        super(message);\r
-        this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;\r
-        this.data = data;\r
-        Object.setPrototypeOf(this, ResponseError.prototype);\r
-    }\r
-    toJson() {\r
-        return {\r
-            code: this.code,\r
-            message: this.message,\r
-            data: this.data,\r
-        };\r
-    }\r
-}\r
-exports.ResponseError = ResponseError;\r
-/**\r
- * An abstract implementation of a MessageType.\r
- */\r
-class AbstractMessageType {\r
-    constructor(_method, _numberOfParams) {\r
-        this._method = _method;\r
-        this._numberOfParams = _numberOfParams;\r
-    }\r
-    get method() {\r
-        return this._method;\r
-    }\r
-    get numberOfParams() {\r
-        return this._numberOfParams;\r
-    }\r
-}\r
-exports.AbstractMessageType = AbstractMessageType;\r
-/**\r
- * Classes to type request response pairs\r
- *\r
- * The type parameter RO will be removed in the next major version\r
- * of the JSON RPC library since it is a LSP concept and doesn't\r
- * belong here. For now it is tagged as default never.\r
- */\r
-class RequestType0 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 0);\r
-    }\r
-}\r
-exports.RequestType0 = RequestType0;\r
-class RequestType extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 1);\r
-    }\r
-}\r
-exports.RequestType = RequestType;\r
-class RequestType1 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 1);\r
-    }\r
-}\r
-exports.RequestType1 = RequestType1;\r
-class RequestType2 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 2);\r
-    }\r
-}\r
-exports.RequestType2 = RequestType2;\r
-class RequestType3 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 3);\r
-    }\r
-}\r
-exports.RequestType3 = RequestType3;\r
-class RequestType4 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 4);\r
-    }\r
-}\r
-exports.RequestType4 = RequestType4;\r
-class RequestType5 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 5);\r
-    }\r
-}\r
-exports.RequestType5 = RequestType5;\r
-class RequestType6 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 6);\r
-    }\r
-}\r
-exports.RequestType6 = RequestType6;\r
-class RequestType7 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 7);\r
-    }\r
-}\r
-exports.RequestType7 = RequestType7;\r
-class RequestType8 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 8);\r
-    }\r
-}\r
-exports.RequestType8 = RequestType8;\r
-class RequestType9 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 9);\r
-    }\r
-}\r
-exports.RequestType9 = RequestType9;\r
-/**\r
- * The type parameter RO will be removed in the next major version\r
- * of the JSON RPC library since it is a LSP concept and doesn't\r
- * belong here. For now it is tagged as default never.\r
- */\r
-class NotificationType extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 1);\r
-        this._ = undefined;\r
-    }\r
-}\r
-exports.NotificationType = NotificationType;\r
-class NotificationType0 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 0);\r
-    }\r
-}\r
-exports.NotificationType0 = NotificationType0;\r
-class NotificationType1 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 1);\r
-    }\r
-}\r
-exports.NotificationType1 = NotificationType1;\r
-class NotificationType2 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 2);\r
-    }\r
-}\r
-exports.NotificationType2 = NotificationType2;\r
-class NotificationType3 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 3);\r
-    }\r
-}\r
-exports.NotificationType3 = NotificationType3;\r
-class NotificationType4 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 4);\r
-    }\r
-}\r
-exports.NotificationType4 = NotificationType4;\r
-class NotificationType5 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 5);\r
-    }\r
-}\r
-exports.NotificationType5 = NotificationType5;\r
-class NotificationType6 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 6);\r
-    }\r
-}\r
-exports.NotificationType6 = NotificationType6;\r
-class NotificationType7 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 7);\r
-    }\r
-}\r
-exports.NotificationType7 = NotificationType7;\r
-class NotificationType8 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 8);\r
-    }\r
-}\r
-exports.NotificationType8 = NotificationType8;\r
-class NotificationType9 extends AbstractMessageType {\r
-    constructor(method) {\r
-        super(method, 9);\r
-    }\r
-}\r
-exports.NotificationType9 = NotificationType9;\r
-/**\r
- * Tests if the given message is a request message\r
- */\r
-function isRequestMessage(message) {\r
-    let candidate = message;\r
-    return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));\r
-}\r
-exports.isRequestMessage = isRequestMessage;\r
-/**\r
- * Tests if the given message is a notification message\r
- */\r
-function isNotificationMessage(message) {\r
-    let candidate = message;\r
-    return candidate && is.string(candidate.method) && message.id === void 0;\r
-}\r
-exports.isNotificationMessage = isNotificationMessage;\r
-/**\r
- * Tests if the given message is a response message\r
- */\r
-function isResponseMessage(message) {\r
-    let candidate = message;\r
-    return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);\r
-}\r
-exports.isResponseMessage = isResponseMessage;\r
-
-
-/***/ }),
-/* 7 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const events_1 = __webpack_require__(8);\r
-const Is = __webpack_require__(5);\r
-let DefaultSize = 8192;\r
-let CR = Buffer.from('\r', 'ascii')[0];\r
-let LF = Buffer.from('\n', 'ascii')[0];\r
-let CRLF = '\r\n';\r
-class MessageBuffer {\r
-    constructor(encoding = 'utf8') {\r
-        this.encoding = encoding;\r
-        this.index = 0;\r
-        this.buffer = Buffer.allocUnsafe(DefaultSize);\r
-    }\r
-    append(chunk) {\r
-        var toAppend = chunk;\r
-        if (typeof (chunk) === 'string') {\r
-            var str = chunk;\r
-            var bufferLen = Buffer.byteLength(str, this.encoding);\r
-            toAppend = Buffer.allocUnsafe(bufferLen);\r
-            toAppend.write(str, 0, bufferLen, this.encoding);\r
-        }\r
-        if (this.buffer.length - this.index >= toAppend.length) {\r
-            toAppend.copy(this.buffer, this.index, 0, toAppend.length);\r
-        }\r
-        else {\r
-            var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;\r
-            if (this.index === 0) {\r
-                this.buffer = Buffer.allocUnsafe(newSize);\r
-                toAppend.copy(this.buffer, 0, 0, toAppend.length);\r
-            }\r
-            else {\r
-                this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);\r
-            }\r
-        }\r
-        this.index += toAppend.length;\r
-    }\r
-    tryReadHeaders() {\r
-        let result = undefined;\r
-        let current = 0;\r
-        while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {\r
-            current++;\r
-        }\r
-        // No header / body separator found (e.g CRLFCRLF)\r
-        if (current + 3 >= this.index) {\r
-            return result;\r
-        }\r
-        result = Object.create(null);\r
-        let headers = this.buffer.toString('ascii', 0, current).split(CRLF);\r
-        headers.forEach((header) => {\r
-            let index = header.indexOf(':');\r
-            if (index === -1) {\r
-                throw new Error('Message header must separate key and value using :');\r
-            }\r
-            let key = header.substr(0, index);\r
-            let value = header.substr(index + 1).trim();\r
-            result[key] = value;\r
-        });\r
-        let nextStart = current + 4;\r
-        this.buffer = this.buffer.slice(nextStart);\r
-        this.index = this.index - nextStart;\r
-        return result;\r
-    }\r
-    tryReadContent(length) {\r
-        if (this.index < length) {\r
-            return null;\r
-        }\r
-        let result = this.buffer.toString(this.encoding, 0, length);\r
-        let nextStart = length;\r
-        this.buffer.copy(this.buffer, 0, nextStart);\r
-        this.index = this.index - nextStart;\r
-        return result;\r
-    }\r
-    get numberOfBytes() {\r
-        return this.index;\r
-    }\r
-}\r
-var MessageReader;\r
-(function (MessageReader) {\r
-    function is(value) {\r
-        let candidate = value;\r
-        return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&\r
-            Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);\r
-    }\r
-    MessageReader.is = is;\r
-})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));\r
-class AbstractMessageReader {\r
-    constructor() {\r
-        this.errorEmitter = new events_1.Emitter();\r
-        this.closeEmitter = new events_1.Emitter();\r
-        this.partialMessageEmitter = new events_1.Emitter();\r
-    }\r
-    dispose() {\r
-        this.errorEmitter.dispose();\r
-        this.closeEmitter.dispose();\r
-    }\r
-    get onError() {\r
-        return this.errorEmitter.event;\r
-    }\r
-    fireError(error) {\r
-        this.errorEmitter.fire(this.asError(error));\r
-    }\r
-    get onClose() {\r
-        return this.closeEmitter.event;\r
-    }\r
-    fireClose() {\r
-        this.closeEmitter.fire(undefined);\r
-    }\r
-    get onPartialMessage() {\r
-        return this.partialMessageEmitter.event;\r
-    }\r
-    firePartialMessage(info) {\r
-        this.partialMessageEmitter.fire(info);\r
-    }\r
-    asError(error) {\r
-        if (error instanceof Error) {\r
-            return error;\r
-        }\r
-        else {\r
-            return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r
-        }\r
-    }\r
-}\r
-exports.AbstractMessageReader = AbstractMessageReader;\r
-class StreamMessageReader extends AbstractMessageReader {\r
-    constructor(readable, encoding = 'utf8') {\r
-        super();\r
-        this.readable = readable;\r
-        this.buffer = new MessageBuffer(encoding);\r
-        this._partialMessageTimeout = 10000;\r
-    }\r
-    set partialMessageTimeout(timeout) {\r
-        this._partialMessageTimeout = timeout;\r
-    }\r
-    get partialMessageTimeout() {\r
-        return this._partialMessageTimeout;\r
-    }\r
-    listen(callback) {\r
-        this.nextMessageLength = -1;\r
-        this.messageToken = 0;\r
-        this.partialMessageTimer = undefined;\r
-        this.callback = callback;\r
-        this.readable.on('data', (data) => {\r
-            this.onData(data);\r
-        });\r
-        this.readable.on('error', (error) => this.fireError(error));\r
-        this.readable.on('close', () => this.fireClose());\r
-    }\r
-    onData(data) {\r
-        this.buffer.append(data);\r
-        while (true) {\r
-            if (this.nextMessageLength === -1) {\r
-                let headers = this.buffer.tryReadHeaders();\r
-                if (!headers) {\r
-                    return;\r
-                }\r
-                let contentLength = headers['Content-Length'];\r
-                if (!contentLength) {\r
-                    throw new Error('Header must provide a Content-Length property.');\r
-                }\r
-                let length = parseInt(contentLength);\r
-                if (isNaN(length)) {\r
-                    throw new Error('Content-Length value must be a number.');\r
-                }\r
-                this.nextMessageLength = length;\r
-                // Take the encoding form the header. For compatibility\r
-                // treat both utf-8 and utf8 as node utf8\r
-            }\r
-            var msg = this.buffer.tryReadContent(this.nextMessageLength);\r
-            if (msg === null) {\r
-                /** We haven't received the full message yet. */\r
-                this.setPartialMessageTimer();\r
-                return;\r
-            }\r
-            this.clearPartialMessageTimer();\r
-            this.nextMessageLength = -1;\r
-            this.messageToken++;\r
-            var json = JSON.parse(msg);\r
-            this.callback(json);\r
-        }\r
-    }\r
-    clearPartialMessageTimer() {\r
-        if (this.partialMessageTimer) {\r
-            clearTimeout(this.partialMessageTimer);\r
-            this.partialMessageTimer = undefined;\r
-        }\r
-    }\r
-    setPartialMessageTimer() {\r
-        this.clearPartialMessageTimer();\r
-        if (this._partialMessageTimeout <= 0) {\r
-            return;\r
-        }\r
-        this.partialMessageTimer = setTimeout((token, timeout) => {\r
-            this.partialMessageTimer = undefined;\r
-            if (token === this.messageToken) {\r
-                this.firePartialMessage({ messageToken: token, waitingTime: timeout });\r
-                this.setPartialMessageTimer();\r
-            }\r
-        }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);\r
-    }\r
-}\r
-exports.StreamMessageReader = StreamMessageReader;\r
-class IPCMessageReader extends AbstractMessageReader {\r
-    constructor(process) {\r
-        super();\r
-        this.process = process;\r
-        let eventEmitter = this.process;\r
-        eventEmitter.on('error', (error) => this.fireError(error));\r
-        eventEmitter.on('close', () => this.fireClose());\r
-    }\r
-    listen(callback) {\r
-        this.process.on('message', callback);\r
-    }\r
-}\r
-exports.IPCMessageReader = IPCMessageReader;\r
-class SocketMessageReader extends StreamMessageReader {\r
-    constructor(socket, encoding = 'utf-8') {\r
-        super(socket, encoding);\r
-    }\r
-}\r
-exports.SocketMessageReader = SocketMessageReader;\r
-
-
-/***/ }),
-/* 8 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-var Disposable;\r
-(function (Disposable) {\r
-    function create(func) {\r
-        return {\r
-            dispose: func\r
-        };\r
-    }\r
-    Disposable.create = create;\r
-})(Disposable = exports.Disposable || (exports.Disposable = {}));\r
-var Event;\r
-(function (Event) {\r
-    const _disposable = { dispose() { } };\r
-    Event.None = function () { return _disposable; };\r
-})(Event = exports.Event || (exports.Event = {}));\r
-class CallbackList {\r
-    add(callback, context = null, bucket) {\r
-        if (!this._callbacks) {\r
-            this._callbacks = [];\r
-            this._contexts = [];\r
-        }\r
-        this._callbacks.push(callback);\r
-        this._contexts.push(context);\r
-        if (Array.isArray(bucket)) {\r
-            bucket.push({ dispose: () => this.remove(callback, context) });\r
-        }\r
-    }\r
-    remove(callback, context = null) {\r
-        if (!this._callbacks) {\r
-            return;\r
-        }\r
-        var foundCallbackWithDifferentContext = false;\r
-        for (var i = 0, len = this._callbacks.length; i < len; i++) {\r
-            if (this._callbacks[i] === callback) {\r
-                if (this._contexts[i] === context) {\r
-                    // callback & context match => remove it\r
-                    this._callbacks.splice(i, 1);\r
-                    this._contexts.splice(i, 1);\r
-                    return;\r
-                }\r
-                else {\r
-                    foundCallbackWithDifferentContext = true;\r
-                }\r
-            }\r
-        }\r
-        if (foundCallbackWithDifferentContext) {\r
-            throw new Error('When adding a listener with a context, you should remove it with the same context');\r
-        }\r
-    }\r
-    invoke(...args) {\r
-        if (!this._callbacks) {\r
-            return [];\r
-        }\r
-        var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);\r
-        for (var i = 0, len = callbacks.length; i < len; i++) {\r
-            try {\r
-                ret.push(callbacks[i].apply(contexts[i], args));\r
-            }\r
-            catch (e) {\r
-                // eslint-disable-next-line no-console\r
-                console.error(e);\r
-            }\r
-        }\r
-        return ret;\r
-    }\r
-    isEmpty() {\r
-        return !this._callbacks || this._callbacks.length === 0;\r
-    }\r
-    dispose() {\r
-        this._callbacks = undefined;\r
-        this._contexts = undefined;\r
-    }\r
-}\r
-class Emitter {\r
-    constructor(_options) {\r
-        this._options = _options;\r
-    }\r
-    /**\r
-     * For the public to allow to subscribe\r
-     * to events from this Emitter\r
-     */\r
-    get event() {\r
-        if (!this._event) {\r
-            this._event = (listener, thisArgs, disposables) => {\r
-                if (!this._callbacks) {\r
-                    this._callbacks = new CallbackList();\r
-                }\r
-                if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {\r
-                    this._options.onFirstListenerAdd(this);\r
-                }\r
-                this._callbacks.add(listener, thisArgs);\r
-                let result;\r
-                result = {\r
-                    dispose: () => {\r
-                        this._callbacks.remove(listener, thisArgs);\r
-                        result.dispose = Emitter._noop;\r
-                        if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {\r
-                            this._options.onLastListenerRemove(this);\r
-                        }\r
-                    }\r
-                };\r
-                if (Array.isArray(disposables)) {\r
-                    disposables.push(result);\r
-                }\r
-                return result;\r
-            };\r
-        }\r
-        return this._event;\r
-    }\r
-    /**\r
-     * To be kept private to fire an event to\r
-     * subscribers\r
-     */\r
-    fire(event) {\r
-        if (this._callbacks) {\r
-            this._callbacks.invoke.call(this._callbacks, event);\r
-        }\r
-    }\r
-    dispose() {\r
-        if (this._callbacks) {\r
-            this._callbacks.dispose();\r
-            this._callbacks = undefined;\r
-        }\r
-    }\r
-}\r
-exports.Emitter = Emitter;\r
-Emitter._noop = function () { };\r
-
-
-/***/ }),
-/* 9 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const events_1 = __webpack_require__(8);\r
-const Is = __webpack_require__(5);\r
-let ContentLength = 'Content-Length: ';\r
-let CRLF = '\r\n';\r
-var MessageWriter;\r
-(function (MessageWriter) {\r
-    function is(value) {\r
-        let candidate = value;\r
-        return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&\r
-            Is.func(candidate.onError) && Is.func(candidate.write);\r
-    }\r
-    MessageWriter.is = is;\r
-})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));\r
-class AbstractMessageWriter {\r
-    constructor() {\r
-        this.errorEmitter = new events_1.Emitter();\r
-        this.closeEmitter = new events_1.Emitter();\r
-    }\r
-    dispose() {\r
-        this.errorEmitter.dispose();\r
-        this.closeEmitter.dispose();\r
-    }\r
-    get onError() {\r
-        return this.errorEmitter.event;\r
-    }\r
-    fireError(error, message, count) {\r
-        this.errorEmitter.fire([this.asError(error), message, count]);\r
-    }\r
-    get onClose() {\r
-        return this.closeEmitter.event;\r
-    }\r
-    fireClose() {\r
-        this.closeEmitter.fire(undefined);\r
-    }\r
-    asError(error) {\r
-        if (error instanceof Error) {\r
-            return error;\r
-        }\r
-        else {\r
-            return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r
-        }\r
-    }\r
-}\r
-exports.AbstractMessageWriter = AbstractMessageWriter;\r
-class StreamMessageWriter extends AbstractMessageWriter {\r
-    constructor(writable, encoding = 'utf8') {\r
-        super();\r
-        this.writable = writable;\r
-        this.encoding = encoding;\r
-        this.errorCount = 0;\r
-        this.writable.on('error', (error) => this.fireError(error));\r
-        this.writable.on('close', () => this.fireClose());\r
-    }\r
-    write(msg) {\r
-        let json = JSON.stringify(msg);\r
-        let contentLength = Buffer.byteLength(json, this.encoding);\r
-        let headers = [\r
-            ContentLength, contentLength.toString(), CRLF,\r
-            CRLF\r
-        ];\r
-        try {\r
-            // Header must be written in ASCII encoding\r
-            this.writable.write(headers.join(''), 'ascii');\r
-            // Now write the content. This can be written in any encoding\r
-            this.writable.write(json, this.encoding);\r
-            this.errorCount = 0;\r
-        }\r
-        catch (error) {\r
-            this.errorCount++;\r
-            this.fireError(error, msg, this.errorCount);\r
-        }\r
-    }\r
-}\r
-exports.StreamMessageWriter = StreamMessageWriter;\r
-class IPCMessageWriter extends AbstractMessageWriter {\r
-    constructor(process) {\r
-        super();\r
-        this.process = process;\r
-        this.errorCount = 0;\r
-        this.queue = [];\r
-        this.sending = false;\r
-        let eventEmitter = this.process;\r
-        eventEmitter.on('error', (error) => this.fireError(error));\r
-        eventEmitter.on('close', () => this.fireClose);\r
-    }\r
-    write(msg) {\r
-        if (!this.sending && this.queue.length === 0) {\r
-            // See https://github.com/nodejs/node/issues/7657\r
-            this.doWriteMessage(msg);\r
-        }\r
-        else {\r
-            this.queue.push(msg);\r
-        }\r
-    }\r
-    doWriteMessage(msg) {\r
-        try {\r
-            if (this.process.send) {\r
-                this.sending = true;\r
-                this.process.send(msg, undefined, undefined, (error) => {\r
-                    this.sending = false;\r
-                    if (error) {\r
-                        this.errorCount++;\r
-                        this.fireError(error, msg, this.errorCount);\r
-                    }\r
-                    else {\r
-                        this.errorCount = 0;\r
-                    }\r
-                    if (this.queue.length > 0) {\r
-                        this.doWriteMessage(this.queue.shift());\r
-                    }\r
-                });\r
-            }\r
-        }\r
-        catch (error) {\r
-            this.errorCount++;\r
-            this.fireError(error, msg, this.errorCount);\r
-        }\r
-    }\r
-}\r
-exports.IPCMessageWriter = IPCMessageWriter;\r
-class SocketMessageWriter extends AbstractMessageWriter {\r
-    constructor(socket, encoding = 'utf8') {\r
-        super();\r
-        this.socket = socket;\r
-        this.queue = [];\r
-        this.sending = false;\r
-        this.encoding = encoding;\r
-        this.errorCount = 0;\r
-        this.socket.on('error', (error) => this.fireError(error));\r
-        this.socket.on('close', () => this.fireClose());\r
-    }\r
-    dispose() {\r
-        super.dispose();\r
-        this.socket.destroy();\r
-    }\r
-    write(msg) {\r
-        if (!this.sending && this.queue.length === 0) {\r
-            // See https://github.com/nodejs/node/issues/7657\r
-            this.doWriteMessage(msg);\r
-        }\r
-        else {\r
-            this.queue.push(msg);\r
-        }\r
-    }\r
-    doWriteMessage(msg) {\r
-        let json = JSON.stringify(msg);\r
-        let contentLength = Buffer.byteLength(json, this.encoding);\r
-        let headers = [\r
-            ContentLength, contentLength.toString(), CRLF,\r
-            CRLF\r
-        ];\r
-        try {\r
-            // Header must be written in ASCII encoding\r
-            this.sending = true;\r
-            this.socket.write(headers.join(''), 'ascii', (error) => {\r
-                if (error) {\r
-                    this.handleError(error, msg);\r
-                }\r
-                try {\r
-                    // Now write the content. This can be written in any encoding\r
-                    this.socket.write(json, this.encoding, (error) => {\r
-                        this.sending = false;\r
-                        if (error) {\r
-                            this.handleError(error, msg);\r
-                        }\r
-                        else {\r
-                            this.errorCount = 0;\r
-                        }\r
-                        if (this.queue.length > 0) {\r
-                            this.doWriteMessage(this.queue.shift());\r
-                        }\r
-                    });\r
-                }\r
-                catch (error) {\r
-                    this.handleError(error, msg);\r
-                }\r
-            });\r
-        }\r
-        catch (error) {\r
-            this.handleError(error, msg);\r
-        }\r
-    }\r
-    handleError(error, msg) {\r
-        this.errorCount++;\r
-        this.fireError(error, msg, this.errorCount);\r
-    }\r
-}\r
-exports.SocketMessageWriter = SocketMessageWriter;\r
-
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/*---------------------------------------------------------------------------------------------\r
- *  Copyright (c) Microsoft Corporation. All rights reserved.\r
- *  Licensed under the MIT License. See License.txt in the project root for license information.\r
- *--------------------------------------------------------------------------------------------*/\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const events_1 = __webpack_require__(8);\r
-const Is = __webpack_require__(5);\r
-var CancellationToken;\r
-(function (CancellationToken) {\r
-    CancellationToken.None = Object.freeze({\r
-        isCancellationRequested: false,\r
-        onCancellationRequested: events_1.Event.None\r
-    });\r
-    CancellationToken.Cancelled = Object.freeze({\r
-        isCancellationRequested: true,\r
-        onCancellationRequested: events_1.Event.None\r
-    });\r
-    function is(value) {\r
-        let candidate = value;\r
-        return candidate && (candidate === CancellationToken.None\r
-            || candidate === CancellationToken.Cancelled\r
-            || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));\r
-    }\r
-    CancellationToken.is = is;\r
-})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));\r
-const shortcutEvent = Object.freeze(function (callback, context) {\r
-    let handle = setTimeout(callback.bind(context), 0);\r
-    return { dispose() { clearTimeout(handle); } };\r
-});\r
-class MutableToken {\r
-    constructor() {\r
-        this._isCancelled = false;\r
-    }\r
-    cancel() {\r
-        if (!this._isCancelled) {\r
-            this._isCancelled = true;\r
-            if (this._emitter) {\r
-                this._emitter.fire(undefined);\r
-                this.dispose();\r
-            }\r
-        }\r
-    }\r
-    get isCancellationRequested() {\r
-        return this._isCancelled;\r
-    }\r
-    get onCancellationRequested() {\r
-        if (this._isCancelled) {\r
-            return shortcutEvent;\r
-        }\r
-        if (!this._emitter) {\r
-            this._emitter = new events_1.Emitter();\r
-        }\r
-        return this._emitter.event;\r
-    }\r
-    dispose() {\r
-        if (this._emitter) {\r
-            this._emitter.dispose();\r
-            this._emitter = undefined;\r
-        }\r
-    }\r
-}\r
-class CancellationTokenSource {\r
-    get token() {\r
-        if (!this._token) {\r
-            // be lazy and create the token only when\r
-            // actually needed\r
-            this._token = new MutableToken();\r
-        }\r
-        return this._token;\r
-    }\r
-    cancel() {\r
-        if (!this._token) {\r
-            // save an object by returning the default\r
-            // cancelled token when cancellation happens\r
-            // before someone asks for the token\r
-            this._token = CancellationToken.Cancelled;\r
-        }\r
-        else {\r
-            this._token.cancel();\r
-        }\r
-    }\r
-    dispose() {\r
-        if (!this._token) {\r
-            // ensure to initialize with an empty token if we had none\r
-            this._token = CancellationToken.None;\r
-        }\r
-        else if (this._token instanceof MutableToken) {\r
-            // actually dispose\r
-            this._token.dispose();\r
-        }\r
-    }\r
-}\r
-exports.CancellationTokenSource = CancellationTokenSource;\r
-
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-\r
-/*---------------------------------------------------------------------------------------------\r
- *  Copyright (c) Microsoft Corporation. All rights reserved.\r
- *  Licensed under the MIT License. See License.txt in the project root for license information.\r
- *--------------------------------------------------------------------------------------------*/\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-var Touch;\r
-(function (Touch) {\r
-    Touch.None = 0;\r
-    Touch.First = 1;\r
-    Touch.Last = 2;\r
-})(Touch = exports.Touch || (exports.Touch = {}));\r
-class LinkedMap {\r
-    constructor() {\r
-        this._map = new Map();\r
-        this._head = undefined;\r
-        this._tail = undefined;\r
-        this._size = 0;\r
-    }\r
-    clear() {\r
-        this._map.clear();\r
-        this._head = undefined;\r
-        this._tail = undefined;\r
-        this._size = 0;\r
-    }\r
-    isEmpty() {\r
-        return !this._head && !this._tail;\r
-    }\r
-    get size() {\r
-        return this._size;\r
-    }\r
-    has(key) {\r
-        return this._map.has(key);\r
-    }\r
-    get(key) {\r
-        const item = this._map.get(key);\r
-        if (!item) {\r
-            return undefined;\r
-        }\r
-        return item.value;\r
-    }\r
-    set(key, value, touch = Touch.None) {\r
-        let item = this._map.get(key);\r
-        if (item) {\r
-            item.value = value;\r
-            if (touch !== Touch.None) {\r
-                this.touch(item, touch);\r
-            }\r
-        }\r
-        else {\r
-            item = { key, value, next: undefined, previous: undefined };\r
-            switch (touch) {\r
-                case Touch.None:\r
-                    this.addItemLast(item);\r
-                    break;\r
-                case Touch.First:\r
-                    this.addItemFirst(item);\r
-                    break;\r
-                case Touch.Last:\r
-                    this.addItemLast(item);\r
-                    break;\r
-                default:\r
-                    this.addItemLast(item);\r
-                    break;\r
-            }\r
-            this._map.set(key, item);\r
-            this._size++;\r
-        }\r
-    }\r
-    delete(key) {\r
-        const item = this._map.get(key);\r
-        if (!item) {\r
-            return false;\r
-        }\r
-        this._map.delete(key);\r
-        this.removeItem(item);\r
-        this._size--;\r
-        return true;\r
-    }\r
-    shift() {\r
-        if (!this._head && !this._tail) {\r
-            return undefined;\r
-        }\r
-        if (!this._head || !this._tail) {\r
-            throw new Error('Invalid list');\r
-        }\r
-        const item = this._head;\r
-        this._map.delete(item.key);\r
-        this.removeItem(item);\r
-        this._size--;\r
-        return item.value;\r
-    }\r
-    forEach(callbackfn, thisArg) {\r
-        let current = this._head;\r
-        while (current) {\r
-            if (thisArg) {\r
-                callbackfn.bind(thisArg)(current.value, current.key, this);\r
-            }\r
-            else {\r
-                callbackfn(current.value, current.key, this);\r
-            }\r
-            current = current.next;\r
-        }\r
-    }\r
-    forEachReverse(callbackfn, thisArg) {\r
-        let current = this._tail;\r
-        while (current) {\r
-            if (thisArg) {\r
-                callbackfn.bind(thisArg)(current.value, current.key, this);\r
-            }\r
-            else {\r
-                callbackfn(current.value, current.key, this);\r
-            }\r
-            current = current.previous;\r
-        }\r
-    }\r
-    values() {\r
-        let result = [];\r
-        let current = this._head;\r
-        while (current) {\r
-            result.push(current.value);\r
-            current = current.next;\r
-        }\r
-        return result;\r
-    }\r
-    keys() {\r
-        let result = [];\r
-        let current = this._head;\r
-        while (current) {\r
-            result.push(current.key);\r
-            current = current.next;\r
-        }\r
-        return result;\r
-    }\r
-    /* JSON RPC run on es5 which has no Symbol.iterator\r
-    public keys(): IterableIterator<K> {\r
-        let current = this._head;\r
-        let iterator: IterableIterator<K> = {\r
-            [Symbol.iterator]() {\r
-                return iterator;\r
-            },\r
-            next():IteratorResult<K> {\r
-                if (current) {\r
-                    let result = { value: current.key, done: false };\r
-                    current = current.next;\r
-                    return result;\r
-                } else {\r
-                    return { value: undefined, done: true };\r
-                }\r
-            }\r
-        };\r
-        return iterator;\r
-    }\r
-\r
-    public values(): IterableIterator<V> {\r
-        let current = this._head;\r
-        let iterator: IterableIterator<V> = {\r
-            [Symbol.iterator]() {\r
-                return iterator;\r
-            },\r
-            next():IteratorResult<V> {\r
-                if (current) {\r
-                    let result = { value: current.value, done: false };\r
-                    current = current.next;\r
-                    return result;\r
-                } else {\r
-                    return { value: undefined, done: true };\r
-                }\r
-            }\r
-        };\r
-        return iterator;\r
-    }\r
-    */\r
-    addItemFirst(item) {\r
-        // First time Insert\r
-        if (!this._head && !this._tail) {\r
-            this._tail = item;\r
-        }\r
-        else if (!this._head) {\r
-            throw new Error('Invalid list');\r
-        }\r
-        else {\r
-            item.next = this._head;\r
-            this._head.previous = item;\r
-        }\r
-        this._head = item;\r
-    }\r
-    addItemLast(item) {\r
-        // First time Insert\r
-        if (!this._head && !this._tail) {\r
-            this._head = item;\r
-        }\r
-        else if (!this._tail) {\r
-            throw new Error('Invalid list');\r
-        }\r
-        else {\r
-            item.previous = this._tail;\r
-            this._tail.next = item;\r
-        }\r
-        this._tail = item;\r
-    }\r
-    removeItem(item) {\r
-        if (item === this._head && item === this._tail) {\r
-            this._head = undefined;\r
-            this._tail = undefined;\r
-        }\r
-        else if (item === this._head) {\r
-            this._head = item.next;\r
-        }\r
-        else if (item === this._tail) {\r
-            this._tail = item.previous;\r
-        }\r
-        else {\r
-            const next = item.next;\r
-            const previous = item.previous;\r
-            if (!next || !previous) {\r
-                throw new Error('Invalid list');\r
-            }\r
-            next.previous = previous;\r
-            previous.next = next;\r
-        }\r
-    }\r
-    touch(item, touch) {\r
-        if (!this._head || !this._tail) {\r
-            throw new Error('Invalid list');\r
-        }\r
-        if ((touch !== Touch.First && touch !== Touch.Last)) {\r
-            return;\r
-        }\r
-        if (touch === Touch.First) {\r
-            if (item === this._head) {\r
-                return;\r
-            }\r
-            const next = item.next;\r
-            const previous = item.previous;\r
-            // Unlink the item\r
-            if (item === this._tail) {\r
-                // previous must be defined since item was not head but is tail\r
-                // So there are more than on item in the map\r
-                previous.next = undefined;\r
-                this._tail = previous;\r
-            }\r
-            else {\r
-                // Both next and previous are not undefined since item was neither head nor tail.\r
-                next.previous = previous;\r
-                previous.next = next;\r
-            }\r
-            // Insert the node at head\r
-            item.previous = undefined;\r
-            item.next = this._head;\r
-            this._head.previous = item;\r
-            this._head = item;\r
-        }\r
-        else if (touch === Touch.Last) {\r
-            if (item === this._tail) {\r
-                return;\r
-            }\r
-            const next = item.next;\r
-            const previous = item.previous;\r
-            // Unlink the item.\r
-            if (item === this._head) {\r
-                // next must be defined since item was not tail but is head\r
-                // So there are more than on item in the map\r
-                next.previous = undefined;\r
-                this._head = next;\r
-            }\r
-            else {\r
-                // Both next and previous are not undefined since item was neither head nor tail.\r
-                next.previous = previous;\r
-                previous.next = next;\r
-            }\r
-            item.next = undefined;\r
-            item.previous = this._tail;\r
-            this._tail.next = item;\r
-            this._tail = item;\r
-        }\r
-    }\r
-}\r
-exports.LinkedMap = LinkedMap;\r
-
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const path_1 = __webpack_require__(13);\r
-const os_1 = __webpack_require__(14);\r
-const crypto_1 = __webpack_require__(15);\r
-const net_1 = __webpack_require__(16);\r
-const messageReader_1 = __webpack_require__(7);\r
-const messageWriter_1 = __webpack_require__(9);\r
-function generateRandomPipeName() {\r
-    const randomSuffix = crypto_1.randomBytes(21).toString('hex');\r
-    if (process.platform === 'win32') {\r
-        return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;\r
-    }\r
-    else {\r
-        // Mac/Unix: use socket file\r
-        return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);\r
-    }\r
-}\r
-exports.generateRandomPipeName = generateRandomPipeName;\r
-function createClientPipeTransport(pipeName, encoding = 'utf-8') {\r
-    let connectResolve;\r
-    let connected = new Promise((resolve, _reject) => {\r
-        connectResolve = resolve;\r
-    });\r
-    return new Promise((resolve, reject) => {\r
-        let server = net_1.createServer((socket) => {\r
-            server.close();\r
-            connectResolve([\r
-                new messageReader_1.SocketMessageReader(socket, encoding),\r
-                new messageWriter_1.SocketMessageWriter(socket, encoding)\r
-            ]);\r
-        });\r
-        server.on('error', reject);\r
-        server.listen(pipeName, () => {\r
-            server.removeListener('error', reject);\r
-            resolve({\r
-                onConnected: () => { return connected; }\r
-            });\r
-        });\r
-    });\r
-}\r
-exports.createClientPipeTransport = createClientPipeTransport;\r
-function createServerPipeTransport(pipeName, encoding = 'utf-8') {\r
-    const socket = net_1.createConnection(pipeName);\r
-    return [\r
-        new messageReader_1.SocketMessageReader(socket, encoding),\r
-        new messageWriter_1.SocketMessageWriter(socket, encoding)\r
-    ];\r
-}\r
-exports.createServerPipeTransport = createServerPipeTransport;\r
-
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports) {
-
-module.exports = require("path");
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports) {
-
-module.exports = require("os");
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports) {
-
-module.exports = require("crypto");
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports) {
-
-module.exports = require("net");
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const net_1 = __webpack_require__(16);\r
-const messageReader_1 = __webpack_require__(7);\r
-const messageWriter_1 = __webpack_require__(9);\r
-function createClientSocketTransport(port, encoding = 'utf-8') {\r
-    let connectResolve;\r
-    let connected = new Promise((resolve, _reject) => {\r
-        connectResolve = resolve;\r
-    });\r
-    return new Promise((resolve, reject) => {\r
-        let server = net_1.createServer((socket) => {\r
-            server.close();\r
-            connectResolve([\r
-                new messageReader_1.SocketMessageReader(socket, encoding),\r
-                new messageWriter_1.SocketMessageWriter(socket, encoding)\r
-            ]);\r
-        });\r
-        server.on('error', reject);\r
-        server.listen(port, '127.0.0.1', () => {\r
-            server.removeListener('error', reject);\r
-            resolve({\r
-                onConnected: () => { return connected; }\r
-            });\r
-        });\r
-    });\r
-}\r
-exports.createClientSocketTransport = createClientSocketTransport;\r
-function createServerSocketTransport(port, encoding = 'utf-8') {\r
-    const socket = net_1.createConnection(port, '127.0.0.1');\r
-    return [\r
-        new messageReader_1.SocketMessageReader(socket, encoding),\r
-        new messageWriter_1.SocketMessageWriter(socket, encoding)\r
-    ];\r
-}\r
-exports.createServerSocketTransport = createServerSocketTransport;\r
-
-
-/***/ }),
-/* 18 */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Position", function() { return Position; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Range", function() { return Range; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Location", function() { return Location; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocationLink", function() { return LocationLink; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorInformation", function() { return ColorInformation; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPresentation", function() { return ColorPresentation; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRangeKind", function() { return FoldingRangeKind; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRange", function() { return FoldingRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticRelatedInformation", function() { return DiagnosticRelatedInformation; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticSeverity", function() { return DiagnosticSeverity; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticTag", function() { return DiagnosticTag; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Diagnostic", function() { return Diagnostic; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Command", function() { return Command; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextEdit", function() { return TextEdit; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentEdit", function() { return TextDocumentEdit; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CreateFile", function() { return CreateFile; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenameFile", function() { return RenameFile; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DeleteFile", function() { return DeleteFile; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceEdit", function() { return WorkspaceEdit; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceChange", function() { return WorkspaceChange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentIdentifier", function() { return TextDocumentIdentifier; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VersionedTextDocumentIdentifier", function() { return VersionedTextDocumentIdentifier; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentItem", function() { return TextDocumentItem; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupKind", function() { return MarkupKind; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupContent", function() { return MarkupContent; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemKind", function() { return CompletionItemKind; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InsertTextFormat", function() { return InsertTextFormat; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemTag", function() { return CompletionItemTag; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItem", function() { return CompletionItem; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionList", function() { return CompletionList; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkedString", function() { return MarkedString; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hover", function() { return Hover; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParameterInformation", function() { return ParameterInformation; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignatureInformation", function() { return SignatureInformation; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlightKind", function() { return DocumentHighlightKind; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlight", function() { return DocumentHighlight; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolKind", function() { return SymbolKind; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolTag", function() { return SymbolTag; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolInformation", function() { return SymbolInformation; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentSymbol", function() { return DocumentSymbol; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionKind", function() { return CodeActionKind; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionContext", function() { return CodeActionContext; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeAction", function() { return CodeAction; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeLens", function() { return CodeLens; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormattingOptions", function() { return FormattingOptions; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentLink", function() { return DocumentLink; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectionRange", function() { return SelectionRange; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EOL", function() { return EOL; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-/**\r
- * The Position namespace provides helper functions to work with\r
- * [Position](#Position) literals.\r
- */\r
-var Position;\r
-(function (Position) {\r
-    /**\r
-     * Creates a new Position literal from the given line and character.\r
-     * @param line The position's line.\r
-     * @param character The position's character.\r
-     */\r
-    function create(line, character) {\r
-        return { line: line, character: character };\r
-    }\r
-    Position.create = create;\r
-    /**\r
-     * Checks whether the given liternal conforms to the [Position](#Position) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);\r
-    }\r
-    Position.is = is;\r
-})(Position || (Position = {}));\r
-/**\r
- * The Range namespace provides helper functions to work with\r
- * [Range](#Range) literals.\r
- */\r
-var Range;\r
-(function (Range) {\r
-    function create(one, two, three, four) {\r
-        if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {\r
-            return { start: Position.create(one, two), end: Position.create(three, four) };\r
-        }\r
-        else if (Position.is(one) && Position.is(two)) {\r
-            return { start: one, end: two };\r
-        }\r
-        else {\r
-            throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");\r
-        }\r
-    }\r
-    Range.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [Range](#Range) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\r
-    }\r
-    Range.is = is;\r
-})(Range || (Range = {}));\r
-/**\r
- * The Location namespace provides helper functions to work with\r
- * [Location](#Location) literals.\r
- */\r
-var Location;\r
-(function (Location) {\r
-    /**\r
-     * Creates a Location literal.\r
-     * @param uri The location's uri.\r
-     * @param range The location's range.\r
-     */\r
-    function create(uri, range) {\r
-        return { uri: uri, range: range };\r
-    }\r
-    Location.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [Location](#Location) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\r
-    }\r
-    Location.is = is;\r
-})(Location || (Location = {}));\r
-/**\r
- * The LocationLink namespace provides helper functions to work with\r
- * [LocationLink](#LocationLink) literals.\r
- */\r
-var LocationLink;\r
-(function (LocationLink) {\r
-    /**\r
-     * Creates a LocationLink literal.\r
-     * @param targetUri The definition's uri.\r
-     * @param targetRange The full range of the definition.\r
-     * @param targetSelectionRange The span of the symbol definition at the target.\r
-     * @param originSelectionRange The span of the symbol being defined in the originating source file.\r
-     */\r
-    function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\r
-        return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };\r
-    }\r
-    LocationLink.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\r
-            && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))\r
-            && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\r
-    }\r
-    LocationLink.is = is;\r
-})(LocationLink || (LocationLink = {}));\r
-/**\r
- * The Color namespace provides helper functions to work with\r
- * [Color](#Color) literals.\r
- */\r
-var Color;\r
-(function (Color) {\r
-    /**\r
-     * Creates a new Color literal.\r
-     */\r
-    function create(red, green, blue, alpha) {\r
-        return {\r
-            red: red,\r
-            green: green,\r
-            blue: blue,\r
-            alpha: alpha,\r
-        };\r
-    }\r
-    Color.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [Color](#Color) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.number(candidate.red)\r
-            && Is.number(candidate.green)\r
-            && Is.number(candidate.blue)\r
-            && Is.number(candidate.alpha);\r
-    }\r
-    Color.is = is;\r
-})(Color || (Color = {}));\r
-/**\r
- * The ColorInformation namespace provides helper functions to work with\r
- * [ColorInformation](#ColorInformation) literals.\r
- */\r
-var ColorInformation;\r
-(function (ColorInformation) {\r
-    /**\r
-     * Creates a new ColorInformation literal.\r
-     */\r
-    function create(range, color) {\r
-        return {\r
-            range: range,\r
-            color: color,\r
-        };\r
-    }\r
-    ColorInformation.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Range.is(candidate.range) && Color.is(candidate.color);\r
-    }\r
-    ColorInformation.is = is;\r
-})(ColorInformation || (ColorInformation = {}));\r
-/**\r
- * The Color namespace provides helper functions to work with\r
- * [ColorPresentation](#ColorPresentation) literals.\r
- */\r
-var ColorPresentation;\r
-(function (ColorPresentation) {\r
-    /**\r
-     * Creates a new ColorInformation literal.\r
-     */\r
-    function create(label, textEdit, additionalTextEdits) {\r
-        return {\r
-            label: label,\r
-            textEdit: textEdit,\r
-            additionalTextEdits: additionalTextEdits,\r
-        };\r
-    }\r
-    ColorPresentation.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.string(candidate.label)\r
-            && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\r
-            && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\r
-    }\r
-    ColorPresentation.is = is;\r
-})(ColorPresentation || (ColorPresentation = {}));\r
-/**\r
- * Enum of known range kinds\r
- */\r
-var FoldingRangeKind;\r
-(function (FoldingRangeKind) {\r
-    /**\r
-     * Folding range for a comment\r
-     */\r
-    FoldingRangeKind["Comment"] = "comment";\r
-    /**\r
-     * Folding range for a imports or includes\r
-     */\r
-    FoldingRangeKind["Imports"] = "imports";\r
-    /**\r
-     * Folding range for a region (e.g. `#region`)\r
-     */\r
-    FoldingRangeKind["Region"] = "region";\r
-})(FoldingRangeKind || (FoldingRangeKind = {}));\r
-/**\r
- * The folding range namespace provides helper functions to work with\r
- * [FoldingRange](#FoldingRange) literals.\r
- */\r
-var FoldingRange;\r
-(function (FoldingRange) {\r
-    /**\r
-     * Creates a new FoldingRange literal.\r
-     */\r
-    function create(startLine, endLine, startCharacter, endCharacter, kind) {\r
-        var result = {\r
-            startLine: startLine,\r
-            endLine: endLine\r
-        };\r
-        if (Is.defined(startCharacter)) {\r
-            result.startCharacter = startCharacter;\r
-        }\r
-        if (Is.defined(endCharacter)) {\r
-            result.endCharacter = endCharacter;\r
-        }\r
-        if (Is.defined(kind)) {\r
-            result.kind = kind;\r
-        }\r
-        return result;\r
-    }\r
-    FoldingRange.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.number(candidate.startLine) && Is.number(candidate.startLine)\r
-            && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))\r
-            && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))\r
-            && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\r
-    }\r
-    FoldingRange.is = is;\r
-})(FoldingRange || (FoldingRange = {}));\r
-/**\r
- * The DiagnosticRelatedInformation namespace provides helper functions to work with\r
- * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.\r
- */\r
-var DiagnosticRelatedInformation;\r
-(function (DiagnosticRelatedInformation) {\r
-    /**\r
-     * Creates a new DiagnosticRelatedInformation literal.\r
-     */\r
-    function create(location, message) {\r
-        return {\r
-            location: location,\r
-            message: message\r
-        };\r
-    }\r
-    DiagnosticRelatedInformation.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\r
-    }\r
-    DiagnosticRelatedInformation.is = is;\r
-})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));\r
-/**\r
- * The diagnostic's severity.\r
- */\r
-var DiagnosticSeverity;\r
-(function (DiagnosticSeverity) {\r
-    /**\r
-     * Reports an error.\r
-     */\r
-    DiagnosticSeverity.Error = 1;\r
-    /**\r
-     * Reports a warning.\r
-     */\r
-    DiagnosticSeverity.Warning = 2;\r
-    /**\r
-     * Reports an information.\r
-     */\r
-    DiagnosticSeverity.Information = 3;\r
-    /**\r
-     * Reports a hint.\r
-     */\r
-    DiagnosticSeverity.Hint = 4;\r
-})(DiagnosticSeverity || (DiagnosticSeverity = {}));\r
-/**\r
- * The diagnostic tags.\r
- *\r
- * @since 3.15.0\r
- */\r
-var DiagnosticTag;\r
-(function (DiagnosticTag) {\r
-    /**\r
-     * Unused or unnecessary code.\r
-     *\r
-     * Clients are allowed to render diagnostics with this tag faded out instead of having\r
-     * an error squiggle.\r
-     */\r
-    DiagnosticTag.Unnecessary = 1;\r
-    /**\r
-     * Deprecated or obsolete code.\r
-     *\r
-     * Clients are allowed to rendered diagnostics with this tag strike through.\r
-     */\r
-    DiagnosticTag.Deprecated = 2;\r
-})(DiagnosticTag || (DiagnosticTag = {}));\r
-/**\r
- * The Diagnostic namespace provides helper functions to work with\r
- * [Diagnostic](#Diagnostic) literals.\r
- */\r
-var Diagnostic;\r
-(function (Diagnostic) {\r
-    /**\r
-     * Creates a new Diagnostic literal.\r
-     */\r
-    function create(range, message, severity, code, source, relatedInformation) {\r
-        var result = { range: range, message: message };\r
-        if (Is.defined(severity)) {\r
-            result.severity = severity;\r
-        }\r
-        if (Is.defined(code)) {\r
-            result.code = code;\r
-        }\r
-        if (Is.defined(source)) {\r
-            result.source = source;\r
-        }\r
-        if (Is.defined(relatedInformation)) {\r
-            result.relatedInformation = relatedInformation;\r
-        }\r
-        return result;\r
-    }\r
-    Diagnostic.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate)\r
-            && Range.is(candidate.range)\r
-            && Is.string(candidate.message)\r
-            && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\r
-            && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\r
-            && (Is.string(candidate.source) || Is.undefined(candidate.source))\r
-            && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\r
-    }\r
-    Diagnostic.is = is;\r
-})(Diagnostic || (Diagnostic = {}));\r
-/**\r
- * The Command namespace provides helper functions to work with\r
- * [Command](#Command) literals.\r
- */\r
-var Command;\r
-(function (Command) {\r
-    /**\r
-     * Creates a new Command literal.\r
-     */\r
-    function create(title, command) {\r
-        var args = [];\r
-        for (var _i = 2; _i < arguments.length; _i++) {\r
-            args[_i - 2] = arguments[_i];\r
-        }\r
-        var result = { title: title, command: command };\r
-        if (Is.defined(args) && args.length > 0) {\r
-            result.arguments = args;\r
-        }\r
-        return result;\r
-    }\r
-    Command.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [Command](#Command) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\r
-    }\r
-    Command.is = is;\r
-})(Command || (Command = {}));\r
-/**\r
- * The TextEdit namespace provides helper function to create replace,\r
- * insert and delete edits more easily.\r
- */\r
-var TextEdit;\r
-(function (TextEdit) {\r
-    /**\r
-     * Creates a replace text edit.\r
-     * @param range The range of text to be replaced.\r
-     * @param newText The new text.\r
-     */\r
-    function replace(range, newText) {\r
-        return { range: range, newText: newText };\r
-    }\r
-    TextEdit.replace = replace;\r
-    /**\r
-     * Creates a insert text edit.\r
-     * @param position The position to insert the text at.\r
-     * @param newText The text to be inserted.\r
-     */\r
-    function insert(position, newText) {\r
-        return { range: { start: position, end: position }, newText: newText };\r
-    }\r
-    TextEdit.insert = insert;\r
-    /**\r
-     * Creates a delete text edit.\r
-     * @param range The range of text to be deleted.\r
-     */\r
-    function del(range) {\r
-        return { range: range, newText: '' };\r
-    }\r
-    TextEdit.del = del;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.objectLiteral(candidate)\r
-            && Is.string(candidate.newText)\r
-            && Range.is(candidate.range);\r
-    }\r
-    TextEdit.is = is;\r
-})(TextEdit || (TextEdit = {}));\r
-/**\r
- * The TextDocumentEdit namespace provides helper function to create\r
- * an edit that manipulates a text document.\r
- */\r
-var TextDocumentEdit;\r
-(function (TextDocumentEdit) {\r
-    /**\r
-     * Creates a new `TextDocumentEdit`\r
-     */\r
-    function create(textDocument, edits) {\r
-        return { textDocument: textDocument, edits: edits };\r
-    }\r
-    TextDocumentEdit.create = create;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate)\r
-            && VersionedTextDocumentIdentifier.is(candidate.textDocument)\r
-            && Array.isArray(candidate.edits);\r
-    }\r
-    TextDocumentEdit.is = is;\r
-})(TextDocumentEdit || (TextDocumentEdit = {}));\r
-var CreateFile;\r
-(function (CreateFile) {\r
-    function create(uri, options) {\r
-        var result = {\r
-            kind: 'create',\r
-            uri: uri\r
-        };\r
-        if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\r
-            result.options = options;\r
-        }\r
-        return result;\r
-    }\r
-    CreateFile.create = create;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&\r
-            (candidate.options === void 0 ||\r
-                ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));\r
-    }\r
-    CreateFile.is = is;\r
-})(CreateFile || (CreateFile = {}));\r
-var RenameFile;\r
-(function (RenameFile) {\r
-    function create(oldUri, newUri, options) {\r
-        var result = {\r
-            kind: 'rename',\r
-            oldUri: oldUri,\r
-            newUri: newUri\r
-        };\r
-        if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\r
-            result.options = options;\r
-        }\r
-        return result;\r
-    }\r
-    RenameFile.create = create;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&\r
-            (candidate.options === void 0 ||\r
-                ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));\r
-    }\r
-    RenameFile.is = is;\r
-})(RenameFile || (RenameFile = {}));\r
-var DeleteFile;\r
-(function (DeleteFile) {\r
-    function create(uri, options) {\r
-        var result = {\r
-            kind: 'delete',\r
-            uri: uri\r
-        };\r
-        if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {\r
-            result.options = options;\r
-        }\r
-        return result;\r
-    }\r
-    DeleteFile.create = create;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&\r
-            (candidate.options === void 0 ||\r
-                ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));\r
-    }\r
-    DeleteFile.is = is;\r
-})(DeleteFile || (DeleteFile = {}));\r
-var WorkspaceEdit;\r
-(function (WorkspaceEdit) {\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate &&\r
-            (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&\r
-            (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {\r
-                if (Is.string(change.kind)) {\r
-                    return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\r
-                }\r
-                else {\r
-                    return TextDocumentEdit.is(change);\r
-                }\r
-            }));\r
-    }\r
-    WorkspaceEdit.is = is;\r
-})(WorkspaceEdit || (WorkspaceEdit = {}));\r
-var TextEditChangeImpl = /** @class */ (function () {\r
-    function TextEditChangeImpl(edits) {\r
-        this.edits = edits;\r
-    }\r
-    TextEditChangeImpl.prototype.insert = function (position, newText) {\r
-        this.edits.push(TextEdit.insert(position, newText));\r
-    };\r
-    TextEditChangeImpl.prototype.replace = function (range, newText) {\r
-        this.edits.push(TextEdit.replace(range, newText));\r
-    };\r
-    TextEditChangeImpl.prototype.delete = function (range) {\r
-        this.edits.push(TextEdit.del(range));\r
-    };\r
-    TextEditChangeImpl.prototype.add = function (edit) {\r
-        this.edits.push(edit);\r
-    };\r
-    TextEditChangeImpl.prototype.all = function () {\r
-        return this.edits;\r
-    };\r
-    TextEditChangeImpl.prototype.clear = function () {\r
-        this.edits.splice(0, this.edits.length);\r
-    };\r
-    return TextEditChangeImpl;\r
-}());\r
-/**\r
- * A workspace change helps constructing changes to a workspace.\r
- */\r
-var WorkspaceChange = /** @class */ (function () {\r
-    function WorkspaceChange(workspaceEdit) {\r
-        var _this = this;\r
-        this._textEditChanges = Object.create(null);\r
-        if (workspaceEdit) {\r
-            this._workspaceEdit = workspaceEdit;\r
-            if (workspaceEdit.documentChanges) {\r
-                workspaceEdit.documentChanges.forEach(function (change) {\r
-                    if (TextDocumentEdit.is(change)) {\r
-                        var textEditChange = new TextEditChangeImpl(change.edits);\r
-                        _this._textEditChanges[change.textDocument.uri] = textEditChange;\r
-                    }\r
-                });\r
-            }\r
-            else if (workspaceEdit.changes) {\r
-                Object.keys(workspaceEdit.changes).forEach(function (key) {\r
-                    var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\r
-                    _this._textEditChanges[key] = textEditChange;\r
-                });\r
-            }\r
-        }\r
-    }\r
-    Object.defineProperty(WorkspaceChange.prototype, "edit", {\r
-        /**\r
-         * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal\r
-         * use to be returned from a workspace edit operation like rename.\r
-         */\r
-        get: function () {\r
-            return this._workspaceEdit;\r
-        },\r
-        enumerable: true,\r
-        configurable: true\r
-    });\r
-    WorkspaceChange.prototype.getTextEditChange = function (key) {\r
-        if (VersionedTextDocumentIdentifier.is(key)) {\r
-            if (!this._workspaceEdit) {\r
-                this._workspaceEdit = {\r
-                    documentChanges: []\r
-                };\r
-            }\r
-            if (!this._workspaceEdit.documentChanges) {\r
-                throw new Error('Workspace edit is not configured for document changes.');\r
-            }\r
-            var textDocument = key;\r
-            var result = this._textEditChanges[textDocument.uri];\r
-            if (!result) {\r
-                var edits = [];\r
-                var textDocumentEdit = {\r
-                    textDocument: textDocument,\r
-                    edits: edits\r
-                };\r
-                this._workspaceEdit.documentChanges.push(textDocumentEdit);\r
-                result = new TextEditChangeImpl(edits);\r
-                this._textEditChanges[textDocument.uri] = result;\r
-            }\r
-            return result;\r
-        }\r
-        else {\r
-            if (!this._workspaceEdit) {\r
-                this._workspaceEdit = {\r
-                    changes: Object.create(null)\r
-                };\r
-            }\r
-            if (!this._workspaceEdit.changes) {\r
-                throw new Error('Workspace edit is not configured for normal text edit changes.');\r
-            }\r
-            var result = this._textEditChanges[key];\r
-            if (!result) {\r
-                var edits = [];\r
-                this._workspaceEdit.changes[key] = edits;\r
-                result = new TextEditChangeImpl(edits);\r
-                this._textEditChanges[key] = result;\r
-            }\r
-            return result;\r
-        }\r
-    };\r
-    WorkspaceChange.prototype.createFile = function (uri, options) {\r
-        this.checkDocumentChanges();\r
-        this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));\r
-    };\r
-    WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {\r
-        this.checkDocumentChanges();\r
-        this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));\r
-    };\r
-    WorkspaceChange.prototype.deleteFile = function (uri, options) {\r
-        this.checkDocumentChanges();\r
-        this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));\r
-    };\r
-    WorkspaceChange.prototype.checkDocumentChanges = function () {\r
-        if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {\r
-            throw new Error('Workspace edit is not configured for document changes.');\r
-        }\r
-    };\r
-    return WorkspaceChange;\r
-}());\r
-\r
-/**\r
- * The TextDocumentIdentifier namespace provides helper functions to work with\r
- * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.\r
- */\r
-var TextDocumentIdentifier;\r
-(function (TextDocumentIdentifier) {\r
-    /**\r
-     * Creates a new TextDocumentIdentifier literal.\r
-     * @param uri The document's uri.\r
-     */\r
-    function create(uri) {\r
-        return { uri: uri };\r
-    }\r
-    TextDocumentIdentifier.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.string(candidate.uri);\r
-    }\r
-    TextDocumentIdentifier.is = is;\r
-})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));\r
-/**\r
- * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\r
- * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.\r
- */\r
-var VersionedTextDocumentIdentifier;\r
-(function (VersionedTextDocumentIdentifier) {\r
-    /**\r
-     * Creates a new VersionedTextDocumentIdentifier literal.\r
-     * @param uri The document's uri.\r
-     * @param uri The document's text.\r
-     */\r
-    function create(uri, version) {\r
-        return { uri: uri, version: version };\r
-    }\r
-    VersionedTextDocumentIdentifier.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));\r
-    }\r
-    VersionedTextDocumentIdentifier.is = is;\r
-})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));\r
-/**\r
- * The TextDocumentItem namespace provides helper functions to work with\r
- * [TextDocumentItem](#TextDocumentItem) literals.\r
- */\r
-var TextDocumentItem;\r
-(function (TextDocumentItem) {\r
-    /**\r
-     * Creates a new TextDocumentItem literal.\r
-     * @param uri The document's uri.\r
-     * @param languageId The document's language identifier.\r
-     * @param version The document's version number.\r
-     * @param text The document's text.\r
-     */\r
-    function create(uri, languageId, version, text) {\r
-        return { uri: uri, languageId: languageId, version: version, text: text };\r
-    }\r
-    TextDocumentItem.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);\r
-    }\r
-    TextDocumentItem.is = is;\r
-})(TextDocumentItem || (TextDocumentItem = {}));\r
-/**\r
- * Describes the content type that a client supports in various\r
- * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\r
- *\r
- * Please note that `MarkupKinds` must not start with a `$`. This kinds\r
- * are reserved for internal usage.\r
- */\r
-var MarkupKind;\r
-(function (MarkupKind) {\r
-    /**\r
-     * Plain text is supported as a content format\r
-     */\r
-    MarkupKind.PlainText = 'plaintext';\r
-    /**\r
-     * Markdown is supported as a content format\r
-     */\r
-    MarkupKind.Markdown = 'markdown';\r
-})(MarkupKind || (MarkupKind = {}));\r
-(function (MarkupKind) {\r
-    /**\r
-     * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\r
-    }\r
-    MarkupKind.is = is;\r
-})(MarkupKind || (MarkupKind = {}));\r
-var MarkupContent;\r
-(function (MarkupContent) {\r
-    /**\r
-     * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\r
-    }\r
-    MarkupContent.is = is;\r
-})(MarkupContent || (MarkupContent = {}));\r
-/**\r
- * The kind of a completion entry.\r
- */\r
-var CompletionItemKind;\r
-(function (CompletionItemKind) {\r
-    CompletionItemKind.Text = 1;\r
-    CompletionItemKind.Method = 2;\r
-    CompletionItemKind.Function = 3;\r
-    CompletionItemKind.Constructor = 4;\r
-    CompletionItemKind.Field = 5;\r
-    CompletionItemKind.Variable = 6;\r
-    CompletionItemKind.Class = 7;\r
-    CompletionItemKind.Interface = 8;\r
-    CompletionItemKind.Module = 9;\r
-    CompletionItemKind.Property = 10;\r
-    CompletionItemKind.Unit = 11;\r
-    CompletionItemKind.Value = 12;\r
-    CompletionItemKind.Enum = 13;\r
-    CompletionItemKind.Keyword = 14;\r
-    CompletionItemKind.Snippet = 15;\r
-    CompletionItemKind.Color = 16;\r
-    CompletionItemKind.File = 17;\r
-    CompletionItemKind.Reference = 18;\r
-    CompletionItemKind.Folder = 19;\r
-    CompletionItemKind.EnumMember = 20;\r
-    CompletionItemKind.Constant = 21;\r
-    CompletionItemKind.Struct = 22;\r
-    CompletionItemKind.Event = 23;\r
-    CompletionItemKind.Operator = 24;\r
-    CompletionItemKind.TypeParameter = 25;\r
-})(CompletionItemKind || (CompletionItemKind = {}));\r
-/**\r
- * Defines whether the insert text in a completion item should be interpreted as\r
- * plain text or a snippet.\r
- */\r
-var InsertTextFormat;\r
-(function (InsertTextFormat) {\r
-    /**\r
-     * The primary text to be inserted is treated as a plain string.\r
-     */\r
-    InsertTextFormat.PlainText = 1;\r
-    /**\r
-     * The primary text to be inserted is treated as a snippet.\r
-     *\r
-     * A snippet can define tab stops and placeholders with `$1`, `$2`\r
-     * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\r
-     * the end of the snippet. Placeholders with equal identifiers are linked,\r
-     * that is typing in one will update others too.\r
-     *\r
-     * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md\r
-     */\r
-    InsertTextFormat.Snippet = 2;\r
-})(InsertTextFormat || (InsertTextFormat = {}));\r
-/**\r
- * Completion item tags are extra annotations that tweak the rendering of a completion\r
- * item.\r
- *\r
- * @since 3.15.0\r
- */\r
-var CompletionItemTag;\r
-(function (CompletionItemTag) {\r
-    /**\r
-     * Render a completion as obsolete, usually using a strike-out.\r
-     */\r
-    CompletionItemTag.Deprecated = 1;\r
-})(CompletionItemTag || (CompletionItemTag = {}));\r
-/**\r
- * The CompletionItem namespace provides functions to deal with\r
- * completion items.\r
- */\r
-var CompletionItem;\r
-(function (CompletionItem) {\r
-    /**\r
-     * Create a completion item and seed it with a label.\r
-     * @param label The completion item's label\r
-     */\r
-    function create(label) {\r
-        return { label: label };\r
-    }\r
-    CompletionItem.create = create;\r
-})(CompletionItem || (CompletionItem = {}));\r
-/**\r
- * The CompletionList namespace provides functions to deal with\r
- * completion lists.\r
- */\r
-var CompletionList;\r
-(function (CompletionList) {\r
-    /**\r
-     * Creates a new completion list.\r
-     *\r
-     * @param items The completion items.\r
-     * @param isIncomplete The list is not complete.\r
-     */\r
-    function create(items, isIncomplete) {\r
-        return { items: items ? items : [], isIncomplete: !!isIncomplete };\r
-    }\r
-    CompletionList.create = create;\r
-})(CompletionList || (CompletionList = {}));\r
-var MarkedString;\r
-(function (MarkedString) {\r
-    /**\r
-     * Creates a marked string from plain text.\r
-     *\r
-     * @param plainText The plain text.\r
-     */\r
-    function fromPlainText(plainText) {\r
-        return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\r
-    }\r
-    MarkedString.fromPlainText = fromPlainText;\r
-    /**\r
-     * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\r
-    }\r
-    MarkedString.is = is;\r
-})(MarkedString || (MarkedString = {}));\r
-var Hover;\r
-(function (Hover) {\r
-    /**\r
-     * Checks whether the given value conforms to the [Hover](#Hover) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\r
-            MarkedString.is(candidate.contents) ||\r
-            Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));\r
-    }\r
-    Hover.is = is;\r
-})(Hover || (Hover = {}));\r
-/**\r
- * The ParameterInformation namespace provides helper functions to work with\r
- * [ParameterInformation](#ParameterInformation) literals.\r
- */\r
-var ParameterInformation;\r
-(function (ParameterInformation) {\r
-    /**\r
-     * Creates a new parameter information literal.\r
-     *\r
-     * @param label A label string.\r
-     * @param documentation A doc string.\r
-     */\r
-    function create(label, documentation) {\r
-        return documentation ? { label: label, documentation: documentation } : { label: label };\r
-    }\r
-    ParameterInformation.create = create;\r
-})(ParameterInformation || (ParameterInformation = {}));\r
-/**\r
- * The SignatureInformation namespace provides helper functions to work with\r
- * [SignatureInformation](#SignatureInformation) literals.\r
- */\r
-var SignatureInformation;\r
-(function (SignatureInformation) {\r
-    function create(label, documentation) {\r
-        var parameters = [];\r
-        for (var _i = 2; _i < arguments.length; _i++) {\r
-            parameters[_i - 2] = arguments[_i];\r
-        }\r
-        var result = { label: label };\r
-        if (Is.defined(documentation)) {\r
-            result.documentation = documentation;\r
-        }\r
-        if (Is.defined(parameters)) {\r
-            result.parameters = parameters;\r
-        }\r
-        else {\r
-            result.parameters = [];\r
-        }\r
-        return result;\r
-    }\r
-    SignatureInformation.create = create;\r
-})(SignatureInformation || (SignatureInformation = {}));\r
-/**\r
- * A document highlight kind.\r
- */\r
-var DocumentHighlightKind;\r
-(function (DocumentHighlightKind) {\r
-    /**\r
-     * A textual occurrence.\r
-     */\r
-    DocumentHighlightKind.Text = 1;\r
-    /**\r
-     * Read-access of a symbol, like reading a variable.\r
-     */\r
-    DocumentHighlightKind.Read = 2;\r
-    /**\r
-     * Write-access of a symbol, like writing to a variable.\r
-     */\r
-    DocumentHighlightKind.Write = 3;\r
-})(DocumentHighlightKind || (DocumentHighlightKind = {}));\r
-/**\r
- * DocumentHighlight namespace to provide helper functions to work with\r
- * [DocumentHighlight](#DocumentHighlight) literals.\r
- */\r
-var DocumentHighlight;\r
-(function (DocumentHighlight) {\r
-    /**\r
-     * Create a DocumentHighlight object.\r
-     * @param range The range the highlight applies to.\r
-     */\r
-    function create(range, kind) {\r
-        var result = { range: range };\r
-        if (Is.number(kind)) {\r
-            result.kind = kind;\r
-        }\r
-        return result;\r
-    }\r
-    DocumentHighlight.create = create;\r
-})(DocumentHighlight || (DocumentHighlight = {}));\r
-/**\r
- * A symbol kind.\r
- */\r
-var SymbolKind;\r
-(function (SymbolKind) {\r
-    SymbolKind.File = 1;\r
-    SymbolKind.Module = 2;\r
-    SymbolKind.Namespace = 3;\r
-    SymbolKind.Package = 4;\r
-    SymbolKind.Class = 5;\r
-    SymbolKind.Method = 6;\r
-    SymbolKind.Property = 7;\r
-    SymbolKind.Field = 8;\r
-    SymbolKind.Constructor = 9;\r
-    SymbolKind.Enum = 10;\r
-    SymbolKind.Interface = 11;\r
-    SymbolKind.Function = 12;\r
-    SymbolKind.Variable = 13;\r
-    SymbolKind.Constant = 14;\r
-    SymbolKind.String = 15;\r
-    SymbolKind.Number = 16;\r
-    SymbolKind.Boolean = 17;\r
-    SymbolKind.Array = 18;\r
-    SymbolKind.Object = 19;\r
-    SymbolKind.Key = 20;\r
-    SymbolKind.Null = 21;\r
-    SymbolKind.EnumMember = 22;\r
-    SymbolKind.Struct = 23;\r
-    SymbolKind.Event = 24;\r
-    SymbolKind.Operator = 25;\r
-    SymbolKind.TypeParameter = 26;\r
-})(SymbolKind || (SymbolKind = {}));\r
-/**\r
- * Symbol tags are extra annotations that tweak the rendering of a symbol.\r
- * @since 3.15\r
- */\r
-var SymbolTag;\r
-(function (SymbolTag) {\r
-    /**\r
-     * Render a symbol as obsolete, usually using a strike-out.\r
-     */\r
-    SymbolTag.Deprecated = 1;\r
-})(SymbolTag || (SymbolTag = {}));\r
-var SymbolInformation;\r
-(function (SymbolInformation) {\r
-    /**\r
-     * Creates a new symbol information literal.\r
-     *\r
-     * @param name The name of the symbol.\r
-     * @param kind The kind of the symbol.\r
-     * @param range The range of the location of the symbol.\r
-     * @param uri The resource of the location of symbol, defaults to the current document.\r
-     * @param containerName The name of the symbol containing the symbol.\r
-     */\r
-    function create(name, kind, range, uri, containerName) {\r
-        var result = {\r
-            name: name,\r
-            kind: kind,\r
-            location: { uri: uri, range: range }\r
-        };\r
-        if (containerName) {\r
-            result.containerName = containerName;\r
-        }\r
-        return result;\r
-    }\r
-    SymbolInformation.create = create;\r
-})(SymbolInformation || (SymbolInformation = {}));\r
-var DocumentSymbol;\r
-(function (DocumentSymbol) {\r
-    /**\r
-     * Creates a new symbol information literal.\r
-     *\r
-     * @param name The name of the symbol.\r
-     * @param detail The detail of the symbol.\r
-     * @param kind The kind of the symbol.\r
-     * @param range The range of the symbol.\r
-     * @param selectionRange The selectionRange of the symbol.\r
-     * @param children Children of the symbol.\r
-     */\r
-    function create(name, detail, kind, range, selectionRange, children) {\r
-        var result = {\r
-            name: name,\r
-            detail: detail,\r
-            kind: kind,\r
-            range: range,\r
-            selectionRange: selectionRange\r
-        };\r
-        if (children !== void 0) {\r
-            result.children = children;\r
-        }\r
-        return result;\r
-    }\r
-    DocumentSymbol.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate &&\r
-            Is.string(candidate.name) && Is.number(candidate.kind) &&\r
-            Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\r
-            (candidate.detail === void 0 || Is.string(candidate.detail)) &&\r
-            (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&\r
-            (candidate.children === void 0 || Array.isArray(candidate.children));\r
-    }\r
-    DocumentSymbol.is = is;\r
-})(DocumentSymbol || (DocumentSymbol = {}));\r
-/**\r
- * A set of predefined code action kinds\r
- */\r
-var CodeActionKind;\r
-(function (CodeActionKind) {\r
-    /**\r
-     * Empty kind.\r
-     */\r
-    CodeActionKind.Empty = '';\r
-    /**\r
-     * Base kind for quickfix actions: 'quickfix'\r
-     */\r
-    CodeActionKind.QuickFix = 'quickfix';\r
-    /**\r
-     * Base kind for refactoring actions: 'refactor'\r
-     */\r
-    CodeActionKind.Refactor = 'refactor';\r
-    /**\r
-     * Base kind for refactoring extraction actions: 'refactor.extract'\r
-     *\r
-     * Example extract actions:\r
-     *\r
-     * - Extract method\r
-     * - Extract function\r
-     * - Extract variable\r
-     * - Extract interface from class\r
-     * - ...\r
-     */\r
-    CodeActionKind.RefactorExtract = 'refactor.extract';\r
-    /**\r
-     * Base kind for refactoring inline actions: 'refactor.inline'\r
-     *\r
-     * Example inline actions:\r
-     *\r
-     * - Inline function\r
-     * - Inline variable\r
-     * - Inline constant\r
-     * - ...\r
-     */\r
-    CodeActionKind.RefactorInline = 'refactor.inline';\r
-    /**\r
-     * Base kind for refactoring rewrite actions: 'refactor.rewrite'\r
-     *\r
-     * Example rewrite actions:\r
-     *\r
-     * - Convert JavaScript function to class\r
-     * - Add or remove parameter\r
-     * - Encapsulate field\r
-     * - Make method static\r
-     * - Move method to base class\r
-     * - ...\r
-     */\r
-    CodeActionKind.RefactorRewrite = 'refactor.rewrite';\r
-    /**\r
-     * Base kind for source actions: `source`\r
-     *\r
-     * Source code actions apply to the entire file.\r
-     */\r
-    CodeActionKind.Source = 'source';\r
-    /**\r
-     * Base kind for an organize imports source action: `source.organizeImports`\r
-     */\r
-    CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\r
-    /**\r
-     * Base kind for auto-fix source actions: `source.fixAll`.\r
-     *\r
-     * Fix all actions automatically fix errors that have a clear fix that do not require user input.\r
-     * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\r
-     *\r
-     * @since 3.15.0\r
-     */\r
-    CodeActionKind.SourceFixAll = 'source.fixAll';\r
-})(CodeActionKind || (CodeActionKind = {}));\r
-/**\r
- * The CodeActionContext namespace provides helper functions to work with\r
- * [CodeActionContext](#CodeActionContext) literals.\r
- */\r
-var CodeActionContext;\r
-(function (CodeActionContext) {\r
-    /**\r
-     * Creates a new CodeActionContext literal.\r
-     */\r
-    function create(diagnostics, only) {\r
-        var result = { diagnostics: diagnostics };\r
-        if (only !== void 0 && only !== null) {\r
-            result.only = only;\r
-        }\r
-        return result;\r
-    }\r
-    CodeActionContext.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));\r
-    }\r
-    CodeActionContext.is = is;\r
-})(CodeActionContext || (CodeActionContext = {}));\r
-var CodeAction;\r
-(function (CodeAction) {\r
-    function create(title, commandOrEdit, kind) {\r
-        var result = { title: title };\r
-        if (Command.is(commandOrEdit)) {\r
-            result.command = commandOrEdit;\r
-        }\r
-        else {\r
-            result.edit = commandOrEdit;\r
-        }\r
-        if (kind !== void 0) {\r
-            result.kind = kind;\r
-        }\r
-        return result;\r
-    }\r
-    CodeAction.create = create;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate && Is.string(candidate.title) &&\r
-            (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\r
-            (candidate.kind === void 0 || Is.string(candidate.kind)) &&\r
-            (candidate.edit !== void 0 || candidate.command !== void 0) &&\r
-            (candidate.command === void 0 || Command.is(candidate.command)) &&\r
-            (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) &&\r
-            (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));\r
-    }\r
-    CodeAction.is = is;\r
-})(CodeAction || (CodeAction = {}));\r
-/**\r
- * The CodeLens namespace provides helper functions to work with\r
- * [CodeLens](#CodeLens) literals.\r
- */\r
-var CodeLens;\r
-(function (CodeLens) {\r
-    /**\r
-     * Creates a new CodeLens literal.\r
-     */\r
-    function create(range, data) {\r
-        var result = { range: range };\r
-        if (Is.defined(data)) {\r
-            result.data = data;\r
-        }\r
-        return result;\r
-    }\r
-    CodeLens.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\r
-    }\r
-    CodeLens.is = is;\r
-})(CodeLens || (CodeLens = {}));\r
-/**\r
- * The FormattingOptions namespace provides helper functions to work with\r
- * [FormattingOptions](#FormattingOptions) literals.\r
- */\r
-var FormattingOptions;\r
-(function (FormattingOptions) {\r
-    /**\r
-     * Creates a new FormattingOptions literal.\r
-     */\r
-    function create(tabSize, insertSpaces) {\r
-        return { tabSize: tabSize, insertSpaces: insertSpaces };\r
-    }\r
-    FormattingOptions.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\r
-    }\r
-    FormattingOptions.is = is;\r
-})(FormattingOptions || (FormattingOptions = {}));\r
-/**\r
- * The DocumentLink namespace provides helper functions to work with\r
- * [DocumentLink](#DocumentLink) literals.\r
- */\r
-var DocumentLink;\r
-(function (DocumentLink) {\r
-    /**\r
-     * Creates a new DocumentLink literal.\r
-     */\r
-    function create(range, target, data) {\r
-        return { range: range, target: target, data: data };\r
-    }\r
-    DocumentLink.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\r
-    }\r
-    DocumentLink.is = is;\r
-})(DocumentLink || (DocumentLink = {}));\r
-/**\r
- * The SelectionRange namespace provides helper function to work with\r
- * SelectionRange literals.\r
- */\r
-var SelectionRange;\r
-(function (SelectionRange) {\r
-    /**\r
-     * Creates a new SelectionRange\r
-     * @param range the range.\r
-     * @param parent an optional parent.\r
-     */\r
-    function create(range, parent) {\r
-        return { range: range, parent: parent };\r
-    }\r
-    SelectionRange.create = create;\r
-    function is(value) {\r
-        var candidate = value;\r
-        return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\r
-    }\r
-    SelectionRange.is = is;\r
-})(SelectionRange || (SelectionRange = {}));\r
-var EOL = ['\n', '\r\n', '\r'];\r
-/**\r
- * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\r
- */\r
-var TextDocument;\r
-(function (TextDocument) {\r
-    /**\r
-     * Creates a new ITextDocument literal from the given uri and content.\r
-     * @param uri The document's uri.\r
-     * @param languageId  The document's language Id.\r
-     * @param content The document's content.\r
-     */\r
-    function create(uri, languageId, version, content) {\r
-        return new FullTextDocument(uri, languageId, version, content);\r
-    }\r
-    TextDocument.create = create;\r
-    /**\r
-     * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.\r
-     */\r
-    function is(value) {\r
-        var candidate = value;\r
-        return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)\r
-            && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\r
-    }\r
-    TextDocument.is = is;\r
-    function applyEdits(document, edits) {\r
-        var text = document.getText();\r
-        var sortedEdits = mergeSort(edits, function (a, b) {\r
-            var diff = a.range.start.line - b.range.start.line;\r
-            if (diff === 0) {\r
-                return a.range.start.character - b.range.start.character;\r
-            }\r
-            return diff;\r
-        });\r
-        var lastModifiedOffset = text.length;\r
-        for (var i = sortedEdits.length - 1; i >= 0; i--) {\r
-            var e = sortedEdits[i];\r
-            var startOffset = document.offsetAt(e.range.start);\r
-            var endOffset = document.offsetAt(e.range.end);\r
-            if (endOffset <= lastModifiedOffset) {\r
-                text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\r
-            }\r
-            else {\r
-                throw new Error('Overlapping edit');\r
-            }\r
-            lastModifiedOffset = startOffset;\r
-        }\r
-        return text;\r
-    }\r
-    TextDocument.applyEdits = applyEdits;\r
-    function mergeSort(data, compare) {\r
-        if (data.length <= 1) {\r
-            // sorted\r
-            return data;\r
-        }\r
-        var p = (data.length / 2) | 0;\r
-        var left = data.slice(0, p);\r
-        var right = data.slice(p);\r
-        mergeSort(left, compare);\r
-        mergeSort(right, compare);\r
-        var leftIdx = 0;\r
-        var rightIdx = 0;\r
-        var i = 0;\r
-        while (leftIdx < left.length && rightIdx < right.length) {\r
-            var ret = compare(left[leftIdx], right[rightIdx]);\r
-            if (ret <= 0) {\r
-                // smaller_equal -> take left to preserve order\r
-                data[i++] = left[leftIdx++];\r
-            }\r
-            else {\r
-                // greater -> take right\r
-                data[i++] = right[rightIdx++];\r
-            }\r
-        }\r
-        while (leftIdx < left.length) {\r
-            data[i++] = left[leftIdx++];\r
-        }\r
-        while (rightIdx < right.length) {\r
-            data[i++] = right[rightIdx++];\r
-        }\r
-        return data;\r
-    }\r
-})(TextDocument || (TextDocument = {}));\r
-var FullTextDocument = /** @class */ (function () {\r
-    function FullTextDocument(uri, languageId, version, content) {\r
-        this._uri = uri;\r
-        this._languageId = languageId;\r
-        this._version = version;\r
-        this._content = content;\r
-        this._lineOffsets = undefined;\r
-    }\r
-    Object.defineProperty(FullTextDocument.prototype, "uri", {\r
-        get: function () {\r
-            return this._uri;\r
-        },\r
-        enumerable: true,\r
-        configurable: true\r
-    });\r
-    Object.defineProperty(FullTextDocument.prototype, "languageId", {\r
-        get: function () {\r
-            return this._languageId;\r
-        },\r
-        enumerable: true,\r
-        configurable: true\r
-    });\r
-    Object.defineProperty(FullTextDocument.prototype, "version", {\r
-        get: function () {\r
-            return this._version;\r
-        },\r
-        enumerable: true,\r
-        configurable: true\r
-    });\r
-    FullTextDocument.prototype.getText = function (range) {\r
-        if (range) {\r
-            var start = this.offsetAt(range.start);\r
-            var end = this.offsetAt(range.end);\r
-            return this._content.substring(start, end);\r
-        }\r
-        return this._content;\r
-    };\r
-    FullTextDocument.prototype.update = function (event, version) {\r
-        this._content = event.text;\r
-        this._version = version;\r
-        this._lineOffsets = undefined;\r
-    };\r
-    FullTextDocument.prototype.getLineOffsets = function () {\r
-        if (this._lineOffsets === undefined) {\r
-            var lineOffsets = [];\r
-            var text = this._content;\r
-            var isLineStart = true;\r
-            for (var i = 0; i < text.length; i++) {\r
-                if (isLineStart) {\r
-                    lineOffsets.push(i);\r
-                    isLineStart = false;\r
-                }\r
-                var ch = text.charAt(i);\r
-                isLineStart = (ch === '\r' || ch === '\n');\r
-                if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {\r
-                    i++;\r
-                }\r
-            }\r
-            if (isLineStart && text.length > 0) {\r
-                lineOffsets.push(text.length);\r
-            }\r
-            this._lineOffsets = lineOffsets;\r
-        }\r
-        return this._lineOffsets;\r
-    };\r
-    FullTextDocument.prototype.positionAt = function (offset) {\r
-        offset = Math.max(Math.min(offset, this._content.length), 0);\r
-        var lineOffsets = this.getLineOffsets();\r
-        var low = 0, high = lineOffsets.length;\r
-        if (high === 0) {\r
-            return Position.create(0, offset);\r
-        }\r
-        while (low < high) {\r
-            var mid = Math.floor((low + high) / 2);\r
-            if (lineOffsets[mid] > offset) {\r
-                high = mid;\r
-            }\r
-            else {\r
-                low = mid + 1;\r
-            }\r
-        }\r
-        // low is the least x for which the line offset is larger than the current offset\r
-        // or array.length if no line offset is larger than the current offset\r
-        var line = low - 1;\r
-        return Position.create(line, offset - lineOffsets[line]);\r
-    };\r
-    FullTextDocument.prototype.offsetAt = function (position) {\r
-        var lineOffsets = this.getLineOffsets();\r
-        if (position.line >= lineOffsets.length) {\r
-            return this._content.length;\r
-        }\r
-        else if (position.line < 0) {\r
-            return 0;\r
-        }\r
-        var lineOffset = lineOffsets[position.line];\r
-        var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\r
-        return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\r
-    };\r
-    Object.defineProperty(FullTextDocument.prototype, "lineCount", {\r
-        get: function () {\r
-            return this.getLineOffsets().length;\r
-        },\r
-        enumerable: true,\r
-        configurable: true\r
-    });\r
-    return FullTextDocument;\r
-}());\r
-var Is;\r
-(function (Is) {\r
-    var toString = Object.prototype.toString;\r
-    function defined(value) {\r
-        return typeof value !== 'undefined';\r
-    }\r
-    Is.defined = defined;\r
-    function undefined(value) {\r
-        return typeof value === 'undefined';\r
-    }\r
-    Is.undefined = undefined;\r
-    function boolean(value) {\r
-        return value === true || value === false;\r
-    }\r
-    Is.boolean = boolean;\r
-    function string(value) {\r
-        return toString.call(value) === '[object String]';\r
-    }\r
-    Is.string = string;\r
-    function number(value) {\r
-        return toString.call(value) === '[object Number]';\r
-    }\r
-    Is.number = number;\r
-    function func(value) {\r
-        return toString.call(value) === '[object Function]';\r
-    }\r
-    Is.func = func;\r
-    function objectLiteral(value) {\r
-        // Strictly speaking class instances pass this check as well. Since the LSP\r
-        // doesn't use classes we ignore this for now. If we do we need to add something\r
-        // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\r
-        return value !== null && typeof value === 'object';\r
-    }\r
-    Is.objectLiteral = objectLiteral;\r
-    function typedArray(value, check) {\r
-        return Array.isArray(value) && value.every(check);\r
-    }\r
-    Is.typedArray = typedArray;\r
-})(Is || (Is = {}));\r
-
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const Is = __webpack_require__(20);\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-const protocol_implementation_1 = __webpack_require__(22);\r
-exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;\r
-const protocol_typeDefinition_1 = __webpack_require__(23);\r
-exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;\r
-const protocol_workspaceFolders_1 = __webpack_require__(24);\r
-exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;\r
-exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;\r
-const protocol_configuration_1 = __webpack_require__(25);\r
-exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;\r
-const protocol_colorProvider_1 = __webpack_require__(26);\r
-exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;\r
-exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;\r
-const protocol_foldingRange_1 = __webpack_require__(27);\r
-exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;\r
-const protocol_declaration_1 = __webpack_require__(28);\r
-exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;\r
-const protocol_selectionRange_1 = __webpack_require__(29);\r
-exports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;\r
-const protocol_progress_1 = __webpack_require__(30);\r
-exports.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;\r
-exports.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;\r
-exports.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;\r
-// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r
-let __noDynamicImport;\r
-/**\r
- * The DocumentFilter namespace provides helper functions to work with\r
- * [DocumentFilter](#DocumentFilter) literals.\r
- */\r
-var DocumentFilter;\r
-(function (DocumentFilter) {\r
-    function is(value) {\r
-        const candidate = value;\r
-        return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);\r
-    }\r
-    DocumentFilter.is = is;\r
-})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));\r
-/**\r
- * The DocumentSelector namespace provides helper functions to work with\r
- * [DocumentSelector](#DocumentSelector)s.\r
- */\r
-var DocumentSelector;\r
-(function (DocumentSelector) {\r
-    function is(value) {\r
-        if (!Array.isArray(value)) {\r
-            return false;\r
-        }\r
-        for (let elem of value) {\r
-            if (!Is.string(elem) && !DocumentFilter.is(elem)) {\r
-                return false;\r
-            }\r
-        }\r
-        return true;\r
-    }\r
-    DocumentSelector.is = is;\r
-})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));\r
-/**\r
- * The `client/registerCapability` request is sent from the server to the client to register a new capability\r
- * handler on the client side.\r
- */\r
-var RegistrationRequest;\r
-(function (RegistrationRequest) {\r
-    RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');\r
-})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));\r
-/**\r
- * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability\r
- * handler on the client side.\r
- */\r
-var UnregistrationRequest;\r
-(function (UnregistrationRequest) {\r
-    UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');\r
-})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));\r
-var ResourceOperationKind;\r
-(function (ResourceOperationKind) {\r
-    /**\r
-     * Supports creating new files and folders.\r
-     */\r
-    ResourceOperationKind.Create = 'create';\r
-    /**\r
-     * Supports renaming existing files and folders.\r
-     */\r
-    ResourceOperationKind.Rename = 'rename';\r
-    /**\r
-     * Supports deleting existing files and folders.\r
-     */\r
-    ResourceOperationKind.Delete = 'delete';\r
-})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));\r
-var FailureHandlingKind;\r
-(function (FailureHandlingKind) {\r
-    /**\r
-     * Applying the workspace change is simply aborted if one of the changes provided\r
-     * fails. All operations executed before the failing operation stay executed.\r
-     */\r
-    FailureHandlingKind.Abort = 'abort';\r
-    /**\r
-     * All operations are executed transactional. That means they either all\r
-     * succeed or no changes at all are applied to the workspace.\r
-     */\r
-    FailureHandlingKind.Transactional = 'transactional';\r
-    /**\r
-     * If the workspace edit contains only textual file changes they are executed transactional.\r
-     * If resource changes (create, rename or delete file) are part of the change the failure\r
-     * handling startegy is abort.\r
-     */\r
-    FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';\r
-    /**\r
-     * The client tries to undo the operations already executed. But there is no\r
-     * guarantee that this is succeeding.\r
-     */\r
-    FailureHandlingKind.Undo = 'undo';\r
-})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));\r
-/**\r
- * The StaticRegistrationOptions namespace provides helper functions to work with\r
- * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.\r
- */\r
-var StaticRegistrationOptions;\r
-(function (StaticRegistrationOptions) {\r
-    function hasId(value) {\r
-        const candidate = value;\r
-        return candidate && Is.string(candidate.id) && candidate.id.length > 0;\r
-    }\r
-    StaticRegistrationOptions.hasId = hasId;\r
-})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));\r
-/**\r
- * The TextDocumentRegistrationOptions namespace provides helper functions to work with\r
- * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.\r
- */\r
-var TextDocumentRegistrationOptions;\r
-(function (TextDocumentRegistrationOptions) {\r
-    function is(value) {\r
-        const candidate = value;\r
-        return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));\r
-    }\r
-    TextDocumentRegistrationOptions.is = is;\r
-})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));\r
-/**\r
- * The WorkDoneProgressOptions namespace provides helper functions to work with\r
- * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.\r
- */\r
-var WorkDoneProgressOptions;\r
-(function (WorkDoneProgressOptions) {\r
-    function is(value) {\r
-        const candidate = value;\r
-        return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));\r
-    }\r
-    WorkDoneProgressOptions.is = is;\r
-    function hasWorkDoneProgress(value) {\r
-        const candidate = value;\r
-        return candidate && Is.boolean(candidate.workDoneProgress);\r
-    }\r
-    WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;\r
-})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));\r
-/**\r
- * The initialize request is sent from the client to the server.\r
- * It is sent once as the request after starting up the server.\r
- * The requests parameter is of type [InitializeParams](#InitializeParams)\r
- * the response if of type [InitializeResult](#InitializeResult) of a Thenable that\r
- * resolves to such.\r
- */\r
-var InitializeRequest;\r
-(function (InitializeRequest) {\r
-    InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');\r
-})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));\r
-/**\r
- * Known error codes for an `InitializeError`;\r
- */\r
-var InitializeError;\r
-(function (InitializeError) {\r
-    /**\r
-     * If the protocol version provided by the client can't be handled by the server.\r
-     * @deprecated This initialize error got replaced by client capabilities. There is\r
-     * no version handshake in version 3.0x\r
-     */\r
-    InitializeError.unknownProtocolVersion = 1;\r
-})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));\r
-/**\r
- * The intialized notification is sent from the client to the\r
- * server after the client is fully initialized and the server\r
- * is allowed to send requests from the server to the client.\r
- */\r
-var InitializedNotification;\r
-(function (InitializedNotification) {\r
-    InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');\r
-})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));\r
-//---- Shutdown Method ----\r
-/**\r
- * A shutdown request is sent from the client to the server.\r
- * It is sent once when the client decides to shutdown the\r
- * server. The only notification that is sent after a shutdown request\r
- * is the exit event.\r
- */\r
-var ShutdownRequest;\r
-(function (ShutdownRequest) {\r
-    ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');\r
-})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));\r
-//---- Exit Notification ----\r
-/**\r
- * The exit event is sent from the client to the server to\r
- * ask the server to exit its process.\r
- */\r
-var ExitNotification;\r
-(function (ExitNotification) {\r
-    ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');\r
-})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));\r
-/**\r
- * The configuration change notification is sent from the client to the server\r
- * when the client's configuration has changed. The notification contains\r
- * the changed configuration as defined by the language client.\r
- */\r
-var DidChangeConfigurationNotification;\r
-(function (DidChangeConfigurationNotification) {\r
-    DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');\r
-})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));\r
-//---- Message show and log notifications ----\r
-/**\r
- * The message type\r
- */\r
-var MessageType;\r
-(function (MessageType) {\r
-    /**\r
-     * An error message.\r
-     */\r
-    MessageType.Error = 1;\r
-    /**\r
-     * A warning message.\r
-     */\r
-    MessageType.Warning = 2;\r
-    /**\r
-     * An information message.\r
-     */\r
-    MessageType.Info = 3;\r
-    /**\r
-     * A log message.\r
-     */\r
-    MessageType.Log = 4;\r
-})(MessageType = exports.MessageType || (exports.MessageType = {}));\r
-/**\r
- * The show message notification is sent from a server to a client to ask\r
- * the client to display a particular message in the user interface.\r
- */\r
-var ShowMessageNotification;\r
-(function (ShowMessageNotification) {\r
-    ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');\r
-})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));\r
-/**\r
- * The show message request is sent from the server to the client to show a message\r
- * and a set of options actions to the user.\r
- */\r
-var ShowMessageRequest;\r
-(function (ShowMessageRequest) {\r
-    ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');\r
-})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));\r
-/**\r
- * The log message notification is sent from the server to the client to ask\r
- * the client to log a particular message.\r
- */\r
-var LogMessageNotification;\r
-(function (LogMessageNotification) {\r
-    LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');\r
-})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));\r
-//---- Telemetry notification\r
-/**\r
- * The telemetry event notification is sent from the server to the client to ask\r
- * the client to log telemetry data.\r
- */\r
-var TelemetryEventNotification;\r
-(function (TelemetryEventNotification) {\r
-    TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');\r
-})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));\r
-/**\r
- * Defines how the host (editor) should sync\r
- * document changes to the language server.\r
- */\r
-var TextDocumentSyncKind;\r
-(function (TextDocumentSyncKind) {\r
-    /**\r
-     * Documents should not be synced at all.\r
-     */\r
-    TextDocumentSyncKind.None = 0;\r
-    /**\r
-     * Documents are synced by always sending the full content\r
-     * of the document.\r
-     */\r
-    TextDocumentSyncKind.Full = 1;\r
-    /**\r
-     * Documents are synced by sending the full content on open.\r
-     * After that only incremental updates to the document are\r
-     * send.\r
-     */\r
-    TextDocumentSyncKind.Incremental = 2;\r
-})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));\r
-/**\r
- * The document open notification is sent from the client to the server to signal\r
- * newly opened text documents. The document's truth is now managed by the client\r
- * and the server must not try to read the document's truth using the document's\r
- * uri. Open in this sense means it is managed by the client. It doesn't necessarily\r
- * mean that its content is presented in an editor. An open notification must not\r
- * be sent more than once without a corresponding close notification send before.\r
- * This means open and close notification must be balanced and the max open count\r
- * is one.\r
- */\r
-var DidOpenTextDocumentNotification;\r
-(function (DidOpenTextDocumentNotification) {\r
-    DidOpenTextDocumentNotification.method = 'textDocument/didOpen';\r
-    DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);\r
-})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));\r
-/**\r
- * The document change notification is sent from the client to the server to signal\r
- * changes to a text document.\r
- */\r
-var DidChangeTextDocumentNotification;\r
-(function (DidChangeTextDocumentNotification) {\r
-    DidChangeTextDocumentNotification.method = 'textDocument/didChange';\r
-    DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);\r
-})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));\r
-/**\r
- * The document close notification is sent from the client to the server when\r
- * the document got closed in the client. The document's truth now exists where\r
- * the document's uri points to (e.g. if the document's uri is a file uri the\r
- * truth now exists on disk). As with the open notification the close notification\r
- * is about managing the document's content. Receiving a close notification\r
- * doesn't mean that the document was open in an editor before. A close\r
- * notification requires a previous open notification to be sent.\r
- */\r
-var DidCloseTextDocumentNotification;\r
-(function (DidCloseTextDocumentNotification) {\r
-    DidCloseTextDocumentNotification.method = 'textDocument/didClose';\r
-    DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);\r
-})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));\r
-/**\r
- * The document save notification is sent from the client to the server when\r
- * the document got saved in the client.\r
- */\r
-var DidSaveTextDocumentNotification;\r
-(function (DidSaveTextDocumentNotification) {\r
-    DidSaveTextDocumentNotification.method = 'textDocument/didSave';\r
-    DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);\r
-})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));\r
-/**\r
- * Represents reasons why a text document is saved.\r
- */\r
-var TextDocumentSaveReason;\r
-(function (TextDocumentSaveReason) {\r
-    /**\r
-     * Manually triggered, e.g. by the user pressing save, by starting debugging,\r
-     * or by an API call.\r
-     */\r
-    TextDocumentSaveReason.Manual = 1;\r
-    /**\r
-     * Automatic after a delay.\r
-     */\r
-    TextDocumentSaveReason.AfterDelay = 2;\r
-    /**\r
-     * When the editor lost focus.\r
-     */\r
-    TextDocumentSaveReason.FocusOut = 3;\r
-})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));\r
-/**\r
- * A document will save notification is sent from the client to the server before\r
- * the document is actually saved.\r
- */\r
-var WillSaveTextDocumentNotification;\r
-(function (WillSaveTextDocumentNotification) {\r
-    WillSaveTextDocumentNotification.method = 'textDocument/willSave';\r
-    WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);\r
-})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));\r
-/**\r
- * A document will save request is sent from the client to the server before\r
- * the document is actually saved. The request can return an array of TextEdits\r
- * which will be applied to the text document before it is saved. Please note that\r
- * clients might drop results if computing the text edits took too long or if a\r
- * server constantly fails on this request. This is done to keep the save fast and\r
- * reliable.\r
- */\r
-var WillSaveTextDocumentWaitUntilRequest;\r
-(function (WillSaveTextDocumentWaitUntilRequest) {\r
-    WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';\r
-    WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);\r
-})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));\r
-/**\r
- * The watched files notification is sent from the client to the server when\r
- * the client detects changes to file watched by the language client.\r
- */\r
-var DidChangeWatchedFilesNotification;\r
-(function (DidChangeWatchedFilesNotification) {\r
-    DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');\r
-})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));\r
-/**\r
- * The file event type\r
- */\r
-var FileChangeType;\r
-(function (FileChangeType) {\r
-    /**\r
-     * The file got created.\r
-     */\r
-    FileChangeType.Created = 1;\r
-    /**\r
-     * The file got changed.\r
-     */\r
-    FileChangeType.Changed = 2;\r
-    /**\r
-     * The file got deleted.\r
-     */\r
-    FileChangeType.Deleted = 3;\r
-})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));\r
-var WatchKind;\r
-(function (WatchKind) {\r
-    /**\r
-     * Interested in create events.\r
-     */\r
-    WatchKind.Create = 1;\r
-    /**\r
-     * Interested in change events\r
-     */\r
-    WatchKind.Change = 2;\r
-    /**\r
-     * Interested in delete events\r
-     */\r
-    WatchKind.Delete = 4;\r
-})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));\r
-/**\r
- * Diagnostics notification are sent from the server to the client to signal\r
- * results of validation runs.\r
- */\r
-var PublishDiagnosticsNotification;\r
-(function (PublishDiagnosticsNotification) {\r
-    PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');\r
-})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));\r
-/**\r
- * How a completion was triggered\r
- */\r
-var CompletionTriggerKind;\r
-(function (CompletionTriggerKind) {\r
-    /**\r
-     * Completion was triggered by typing an identifier (24x7 code\r
-     * complete), manual invocation (e.g Ctrl+Space) or via API.\r
-     */\r
-    CompletionTriggerKind.Invoked = 1;\r
-    /**\r
-     * Completion was triggered by a trigger character specified by\r
-     * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.\r
-     */\r
-    CompletionTriggerKind.TriggerCharacter = 2;\r
-    /**\r
-     * Completion was re-triggered as current completion list is incomplete\r
-     */\r
-    CompletionTriggerKind.TriggerForIncompleteCompletions = 3;\r
-})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));\r
-/**\r
- * Request to request completion at a given text document position. The request's\r
- * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response\r
- * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)\r
- * or a Thenable that resolves to such.\r
- *\r
- * The request can delay the computation of the [`detail`](#CompletionItem.detail)\r
- * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`\r
- * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,\r
- * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.\r
- */\r
-var CompletionRequest;\r
-(function (CompletionRequest) {\r
-    CompletionRequest.method = 'textDocument/completion';\r
-    CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);\r
-    /** @deprecated Use CompletionRequest.type */\r
-    CompletionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));\r
-/**\r
- * Request to resolve additional information for a given completion item.The request's\r
- * parameter is of type [CompletionItem](#CompletionItem) the response\r
- * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.\r
- */\r
-var CompletionResolveRequest;\r
-(function (CompletionResolveRequest) {\r
-    CompletionResolveRequest.method = 'completionItem/resolve';\r
-    CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);\r
-})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));\r
-/**\r
- * Request to request hover information at a given text document position. The request's\r
- * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of\r
- * type [Hover](#Hover) or a Thenable that resolves to such.\r
- */\r
-var HoverRequest;\r
-(function (HoverRequest) {\r
-    HoverRequest.method = 'textDocument/hover';\r
-    HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);\r
-})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));\r
-/**\r
- * How a signature help was triggered.\r
- *\r
- * @since 3.15.0\r
- */\r
-var SignatureHelpTriggerKind;\r
-(function (SignatureHelpTriggerKind) {\r
-    /**\r
-     * Signature help was invoked manually by the user or by a command.\r
-     */\r
-    SignatureHelpTriggerKind.Invoked = 1;\r
-    /**\r
-     * Signature help was triggered by a trigger character.\r
-     */\r
-    SignatureHelpTriggerKind.TriggerCharacter = 2;\r
-    /**\r
-     * Signature help was triggered by the cursor moving or by the document content changing.\r
-     */\r
-    SignatureHelpTriggerKind.ContentChange = 3;\r
-})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));\r
-var SignatureHelpRequest;\r
-(function (SignatureHelpRequest) {\r
-    SignatureHelpRequest.method = 'textDocument/signatureHelp';\r
-    SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);\r
-})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));\r
-/**\r
- * A request to resolve the definition location of a symbol at a given text\r
- * document position. The request's parameter is of type [TextDocumentPosition]\r
- * (#TextDocumentPosition) the response is of either type [Definition](#Definition)\r
- * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves\r
- * to such.\r
- */\r
-var DefinitionRequest;\r
-(function (DefinitionRequest) {\r
-    DefinitionRequest.method = 'textDocument/definition';\r
-    DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);\r
-    /** @deprecated Use DefinitionRequest.type */\r
-    DefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));\r
-/**\r
- * A request to resolve project-wide references for the symbol denoted\r
- * by the given text document position. The request's parameter is of\r
- * type [ReferenceParams](#ReferenceParams) the response is of type\r
- * [Location[]](#Location) or a Thenable that resolves to such.\r
- */\r
-var ReferencesRequest;\r
-(function (ReferencesRequest) {\r
-    ReferencesRequest.method = 'textDocument/references';\r
-    ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);\r
-    /** @deprecated Use ReferencesRequest.type */\r
-    ReferencesRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));\r
-/**\r
- * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given\r
- * text document position. The request's parameter is of type [TextDocumentPosition]\r
- * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]\r
- * (#DocumentHighlight) or a Thenable that resolves to such.\r
- */\r
-var DocumentHighlightRequest;\r
-(function (DocumentHighlightRequest) {\r
-    DocumentHighlightRequest.method = 'textDocument/documentHighlight';\r
-    DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);\r
-    /** @deprecated Use DocumentHighlightRequest.type */\r
-    DocumentHighlightRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));\r
-/**\r
- * A request to list all symbols found in a given text document. The request's\r
- * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the\r
- * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable\r
- * that resolves to such.\r
- */\r
-var DocumentSymbolRequest;\r
-(function (DocumentSymbolRequest) {\r
-    DocumentSymbolRequest.method = 'textDocument/documentSymbol';\r
-    DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);\r
-    /** @deprecated Use DocumentSymbolRequest.type */\r
-    DocumentSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));\r
-/**\r
- * A request to provide commands for the given text document and range.\r
- */\r
-var CodeActionRequest;\r
-(function (CodeActionRequest) {\r
-    CodeActionRequest.method = 'textDocument/codeAction';\r
-    CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);\r
-    /** @deprecated Use CodeActionRequest.type */\r
-    CodeActionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));\r
-/**\r
- * A request to list project-wide symbols matching the query string given\r
- * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is\r
- * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that\r
- * resolves to such.\r
- */\r
-var WorkspaceSymbolRequest;\r
-(function (WorkspaceSymbolRequest) {\r
-    WorkspaceSymbolRequest.method = 'workspace/symbol';\r
-    WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);\r
-    /** @deprecated Use WorkspaceSymbolRequest.type */\r
-    WorkspaceSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));\r
-/**\r
- * A request to provide code lens for the given text document.\r
- */\r
-var CodeLensRequest;\r
-(function (CodeLensRequest) {\r
-    CodeLensRequest.type = new messages_1.ProtocolRequestType('textDocument/codeLens');\r
-    /** @deprecated Use CodeLensRequest.type */\r
-    CodeLensRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));\r
-/**\r
- * A request to resolve a command for a given code lens.\r
- */\r
-var CodeLensResolveRequest;\r
-(function (CodeLensResolveRequest) {\r
-    CodeLensResolveRequest.type = new messages_1.ProtocolRequestType('codeLens/resolve');\r
-})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));\r
-/**\r
- * A request to provide document links\r
- */\r
-var DocumentLinkRequest;\r
-(function (DocumentLinkRequest) {\r
-    DocumentLinkRequest.method = 'textDocument/documentLink';\r
-    DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);\r
-    /** @deprecated Use DocumentLinkRequest.type */\r
-    DocumentLinkRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));\r
-/**\r
- * Request to resolve additional information for a given document link. The request's\r
- * parameter is of type [DocumentLink](#DocumentLink) the response\r
- * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.\r
- */\r
-var DocumentLinkResolveRequest;\r
-(function (DocumentLinkResolveRequest) {\r
-    DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType('documentLink/resolve');\r
-})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));\r
-/**\r
- * A request to to format a whole document.\r
- */\r
-var DocumentFormattingRequest;\r
-(function (DocumentFormattingRequest) {\r
-    DocumentFormattingRequest.method = 'textDocument/formatting';\r
-    DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);\r
-})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));\r
-/**\r
- * A request to to format a range in a document.\r
- */\r
-var DocumentRangeFormattingRequest;\r
-(function (DocumentRangeFormattingRequest) {\r
-    DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';\r
-    DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);\r
-})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));\r
-/**\r
- * A request to format a document on type.\r
- */\r
-var DocumentOnTypeFormattingRequest;\r
-(function (DocumentOnTypeFormattingRequest) {\r
-    DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';\r
-    DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);\r
-})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));\r
-/**\r
- * A request to rename a symbol.\r
- */\r
-var RenameRequest;\r
-(function (RenameRequest) {\r
-    RenameRequest.method = 'textDocument/rename';\r
-    RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);\r
-})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));\r
-/**\r
- * A request to test and perform the setup necessary for a rename.\r
- */\r
-var PrepareRenameRequest;\r
-(function (PrepareRenameRequest) {\r
-    PrepareRenameRequest.method = 'textDocument/prepareRename';\r
-    PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);\r
-})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));\r
-/**\r
- * A request send from the client to the server to execute a command. The request might return\r
- * a workspace edit which the client will apply to the workspace.\r
- */\r
-var ExecuteCommandRequest;\r
-(function (ExecuteCommandRequest) {\r
-    ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');\r
-})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));\r
-/**\r
- * A request sent from the server to the client to modified certain resources.\r
- */\r
-var ApplyWorkspaceEditRequest;\r
-(function (ApplyWorkspaceEditRequest) {\r
-    ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');\r
-})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));\r
-
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-function boolean(value) {\r
-    return value === true || value === false;\r
-}\r
-exports.boolean = boolean;\r
-function string(value) {\r
-    return typeof value === 'string' || value instanceof String;\r
-}\r
-exports.string = string;\r
-function number(value) {\r
-    return typeof value === 'number' || value instanceof Number;\r
-}\r
-exports.number = number;\r
-function error(value) {\r
-    return value instanceof Error;\r
-}\r
-exports.error = error;\r
-function func(value) {\r
-    return typeof value === 'function';\r
-}\r
-exports.func = func;\r
-function array(value) {\r
-    return Array.isArray(value);\r
-}\r
-exports.array = array;\r
-function stringArray(value) {\r
-    return array(value) && value.every(elem => string(elem));\r
-}\r
-exports.stringArray = stringArray;\r
-function typedArray(value, check) {\r
-    return Array.isArray(value) && value.every(check);\r
-}\r
-exports.typedArray = typedArray;\r
-function objectLiteral(value) {\r
-    // Strictly speaking class instances pass this check as well. Since the LSP\r
-    // doesn't use classes we ignore this for now. If we do we need to add something\r
-    // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\r
-    return value !== null && typeof value === 'object';\r
-}\r
-exports.objectLiteral = objectLiteral;\r
-
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {\r
-    constructor(method) {\r
-        super(method);\r
-    }\r
-}\r
-exports.ProtocolRequestType0 = ProtocolRequestType0;\r
-class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {\r
-    constructor(method) {\r
-        super(method);\r
-    }\r
-}\r
-exports.ProtocolRequestType = ProtocolRequestType;\r
-class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {\r
-    constructor(method) {\r
-        super(method);\r
-    }\r
-}\r
-exports.ProtocolNotificationType = ProtocolNotificationType;\r
-class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {\r
-    constructor(method) {\r
-        super(method);\r
-    }\r
-}\r
-exports.ProtocolNotificationType0 = ProtocolNotificationType0;\r
-
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r
-let __noDynamicImport;\r
-/**\r
- * A request to resolve the implementation locations of a symbol at a given text\r
- * document position. The request's parameter is of type [TextDocumentPositioParams]\r
- * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a\r
- * Thenable that resolves to such.\r
- */\r
-var ImplementationRequest;\r
-(function (ImplementationRequest) {\r
-    ImplementationRequest.method = 'textDocument/implementation';\r
-    ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);\r
-    /** @deprecated Use ImplementationRequest.type */\r
-    ImplementationRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));\r
-
-
-/***/ }),
-/* 23 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r
-let __noDynamicImport;\r
-/**\r
- * A request to resolve the type definition locations of a symbol at a given text\r
- * document position. The request's parameter is of type [TextDocumentPositioParams]\r
- * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a\r
- * Thenable that resolves to such.\r
- */\r
-var TypeDefinitionRequest;\r
-(function (TypeDefinitionRequest) {\r
-    TypeDefinitionRequest.method = 'textDocument/typeDefinition';\r
-    TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);\r
-    /** @deprecated Use TypeDefinitionRequest.type */\r
-    TypeDefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));\r
-
-
-/***/ }),
-/* 24 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.\r
- */\r
-var WorkspaceFoldersRequest;\r
-(function (WorkspaceFoldersRequest) {\r
-    WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');\r
-})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));\r
-/**\r
- * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace\r
- * folder configuration changes.\r
- */\r
-var DidChangeWorkspaceFoldersNotification;\r
-(function (DidChangeWorkspaceFoldersNotification) {\r
-    DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');\r
-})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));\r
-
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * The 'workspace/configuration' request is sent from the server to the client to fetch a certain\r
- * configuration setting.\r
- *\r
- * This pull model replaces the old push model were the client signaled configuration change via an\r
- * event. If the server still needs to react to configuration changes (since the server caches the\r
- * result of `workspace/configuration` requests) the server should register for an empty configuration\r
- * change event and empty the cache if such an event is received.\r
- */\r
-var ConfigurationRequest;\r
-(function (ConfigurationRequest) {\r
-    ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');\r
-})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));\r
-
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * A request to list all color symbols found in a given text document. The request's\r
- * parameter is of type [DocumentColorParams](#DocumentColorParams) the\r
- * response is of type [ColorInformation[]](#ColorInformation) or a Thenable\r
- * that resolves to such.\r
- */\r
-var DocumentColorRequest;\r
-(function (DocumentColorRequest) {\r
-    DocumentColorRequest.method = 'textDocument/documentColor';\r
-    DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);\r
-    /** @deprecated Use DocumentColorRequest.type */\r
-    DocumentColorRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));\r
-/**\r
- * A request to list all presentation for a color. The request's\r
- * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the\r
- * response is of type [ColorInformation[]](#ColorInformation) or a Thenable\r
- * that resolves to such.\r
- */\r
-var ColorPresentationRequest;\r
-(function (ColorPresentationRequest) {\r
-    ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');\r
-})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));\r
-
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-\r
-/*---------------------------------------------------------------------------------------------\r
- *  Copyright (c) Microsoft Corporation. All rights reserved.\r
- *  Licensed under the MIT License. See License.txt in the project root for license information.\r
- *--------------------------------------------------------------------------------------------*/\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * Enum of known range kinds\r
- */\r
-var FoldingRangeKind;\r
-(function (FoldingRangeKind) {\r
-    /**\r
-     * Folding range for a comment\r
-     */\r
-    FoldingRangeKind["Comment"] = "comment";\r
-    /**\r
-     * Folding range for a imports or includes\r
-     */\r
-    FoldingRangeKind["Imports"] = "imports";\r
-    /**\r
-     * Folding range for a region (e.g. `#region`)\r
-     */\r
-    FoldingRangeKind["Region"] = "region";\r
-})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));\r
-/**\r
- * A request to provide folding ranges in a document. The request's\r
- * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the\r
- * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable\r
- * that resolves to such.\r
- */\r
-var FoldingRangeRequest;\r
-(function (FoldingRangeRequest) {\r
-    FoldingRangeRequest.method = 'textDocument/foldingRange';\r
-    FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);\r
-    /** @deprecated Use FoldingRangeRequest.type */\r
-    FoldingRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));\r
-
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r
-let __noDynamicImport;\r
-/**\r
- * A request to resolve the type definition locations of a symbol at a given text\r
- * document position. The request's parameter is of type [TextDocumentPositioParams]\r
- * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)\r
- * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves\r
- * to such.\r
- */\r
-var DeclarationRequest;\r
-(function (DeclarationRequest) {\r
-    DeclarationRequest.method = 'textDocument/declaration';\r
-    DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);\r
-    /** @deprecated Use DeclarationRequest.type */\r
-    DeclarationRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));\r
-
-
-/***/ }),
-/* 29 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-\r
-/*---------------------------------------------------------------------------------------------\r
- *  Copyright (c) Microsoft Corporation. All rights reserved.\r
- *  Licensed under the MIT License. See License.txt in the project root for license information.\r
- *--------------------------------------------------------------------------------------------*/\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * A request to provide selection ranges in a document. The request's\r
- * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the\r
- * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable\r
- * that resolves to such.\r
- */\r
-var SelectionRangeRequest;\r
-(function (SelectionRangeRequest) {\r
-    SelectionRangeRequest.method = 'textDocument/selectionRange';\r
-    SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);\r
-    /** @deprecated  Use SelectionRangeRequest.type */\r
-    SelectionRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r
-})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));\r
-
-
-/***/ }),
-/* 30 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const vscode_jsonrpc_1 = __webpack_require__(4);\r
-const messages_1 = __webpack_require__(21);\r
-var WorkDoneProgress;\r
-(function (WorkDoneProgress) {\r
-    WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();\r
-})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));\r
-/**\r
- * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress\r
- * reporting from the server.\r
- */\r
-var WorkDoneProgressCreateRequest;\r
-(function (WorkDoneProgressCreateRequest) {\r
-    WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');\r
-})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));\r
-/**\r
- * The `window/workDoneProgress/cancel` notification is sent from  the client to the server to cancel a progress\r
- * initiated on the server side.\r
- */\r
-var WorkDoneProgressCancelNotification;\r
-(function (WorkDoneProgressCancelNotification) {\r
-    WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');\r
-})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));\r
-
-
-/***/ }),
-/* 31 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) TypeFox and others. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * A request to result a `CallHierarchyItem` in a document at a given position.\r
- * Can be used as an input to a incoming or outgoing call hierarchy.\r
- *\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var CallHierarchyPrepareRequest;\r
-(function (CallHierarchyPrepareRequest) {\r
-    CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';\r
-    CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);\r
-})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));\r
-/**\r
- * A request to resolve the incoming calls for a given `CallHierarchyItem`.\r
- *\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var CallHierarchyIncomingCallsRequest;\r
-(function (CallHierarchyIncomingCallsRequest) {\r
-    CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';\r
-    CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);\r
-})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));\r
-/**\r
- * A request to resolve the outgoing calls for a given `CallHierarchyItem`.\r
- *\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var CallHierarchyOutgoingCallsRequest;\r
-(function (CallHierarchyOutgoingCallsRequest) {\r
-    CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';\r
-    CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);\r
-})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));\r
-
-
-/***/ }),
-/* 32 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-/* --------------------------------------------------------------------------------------------\r
- * Copyright (c) Microsoft Corporation. All rights reserved.\r
- * Licensed under the MIT License. See License.txt in the project root for license information.\r
- * ------------------------------------------------------------------------------------------ */\r
-\r
-Object.defineProperty(exports, "__esModule", { value: true });\r
-const messages_1 = __webpack_require__(21);\r
-/**\r
- * A set of predefined token types. This set is not fixed\r
- * an clients can specify additional token types via the\r
- * corresponding client capabilities.\r
- *\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var SemanticTokenTypes;\r
-(function (SemanticTokenTypes) {\r
-    SemanticTokenTypes["comment"] = "comment";\r
-    SemanticTokenTypes["keyword"] = "keyword";\r
-    SemanticTokenTypes["string"] = "string";\r
-    SemanticTokenTypes["number"] = "number";\r
-    SemanticTokenTypes["regexp"] = "regexp";\r
-    SemanticTokenTypes["operator"] = "operator";\r
-    SemanticTokenTypes["namespace"] = "namespace";\r
-    SemanticTokenTypes["type"] = "type";\r
-    SemanticTokenTypes["struct"] = "struct";\r
-    SemanticTokenTypes["class"] = "class";\r
-    SemanticTokenTypes["interface"] = "interface";\r
-    SemanticTokenTypes["enum"] = "enum";\r
-    SemanticTokenTypes["typeParameter"] = "typeParameter";\r
-    SemanticTokenTypes["function"] = "function";\r
-    SemanticTokenTypes["member"] = "member";\r
-    SemanticTokenTypes["property"] = "property";\r
-    SemanticTokenTypes["macro"] = "macro";\r
-    SemanticTokenTypes["variable"] = "variable";\r
-    SemanticTokenTypes["parameter"] = "parameter";\r
-    SemanticTokenTypes["label"] = "label";\r
-})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));\r
-/**\r
- * A set of predefined token modifiers. This set is not fixed\r
- * an clients can specify additional token types via the\r
- * corresponding client capabilities.\r
- *\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var SemanticTokenModifiers;\r
-(function (SemanticTokenModifiers) {\r
-    SemanticTokenModifiers["documentation"] = "documentation";\r
-    SemanticTokenModifiers["declaration"] = "declaration";\r
-    SemanticTokenModifiers["definition"] = "definition";\r
-    SemanticTokenModifiers["reference"] = "reference";\r
-    SemanticTokenModifiers["static"] = "static";\r
-    SemanticTokenModifiers["abstract"] = "abstract";\r
-    SemanticTokenModifiers["deprecated"] = "deprecated";\r
-    SemanticTokenModifiers["async"] = "async";\r
-    SemanticTokenModifiers["volatile"] = "volatile";\r
-    SemanticTokenModifiers["readonly"] = "readonly";\r
-})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));\r
-/**\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var SemanticTokens;\r
-(function (SemanticTokens) {\r
-    function is(value) {\r
-        const candidate = value;\r
-        return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\r
-            Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\r
-    }\r
-    SemanticTokens.is = is;\r
-})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));\r
-/**\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var SemanticTokensRequest;\r
-(function (SemanticTokensRequest) {\r
-    SemanticTokensRequest.method = 'textDocument/semanticTokens';\r
-    SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);\r
-})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));\r
-/**\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var SemanticTokensEditsRequest;\r
-(function (SemanticTokensEditsRequest) {\r
-    SemanticTokensEditsRequest.method = 'textDocument/semanticTokens/edits';\r
-    SemanticTokensEditsRequest.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest.method);\r
-})(SemanticTokensEditsRequest = exports.SemanticTokensEditsRequest || (exports.SemanticTokensEditsRequest = {}));\r
-/**\r
- * @since 3.16.0 - Proposed state\r
- */\r
-var SemanticTokensRangeRequest;\r
-(function (SemanticTokensRangeRequest) {\r
-    SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';\r
-    SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);\r
-})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));\r
-
-
-/***/ }),
-/* 33 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const languageProvider_1 = __importDefault(__webpack_require__(34));
-const PConst = __importStar(__webpack_require__(39));
-const fileConfigurationManager_1 = __importDefault(__webpack_require__(113));
-const typescriptServiceClient_1 = __importDefault(__webpack_require__(114));
-const typeConverters = __importStar(__webpack_require__(37));
-const typingsStatus_1 = __importStar(__webpack_require__(137));
-const arrays_1 = __webpack_require__(91);
-const watchBuild_1 = __importDefault(__webpack_require__(138));
-const workspaceSymbols_1 = __importDefault(__webpack_require__(139));
-// Style check diagnostics that can be reported as warnings
-const styleCheckDiagnostics = [
-    6133,
-    6138,
-    7027,
-    7028,
-    7029,
-    7030 // not all code paths return a value
-];
-class TypeScriptServiceClientHost {
-    constructor(descriptions, pluginManager) {
-        this.languagePerId = new Map();
-        this.disposables = [];
-        this.reportStyleCheckAsWarnings = true;
-        let timer;
-        const handleProjectChange = () => {
-            if (timer)
-                clearTimeout(timer);
-            timer = setTimeout(() => {
-                this.triggerAllDiagnostics();
-            }, 1500);
-        };
-        const configFileWatcher = coc_nvim_1.workspace.createFileSystemWatcher('**/[tj]sconfig.json');
-        this.disposables.push(configFileWatcher);
-        configFileWatcher.onDidCreate(this.reloadProjects, this, this.disposables);
-        configFileWatcher.onDidDelete(this.reloadProjects, this, this.disposables);
-        configFileWatcher.onDidChange(handleProjectChange, this, this.disposables);
-        const packageFileWatcher = coc_nvim_1.workspace.createFileSystemWatcher('**/package.json');
-        packageFileWatcher.onDidCreate(this.reloadProjects, this, this.disposables);
-        packageFileWatcher.onDidChange(handleProjectChange, this, this.disposables);
-        const allModeIds = this.getAllModeIds(descriptions, pluginManager);
-        this.client = new typescriptServiceClient_1.default(pluginManager, allModeIds);
-        this.disposables.push(this.client);
-        this.client.onDiagnosticsReceived(({ kind, resource, diagnostics }) => {
-            this.diagnosticsReceived(kind, resource, diagnostics).catch(e => {
-                console.error(e);
-            });
-        }, null, this.disposables);
-        // features
-        this.disposables.push(new watchBuild_1.default(this.client));
-        this.disposables.push(coc_nvim_1.languages.registerWorkspaceSymbolProvider(new workspaceSymbols_1.default(this.client, allModeIds)));
-        this.client.onConfigDiagnosticsReceived(diag => {
-            let { body } = diag;
-            if (body) {
-                let { configFile, diagnostics } = body;
-                let uri = coc_nvim_1.Uri.file(configFile);
-                if (diagnostics.length == 0) {
-                    this.client.diagnosticsManager.configFileDiagnosticsReceived(uri.toString(), []);
-                }
-                else {
-                    let diagnosticList = diagnostics.map(o => {
-                        let { text, code, category, start, end } = o;
-                        let range;
-                        if (!start || !end) {
-                            range = vscode_languageserver_protocol_1.Range.create(vscode_languageserver_protocol_1.Position.create(0, 0), vscode_languageserver_protocol_1.Position.create(0, 1));
-                        }
-                        else {
-                            range = vscode_languageserver_protocol_1.Range.create(start.line - 1, start.offset - 1, end.line - 1, end.offset - 1);
-                        }
-                        let severity = category == 'error' ? vscode_languageserver_protocol_1.DiagnosticSeverity.Error : vscode_languageserver_protocol_1.DiagnosticSeverity.Warning;
-                        return vscode_languageserver_protocol_1.Diagnostic.create(range, text, severity, code);
-                    });
-                    this.client.diagnosticsManager.configFileDiagnosticsReceived(uri.toString(), diagnosticList);
-                }
-            }
-        }, null, this.disposables);
-        this.typingsStatus = new typingsStatus_1.default(this.client);
-        this.ataProgressReporter = new typingsStatus_1.AtaProgressReporter(this.client);
-        this.fileConfigurationManager = new fileConfigurationManager_1.default(this.client);
-        for (const description of descriptions) { // tslint:disable-line
-            const manager = new languageProvider_1.default(this.client, this.fileConfigurationManager, description, this.typingsStatus);
-            this.languagePerId.set(description.id, manager);
-        }
-        const languageIds = new Set();
-        for (const plugin of pluginManager.plugins) {
-            if (plugin.configNamespace && plugin.languages.length) {
-                this.registerExtensionLanguageProvider({
-                    id: plugin.configNamespace,
-                    modeIds: Array.from(plugin.languages),
-                    diagnosticSource: 'ts-plugin',
-                    diagnosticLanguage: 1 /* TypeScript */,
-                    diagnosticOwner: 'typescript',
-                    isExternal: true
-                });
-            }
-            else {
-                for (const language of plugin.languages) {
-                    languageIds.add(language);
-                }
-            }
-        }
-        if (languageIds.size) {
-            this.registerExtensionLanguageProvider({
-                id: 'typescript-plugins',
-                modeIds: Array.from(languageIds.values()),
-                diagnosticSource: 'ts-plugin',
-                diagnosticLanguage: 1 /* TypeScript */,
-                diagnosticOwner: 'typescript',
-                isExternal: true
-            });
-        }
-        this.client.ensureServiceStarted();
-        this.client.onTsServerStarted(() => {
-            this.triggerAllDiagnostics();
-        });
-        coc_nvim_1.workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables);
-        this.configurationChanged();
-    }
-    registerExtensionLanguageProvider(description) {
-        const manager = new languageProvider_1.default(this.client, this.fileConfigurationManager, description, this.typingsStatus);
-        this.languagePerId.set(description.id, manager);
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-        for (let language of this.languagePerId.values()) {
-            language.dispose();
-        }
-        this.languagePerId.clear();
-        this.fileConfigurationManager.dispose();
-        this.typingsStatus.dispose();
-        this.ataProgressReporter.dispose();
-    }
-    reset() {
-        this.fileConfigurationManager.reset();
-    }
-    get serviceClient() {
-        return this.client;
-    }
-    reloadProjects() {
-        this.client.diagnosticsManager.reInitialize();
-        this.client.execute('reloadProjects', null, vscode_languageserver_protocol_1.CancellationToken.None);
-        this.triggerAllDiagnostics();
-    }
-    // typescript or javascript
-    getProvider(languageId) {
-        return this.languagePerId.get(languageId);
-    }
-    configurationChanged() {
-        const config = coc_nvim_1.workspace.getConfiguration('tsserver');
-        this.reportStyleCheckAsWarnings = config.get('reportStyleChecksAsWarnings', true);
-    }
-    async findLanguage(uri) {
-        try {
-            let doc = await coc_nvim_1.workspace.loadFile(uri);
-            if (!doc)
-                return undefined;
-            let languages = Array.from(this.languagePerId.values());
-            return languages.find(language => language.handles(uri, doc.textDocument));
-        }
-        catch (_a) {
-            return undefined;
-        }
-    }
-    async handles(doc) {
-        let languages = Array.from(this.languagePerId.values());
-        let idx = languages.findIndex(language => language.handles(doc.uri, doc));
-        if (idx != -1)
-            return true;
-        return this.client.bufferSyncSupport.handles(doc.uri);
-    }
-    triggerAllDiagnostics() {
-        for (const language of this.languagePerId.values()) {
-            language.triggerAllDiagnostics();
-        }
-    }
-    async diagnosticsReceived(kind, resource, diagnostics) {
-        const language = await this.findLanguage(resource.toString());
-        if (language) {
-            language.diagnosticsReceived(kind, resource, this.createMarkerDatas(diagnostics));
-        }
-    }
-    createMarkerDatas(diagnostics) {
-        return diagnostics.map(tsDiag => this.tsDiagnosticToLspDiagnostic(tsDiag));
-    }
-    tsDiagnosticToLspDiagnostic(diagnostic) {
-        const { start, end, text } = diagnostic;
-        const range = {
-            start: typeConverters.Position.fromLocation(start),
-            end: typeConverters.Position.fromLocation(end)
-        };
-        let relatedInformation;
-        if (diagnostic.relatedInformation) {
-            relatedInformation = diagnostic.relatedInformation.map(o => {
-                let { span, message } = o;
-                return {
-                    location: typeConverters.Location.fromTextSpan(this.client.toResource(span.file), span),
-                    message
-                };
-            });
-        }
-        return {
-            range,
-            message: text,
-            code: diagnostic.code ? diagnostic.code : null,
-            severity: this.getDiagnosticSeverity(diagnostic),
-            reportUnnecessary: diagnostic.reportsUnnecessary,
-            source: diagnostic.source || 'tsserver',
-            relatedInformation
-        };
-    }
-    getDiagnosticSeverity(diagnostic) {
-        if (this.reportStyleCheckAsWarnings &&
-            this.isStyleCheckDiagnostic(diagnostic.code) &&
-            diagnostic.category === PConst.DiagnosticCategory.error) {
-            return vscode_languageserver_protocol_1.DiagnosticSeverity.Warning;
-        }
-        switch (diagnostic.category) {
-            case PConst.DiagnosticCategory.error:
-                return vscode_languageserver_protocol_1.DiagnosticSeverity.Error;
-            case PConst.DiagnosticCategory.warning:
-                return vscode_languageserver_protocol_1.DiagnosticSeverity.Warning;
-            case PConst.DiagnosticCategory.suggestion:
-                return vscode_languageserver_protocol_1.DiagnosticSeverity.Information;
-            default:
-                return vscode_languageserver_protocol_1.DiagnosticSeverity.Error;
-        }
-    }
-    isStyleCheckDiagnostic(code) {
-        return code ? styleCheckDiagnostics.indexOf(code) !== -1 : false;
-    }
-    getAllModeIds(descriptions, pluginManager) {
-        const allModeIds = arrays_1.flatten([
-            ...descriptions.map(x => x.modeIds),
-            ...pluginManager.plugins.map(x => x.languages)
-        ]);
-        return allModeIds;
-    }
-}
-exports.default = TypeScriptServiceClientHost;
-
-
-/***/ }),
-/* 34 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const path_1 = __importDefault(__webpack_require__(13));
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const baseCodeLensProvider_1 = __webpack_require__(35);
-const completionItemProvider_1 = __importDefault(__webpack_require__(38));
-const definitionProvider_1 = __importDefault(__webpack_require__(88));
-const directiveCommentCompletions_1 = __importDefault(__webpack_require__(89));
-const documentHighlight_1 = __importDefault(__webpack_require__(90));
-const documentSymbol_1 = __importDefault(__webpack_require__(92));
-const folding_1 = __importDefault(__webpack_require__(93));
-const formatting_1 = __importDefault(__webpack_require__(94));
-const hover_1 = __importDefault(__webpack_require__(95));
-const implementationsCodeLens_1 = __importDefault(__webpack_require__(96));
-const importFix_1 = __importDefault(__webpack_require__(97));
-const moduleInstall_1 = __importDefault(__webpack_require__(99));
-// import TagCompletionProvider from './features/tagCompletion'
-const quickfix_1 = __importDefault(__webpack_require__(103));
-const refactor_1 = __importDefault(__webpack_require__(104));
-const references_1 = __importDefault(__webpack_require__(105));
-const referencesCodeLens_1 = __importDefault(__webpack_require__(106));
-const rename_1 = __importDefault(__webpack_require__(107));
-const signatureHelp_1 = __importDefault(__webpack_require__(108));
-const smartSelect_1 = __importDefault(__webpack_require__(109));
-const updatePathOnRename_1 = __importDefault(__webpack_require__(110));
-const organizeImports_1 = __webpack_require__(112);
-const api_1 = __importDefault(__webpack_require__(40));
-const suggestionSetting = 'suggestionActions.enabled';
-class LanguageProvider {
-    constructor(client, fileConfigurationManager, description, typingsStatus) {
-        this.client = client;
-        this.fileConfigurationManager = fileConfigurationManager;
-        this.description = description;
-        this.typingsStatus = typingsStatus;
-        this.disposables = [];
-        coc_nvim_1.workspace.onDidChangeConfiguration(this.configurationChanged, this, this.disposables);
-        this.configurationChanged();
-        let initialized = false;
-        client.onTsServerStarted(async () => {
-            if (!initialized) {
-                initialized = true;
-                this.registerProviders(client, typingsStatus);
-            }
-        });
-    }
-    configurationChanged() {
-        const config = coc_nvim_1.workspace.getConfiguration(this.id, null);
-        this.client.diagnosticsManager.setEnableSuggestions(this.id, config.get(suggestionSetting, true));
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-    }
-    _register(disposable) {
-        this.disposables.push(disposable);
-    }
-    registerProviders(client, typingsStatus) {
-        let languageIds = this.description.modeIds;
-        let clientId = `tsserver-${this.description.id}`;
-        this._register(coc_nvim_1.languages.registerCompletionItemProvider(clientId, 'TSC', languageIds, new completionItemProvider_1.default(client, typingsStatus, this.fileConfigurationManager, this.description.id), completionItemProvider_1.default.triggerCharacters));
-        if (this.client.apiVersion.gte(api_1.default.v230)) {
-            this._register(coc_nvim_1.languages.registerCompletionItemProvider(`${this.description.id}-directive`, 'TSC', languageIds, new directiveCommentCompletions_1.default(client), ['@']));
-        }
-        let definitionProvider = new definitionProvider_1.default(client);
-        this._register(coc_nvim_1.languages.registerDefinitionProvider(languageIds, definitionProvider));
-        this._register(coc_nvim_1.languages.registerTypeDefinitionProvider(languageIds, definitionProvider));
-        this._register(coc_nvim_1.languages.registerImplementationProvider(languageIds, definitionProvider));
-        this._register(coc_nvim_1.languages.registerReferencesProvider(languageIds, new references_1.default(client)));
-        this._register(coc_nvim_1.languages.registerHoverProvider(languageIds, new hover_1.default(client)));
-        this._register(coc_nvim_1.languages.registerDocumentHighlightProvider(languageIds, new documentHighlight_1.default(this.client)));
-        this._register(coc_nvim_1.languages.registerSignatureHelpProvider(languageIds, new signatureHelp_1.default(client), ['(', ',', '<', ')']));
-        this._register(coc_nvim_1.languages.registerDocumentSymbolProvider(languageIds, new documentSymbol_1.default(client)));
-        this._register(coc_nvim_1.languages.registerRenameProvider(languageIds, new rename_1.default(client, this.fileConfigurationManager)));
-        let formatProvider = new formatting_1.default(client, this.fileConfigurationManager);
-        this._register(coc_nvim_1.languages.registerDocumentFormatProvider(languageIds, formatProvider));
-        this._register(coc_nvim_1.languages.registerDocumentRangeFormatProvider(languageIds, formatProvider));
-        this._register(coc_nvim_1.languages.registerOnTypeFormattingEditProvider(languageIds, formatProvider, [';', '}', '\n', String.fromCharCode(27)]));
-        this._register(coc_nvim_1.languages.registerCodeActionProvider(languageIds, new moduleInstall_1.default(client), 'tsserver'));
-        let { fileConfigurationManager } = this;
-        let conf = fileConfigurationManager.getLanguageConfiguration(this.id);
-        if (['javascript', 'typescript'].includes(this.id)) {
-            if (this.client.apiVersion.gte(api_1.default.v290) && conf.get('updateImportsOnFileMove.enable')) {
-                this._register(new updatePathOnRename_1.default(client, this.fileConfigurationManager, this.id));
-            }
-        }
-        if (this.client.apiVersion.gte(api_1.default.v280)) {
-            this._register(coc_nvim_1.languages.registerFoldingRangeProvider(languageIds, new folding_1.default(this.client)));
-            this._register(coc_nvim_1.languages.registerCodeActionProvider(languageIds, new organizeImports_1.OrganizeImportsCodeActionProvider(this.client, this.fileConfigurationManager), 'tsserver', [vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports]));
-        }
-        if (this.client.apiVersion.gte(api_1.default.v240)) {
-            this._register(coc_nvim_1.languages.registerCodeActionProvider(languageIds, new refactor_1.default(client, this.fileConfigurationManager), 'tsserver', [vscode_languageserver_protocol_1.CodeActionKind.Refactor]));
-        }
-        this._register(coc_nvim_1.languages.registerCodeActionProvider(languageIds, new quickfix_1.default(client, this.fileConfigurationManager), 'tsserver', [vscode_languageserver_protocol_1.CodeActionKind.QuickFix]));
-        this._register(coc_nvim_1.languages.registerCodeActionProvider(languageIds, new importFix_1.default(this.client.bufferSyncSupport), 'tsserver', [vscode_languageserver_protocol_1.CodeActionKind.QuickFix]));
-        let cachedResponse = new baseCodeLensProvider_1.CachedNavTreeResponse();
-        if (this.client.apiVersion.gte(api_1.default.v206) && conf.get('referencesCodeLens.enable')) {
-            this._register(coc_nvim_1.languages.registerCodeLensProvider(languageIds, new referencesCodeLens_1.default(client, cachedResponse)));
-        }
-        if (this.client.apiVersion.gte(api_1.default.v220) && conf.get('implementationsCodeLens.enable')) {
-            this._register(coc_nvim_1.languages.registerCodeLensProvider(languageIds, new implementationsCodeLens_1.default(client, cachedResponse)));
-        }
-        if (this.client.apiVersion.gte(api_1.default.v350)) {
-            this._register(coc_nvim_1.languages.registerSelectionRangeProvider(languageIds, new smartSelect_1.default(this.client)));
-        }
-        // if (this.client.apiVersion.gte(API.v300)) {
-        //   this._register(
-        //     languages.registerCompletionItemProvider(
-        //       `tsserver-${this.description.id}-tag`,
-        //       'TSC',
-        //       languageIds,
-        //       new TagCompletionProvider(client),
-        //       ['>']
-        //     )
-        //   )
-        // }
-    }
-    handles(resource, doc) {
-        if (doc && this.description.modeIds.indexOf(doc.languageId) >= 0) {
-            return true;
-        }
-        const base = path_1.default.basename(coc_nvim_1.Uri.parse(resource).fsPath);
-        return !!base && (!!this.description.configFilePattern && this.description.configFilePattern.test(base));
-    }
-    get id() {
-        return this.description.id;
-    }
-    get diagnosticSource() {
-        return this.description.diagnosticSource;
-    }
-    triggerAllDiagnostics() {
-        this.client.bufferSyncSupport.requestAllDiagnostics();
-    }
-    diagnosticsReceived(diagnosticsKind, file, diagnostics) {
-        const config = coc_nvim_1.workspace.getConfiguration(this.id, file.toString());
-        const reportUnnecessary = config.get('showUnused', true);
-        this.client.diagnosticsManager.diagnosticsReceived(diagnosticsKind, file.toString(), diagnostics.filter(diag => {
-            if (!reportUnnecessary) {
-                diag.tags = undefined;
-                if (diag.reportUnnecessary && diag.severity === vscode_languageserver_protocol_1.DiagnosticSeverity.Information) {
-                    return false;
-                }
-            }
-            return true;
-        }));
-    }
-}
-exports.default = LanguageProvider;
-
-
-/***/ }),
-/* 35 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.TypeScriptBaseCodeLensProvider = exports.CachedNavTreeResponse = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const regexp_1 = __webpack_require__(36);
-const typeConverters = __importStar(__webpack_require__(37));
-class CachedNavTreeResponse {
-    constructor() {
-        this.version = -1;
-        this.document = '';
-    }
-    execute(document, f) {
-        if (this.matches(document)) {
-            return this.response;
-        }
-        return this.update(document, f());
-    }
-    matches(document) {
-        return (this.version === document.version &&
-            this.document === document.uri.toString());
-    }
-    update(document, response) {
-        this.response = response;
-        this.version = document.version;
-        this.document = document.uri.toString();
-        return response;
-    }
-}
-exports.CachedNavTreeResponse = CachedNavTreeResponse;
-class TypeScriptBaseCodeLensProvider {
-    constructor(client, cachedResponse) {
-        this.client = client;
-        this.cachedResponse = cachedResponse;
-        this.onDidChangeCodeLensesEmitter = new vscode_languageserver_protocol_1.Emitter();
-    }
-    get onDidChangeCodeLenses() {
-        return this.onDidChangeCodeLensesEmitter.event;
-    }
-    async provideCodeLenses(document, token) {
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath) {
-            return [];
-        }
-        try {
-            const response = await this.cachedResponse.execute(document, () => this.client.execute('navtree', { file: filepath }, token));
-            if (!response) {
-                return [];
-            }
-            const tree = response.body;
-            const referenceableSpans = [];
-            if (tree && tree.childItems) {
-                tree.childItems.forEach(item => this.walkNavTree(document, item, null, referenceableSpans));
-            }
-            return referenceableSpans.map(range => {
-                return {
-                    range,
-                    data: { uri: document.uri }
-                };
-            });
-        }
-        catch (_a) {
-            return [];
-        }
-    }
-    walkNavTree(document, item, parent, results) {
-        if (!item) {
-            return;
-        }
-        const range = this.extractSymbol(document, item, parent);
-        if (range) {
-            results.push(range);
-        }
-        if (item.childItems) {
-            item.childItems.forEach(child => this.walkNavTree(document, child, item, results));
-        }
-    }
-    getSymbolRange(document, item) {
-        if (!item) {
-            return null;
-        }
-        // TS 3.0+ provides a span for just the symbol
-        if (item.nameSpan) {
-            return typeConverters.Range.fromTextSpan(item.nameSpan);
-        }
-        // In older versions, we have to calculate this manually. See #23924
-        const span = item.spans && item.spans[0];
-        if (!span) {
-            return null;
-        }
-        const range = typeConverters.Range.fromTextSpan(span);
-        const text = document.getText(range);
-        const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${regexp_1.escapeRegExp(item.text || '')}(\\b|\\W)`, 'gm');
-        const match = identifierMatch.exec(text);
-        const prefixLength = match ? match.index + match[1].length : 0;
-        const startOffset = document.offsetAt(range.start) + prefixLength;
-        return {
-            start: document.positionAt(startOffset),
-            end: document.positionAt(startOffset + item.text.length)
-        };
-    }
-}
-exports.TypeScriptBaseCodeLensProvider = TypeScriptBaseCodeLensProvider;
-
-
-/***/ }),
-/* 36 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.escapeRegExp = void 0;
-function escapeRegExp(text) {
-    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
-}
-exports.escapeRegExp = escapeRegExp;
-
-
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.WorkspaceEdit = exports.TextEdit = exports.Location = exports.Position = exports.Range = void 0;
-var Range;
-(function (Range) {
-    Range.fromTextSpan = (span) => {
-        return {
-            start: {
-                line: span.start.line - 1,
-                character: span.start.offset - 1
-            },
-            end: {
-                line: span.end.line - 1,
-                character: span.end.offset - 1
-            }
-        };
-    };
-    Range.toFormattingRequestArgs = (file, range) => ({
-        file,
-        line: range.start.line + 1,
-        offset: range.start.character + 1,
-        endLine: range.end.line + 1,
-        endOffset: range.end.character + 1
-    });
-    Range.toFileRangeRequestArgs = (file, range) => ({
-        file,
-        startLine: range.start.line + 1,
-        startOffset: range.start.character + 1,
-        endLine: range.end.line + 1,
-        endOffset: range.end.character + 1
-    });
-})(Range = exports.Range || (exports.Range = {}));
-var Position;
-(function (Position) {
-    Position.fromLocation = (tslocation) => {
-        return {
-            line: tslocation.line - 1,
-            character: tslocation.offset - 1
-        };
-    };
-    Position.toLocation = (position) => ({
-        line: position.line + 1,
-        offset: position.character + 1,
-    });
-    Position.toFileLocationRequestArgs = (file, position) => ({
-        file,
-        line: position.line + 1,
-        offset: position.character + 1
-    });
-})(Position = exports.Position || (exports.Position = {}));
-var Location;
-(function (Location) {
-    Location.fromTextSpan = (uri, tsTextSpan) => {
-        return {
-            uri,
-            range: Range.fromTextSpan(tsTextSpan)
-        };
-    };
-})(Location = exports.Location || (exports.Location = {}));
-var TextEdit;
-(function (TextEdit) {
-    TextEdit.fromCodeEdit = (edit) => {
-        return {
-            range: Range.fromTextSpan(edit),
-            newText: edit.newText
-        };
-    };
-})(TextEdit = exports.TextEdit || (exports.TextEdit = {}));
-var WorkspaceEdit;
-(function (WorkspaceEdit) {
-    function fromFileCodeEdits(client, edits) {
-        let changes = {};
-        for (const edit of edits) {
-            let uri = client.toResource(edit.fileName);
-            changes[uri] = edit.textChanges.map(change => {
-                return TextEdit.fromCodeEdit(change);
-            });
-        }
-        return { changes };
-    }
-    WorkspaceEdit.fromFileCodeEdits = fromFileCodeEdits;
-})(WorkspaceEdit = exports.WorkspaceEdit || (exports.WorkspaceEdit = {}));
-
-
-/***/ }),
-/* 38 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const PConst = __importStar(__webpack_require__(39));
-const api_1 = __importDefault(__webpack_require__(40));
-const codeAction_1 = __webpack_require__(84);
-const completionItem_1 = __webpack_require__(85);
-const Previewer = __importStar(__webpack_require__(86));
-const typeConverters = __importStar(__webpack_require__(37));
-const SnippetString_1 = __importDefault(__webpack_require__(87));
-class ApplyCompletionCodeActionCommand {
-    constructor(client) {
-        this.client = client;
-        this.id = ApplyCompletionCodeActionCommand.ID;
-    }
-    // apply code action on complete
-    async execute(codeActions) {
-        if (codeActions.length === 0) {
-            return;
-        }
-        if (codeActions.length === 1) {
-            await codeAction_1.applyCodeAction(this.client, codeActions[0]);
-            return;
-        }
-        const idx = await coc_nvim_1.workspace.showQuickpick(codeActions.map(o => o.description), 'Select code action to apply');
-        if (idx < 0)
-            return;
-        const action = codeActions[idx];
-        await codeAction_1.applyCodeAction(this.client, action);
-        return;
-    }
-}
-ApplyCompletionCodeActionCommand.ID = '_typescript.applyCompletionCodeAction';
-class TypeScriptCompletionItemProvider {
-    constructor(client, typingsStatus, fileConfigurationManager, languageId) {
-        this.client = client;
-        this.typingsStatus = typingsStatus;
-        this.fileConfigurationManager = fileConfigurationManager;
-        this.setCompleteOption(languageId);
-        coc_nvim_1.commands.register(new ApplyCompletionCodeActionCommand(this.client));
-        coc_nvim_1.workspace.onDidChangeConfiguration(_e => {
-            this.setCompleteOption(languageId);
-        });
-    }
-    setCompleteOption(languageId) {
-        this.completeOption = this.fileConfigurationManager.getCompleteOptions(languageId);
-    }
-    /**
-     * Get completionItems
-     *
-     * @public
-     * @param {TextDocument} document
-     * @param {Position} position
-     * @param {CancellationToken} token
-     * @param {string} triggerCharacter
-     * @returns {Promise<CompletionItem[]>}
-     */
-    async provideCompletionItems(document, position, token, context) {
-        if (this.typingsStatus.isAcquiringTypings) {
-            return Promise.resolve({
-                isIncomplete: true,
-                items: [{
-                        label: 'Acquiring typings...',
-                        detail: 'Acquiring typings definitions for IntelliSense.'
-                    }]
-            });
-        }
-        let { uri } = document;
-        const file = this.client.toPath(document.uri);
-        if (!file)
-            return null;
-        let preText = document.getText({
-            start: { line: position.line, character: 0 },
-            end: position
-        });
-        let { triggerCharacter, option } = context;
-        if (!this.shouldTrigger(triggerCharacter, preText, option)) {
-            return null;
-        }
-        await this.client.interruptGetErr(() => this.fileConfigurationManager.ensureConfigurationForDocument(document, token));
-        const { completeOption } = this;
-        const args = Object.assign(Object.assign({}, typeConverters.Position.toFileLocationRequestArgs(file, position)), { includeExternalModuleExports: completeOption.autoImports, includeInsertTextCompletions: true, triggerCharacter: this.getTsTriggerCharacter(context), includeAutomaticOptionalChainCompletions: completeOption.includeAutomaticOptionalChainCompletions });
-        let entries;
-        let dotAccessorContext;
-        let isNewIdentifierLocation = true;
-        let isMemberCompletion = false;
-        let isIncomplete = false;
-        const isInValidCommitCharacterContext = this.isInValidCommitCharacterContext(document, position);
-        if (this.client.apiVersion.gte(api_1.default.v300)) {
-            try {
-                const response = await this.client.interruptGetErr(() => this.client.execute('completionInfo', args, token));
-                if (response.type !== 'response' || !response.body) {
-                    return null;
-                }
-                isNewIdentifierLocation = response.body.isNewIdentifierLocation;
-                isMemberCompletion = response.body.isMemberCompletion;
-                if (isMemberCompletion) {
-                    const dotMatch = preText.slice(0, position.character).match(/\??\.\s*$/) || undefined;
-                    if (dotMatch) {
-                        const range = vscode_languageserver_protocol_1.Range.create({
-                            line: position.line,
-                            character: position.character - dotMatch.length
-                        }, position);
-                        const text = document.getText(range);
-                        dotAccessorContext = { range, text };
-                    }
-                }
-                isIncomplete = response.metadata && response.metadata.isIncomplete;
-                entries = response.body.entries;
-            }
-            catch (e) {
-                if (e.message == 'No content available.') {
-                    return null;
-                }
-                throw e;
-            }
-        }
-        else {
-            const response = await this.client.interruptGetErr(() => this.client.execute('completions', args, token));
-            if (response.type !== 'response' || !response.body) {
-                return null;
-            }
-            entries = response.body;
-        }
-        const completionItems = [];
-        for (const element of entries) {
-            if (shouldExcludeCompletionEntry(element, completeOption)) {
-                continue;
-            }
-            const item = completionItem_1.convertCompletionEntry(element, uri, position, {
-                isNewIdentifierLocation,
-                isMemberCompletion,
-                enableCallCompletions: completeOption.completeFunctionCalls,
-                isInValidCommitCharacterContext,
-                dotAccessorContext,
-            });
-            completionItems.push(item);
-        }
-        return { isIncomplete, items: completionItems };
-    }
-    getTsTriggerCharacter(context) {
-        // return context.triggerCharacter as Proto.CompletionsTriggerCharacter
-        switch (context.triggerCharacter) {
-            case '@': // Workaround for https://github.com/Microsoft/TypeScript/issues/27321
-                return this.client.apiVersion.gte(api_1.default.v310) && this.client.apiVersion.lt(api_1.default.v320) ? undefined : '@';
-            case '#': // Workaround for https://github.com/microsoft/TypeScript/issues/36367
-                return this.client.apiVersion.lt(api_1.default.v381) ? undefined : '#';
-            case '.':
-            case '"':
-            case '\'':
-            case '`':
-            case '/':
-            case '<':
-                return context.triggerCharacter;
-        }
-        return undefined;
-    }
-    /**
-     * Resolve complete item, could have documentation added
-     *
-     * @public
-     * @param {CompletionItem} item
-     * @param {CancellationToken} token
-     * @returns {Promise<CompletionItem>}
-     */
-    async resolveCompletionItem(item, token) {
-        if (item == null)
-            return undefined;
-        let { uri, position, source, name } = item.data;
-        const filepath = this.client.toPath(uri);
-        if (!filepath)
-            return undefined;
-        let document = coc_nvim_1.workspace.getDocument(uri);
-        if (!document)
-            return undefined;
-        const args = Object.assign(Object.assign({}, typeConverters.Position.toFileLocationRequestArgs(filepath, position)), { entryNames: [source ? { name, source } : name] });
-        let response;
-        try {
-            response = await this.client.interruptGetErr(() => this.client.execute('completionEntryDetails', args, token));
-        }
-        catch (_a) {
-            return item;
-        }
-        if (response.type !== 'response' || !response.body || !response.body.length) {
-            return item;
-        }
-        const details = response.body;
-        if (!details || !details.length || !details[0]) {
-            return item;
-        }
-        const detail = details[0];
-        if (!item.detail && detail.displayParts.length) {
-            item.detail = Previewer.plain(detail.displayParts);
-        }
-        item.documentation = this.getDocumentation(detail);
-        const { command, additionalTextEdits } = this.getCodeActions(detail, filepath);
-        if (command)
-            item.command = command;
-        item.additionalTextEdits = additionalTextEdits;
-        if (detail && item.insertTextFormat == vscode_languageserver_protocol_1.InsertTextFormat.Snippet) {
-            const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, position, token);
-            if (shouldCompleteFunction) {
-                this.createSnippetOfFunctionCall(item, detail);
-            }
-        }
-        return item;
-    }
-    getCodeActions(detail, filepath) {
-        if (!detail.codeActions || !detail.codeActions.length) {
-            return {};
-        }
-        // Try to extract out the additionalTextEdits for the current file.
-        // Also check if we still have to apply other workspace edits
-        const additionalTextEdits = [];
-        let hasRemainingCommandsOrEdits = false;
-        for (const tsAction of detail.codeActions) {
-            if (tsAction.commands) {
-                hasRemainingCommandsOrEdits = true;
-            }
-            // Convert all edits in the current file using `additionalTextEdits`
-            if (tsAction.changes) {
-                for (const change of tsAction.changes) {
-                    if (change.fileName === filepath) {
-                        additionalTextEdits.push(...change.textChanges.map(typeConverters.TextEdit.fromCodeEdit));
-                    }
-                    else {
-                        hasRemainingCommandsOrEdits = true;
-                    }
-                }
-            }
-        }
-        let command = null;
-        if (hasRemainingCommandsOrEdits) {
-            // Create command that applies all edits not in the current file.
-            command = {
-                title: '',
-                command: ApplyCompletionCodeActionCommand.ID,
-                arguments: [
-                    detail.codeActions.map((x) => ({
-                        commands: x.commands,
-                        description: x.description,
-                        changes: x.changes.filter(x => x.fileName !== filepath)
-                    }))
-                ]
-            };
-        }
-        return {
-            command,
-            additionalTextEdits: additionalTextEdits.length
-                ? additionalTextEdits
-                : undefined
-        };
-    }
-    shouldTrigger(triggerCharacter, pre, option) {
-        if (triggerCharacter && this.client.apiVersion.lt(api_1.default.v290)) {
-            if (triggerCharacter === '@') {
-                // trigger in string
-                if (option.synname && /string/i.test(option.synname)) {
-                    return true;
-                }
-                // make sure we are in something that looks like the start of a jsdoc comment
-                if (!pre.match(/^\s*\*[ ]?@/) && !pre.match(/\/\*\*+[ ]?@/)) {
-                    return false;
-                }
-            }
-            else if (triggerCharacter === '<') {
-                return false;
-            }
-        }
-        return true;
-    }
-    // complete item documentation
-    getDocumentation(detail) {
-        let documentation = '';
-        if (detail.source) {
-            const importPath = `'${Previewer.plain(detail.source)}'`;
-            const autoImportLabel = `Auto import from ${importPath}`;
-            documentation += `${autoImportLabel}\n`;
-        }
-        let parts = [
-            Previewer.plain(detail.documentation),
-            Previewer.tagsMarkdownPreview(detail.tags)
-        ];
-        parts = parts.filter(s => s && s.trim() != '');
-        documentation += parts.join('\n\n');
-        if (documentation.length) {
-            return {
-                kind: vscode_languageserver_protocol_1.MarkupKind.Markdown,
-                value: documentation
-            };
-        }
-        return undefined;
-    }
-    createSnippetOfFunctionCall(item, detail) {
-        let { displayParts } = detail;
-        const parameterListParts = completionItem_1.getParameterListParts(displayParts);
-        const snippet = new SnippetString_1.default();
-        snippet.appendText(`${item.insertText || item.label}(`);
-        appendJoinedPlaceholders(snippet, parameterListParts.parts, ', ');
-        if (parameterListParts.hasOptionalParameters) {
-            snippet.appendTabstop();
-        }
-        snippet.appendText(')');
-        snippet.appendTabstop(0);
-        item.insertText = snippet.value;
-    }
-    async isValidFunctionCompletionContext(filepath, position, token) {
-        // Workaround for https://github.com/Microsoft/TypeScript/issues/12677
-        // Don't complete function calls inside of destructive assigments or imports
-        try {
-            const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
-            const response = await this.client.execute('quickinfo', args, token);
-            if (response.type !== 'response') {
-                return true;
-            }
-            const { body } = response;
-            switch (body && body.kind) {
-                case 'var':
-                case 'let':
-                case 'const':
-                case 'alias':
-                    return false;
-                default:
-                    return true;
-            }
-        }
-        catch (e) {
-            return true;
-        }
-    }
-    isInValidCommitCharacterContext(document, position) {
-        if (this.client.apiVersion.lt(api_1.default.v320)) {
-            // Workaround for https://github.com/Microsoft/TypeScript/issues/27742
-            // Only enable dot completions when previous character not a dot preceded by whitespace.
-            // Prevents incorrectly completing while typing spread operators.
-            if (position.character > 1) {
-                const preText = document.getText(vscode_languageserver_protocol_1.Range.create(position.line, 0, position.line, position.character));
-                return preText.match(/(\s|^)\.$/ig) === null;
-            }
-        }
-        return true;
-    }
-}
-exports.default = TypeScriptCompletionItemProvider;
-TypeScriptCompletionItemProvider.triggerCharacters = ['.', '"', '\'', '`', '/', '@', '<', '#'];
-function shouldExcludeCompletionEntry(element, completionConfiguration) {
-    return ((!completionConfiguration.names && element.kind === PConst.Kind.warning)
-        || (!completionConfiguration.paths &&
-            (element.kind === PConst.Kind.directory || element.kind === PConst.Kind.script || element.kind === PConst.Kind.externalModuleName))
-        || (!completionConfiguration.autoImports && element.hasAction));
-}
-function appendJoinedPlaceholders(snippet, parts, joiner) {
-    for (let i = 0; i < parts.length; ++i) {
-        const paramterPart = parts[i];
-        snippet.appendPlaceholder(paramterPart.text);
-        if (i !== parts.length - 1) {
-            snippet.appendText(joiner);
-        }
-    }
-}
-
-
-/***/ }),
-/* 39 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.DisplayPartKind = exports.KindModifiers = exports.DiagnosticCategory = exports.Kind = void 0;
-class Kind {
-}
-exports.Kind = Kind;
-Kind.alias = 'alias';
-Kind.callSignature = 'call';
-Kind.class = 'class';
-Kind.const = 'const';
-Kind.constructorImplementation = 'constructor';
-Kind.constructSignature = 'construct';
-Kind.directory = 'directory';
-Kind.enum = 'enum';
-Kind.enumMember = 'enum member';
-Kind.externalModuleName = 'external module name';
-Kind.function = 'function';
-Kind.indexSignature = 'index';
-Kind.interface = 'interface';
-Kind.keyword = 'keyword';
-Kind.let = 'let';
-Kind.localFunction = 'local function';
-Kind.localVariable = 'local var';
-Kind.method = 'method';
-Kind.memberGetAccessor = 'getter';
-Kind.memberSetAccessor = 'setter';
-Kind.memberVariable = 'property';
-Kind.module = 'module';
-Kind.primitiveType = 'primitive type';
-Kind.script = 'script';
-Kind.type = 'type';
-Kind.variable = 'var';
-Kind.warning = 'warning';
-Kind.string = 'string';
-Kind.parameter = 'parameter';
-Kind.typeParameter = 'type parameter';
-class DiagnosticCategory {
-}
-exports.DiagnosticCategory = DiagnosticCategory;
-DiagnosticCategory.error = 'error';
-DiagnosticCategory.warning = 'warning';
-DiagnosticCategory.suggestion = 'suggestion';
-class KindModifiers {
-}
-exports.KindModifiers = KindModifiers;
-KindModifiers.optional = 'optional';
-KindModifiers.color = 'color';
-KindModifiers.dtsFile = '.d.ts';
-KindModifiers.tsFile = '.ts';
-KindModifiers.tsxFile = '.tsx';
-KindModifiers.jsFile = '.js';
-KindModifiers.jsxFile = '.jsx';
-KindModifiers.jsonFile = '.json';
-KindModifiers.fileExtensionKindModifiers = [
-    KindModifiers.dtsFile,
-    KindModifiers.tsFile,
-    KindModifiers.tsxFile,
-    KindModifiers.jsFile,
-    KindModifiers.jsxFile,
-    KindModifiers.jsonFile,
-];
-class DisplayPartKind {
-}
-exports.DisplayPartKind = DisplayPartKind;
-DisplayPartKind.functionName = 'functionName';
-DisplayPartKind.methodName = 'methodName';
-DisplayPartKind.parameterName = 'parameterName';
-DisplayPartKind.propertyName = 'propertyName';
-DisplayPartKind.punctuation = 'punctuation';
-DisplayPartKind.text = 'text';
-
-
-/***/ }),
-/* 40 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const semver = __importStar(__webpack_require__(41));
-class API {
-    constructor(versionString, version) {
-        this.versionString = versionString;
-        this.version = version;
-    }
-    static fromSimpleString(value) {
-        return new API(value, value);
-    }
-    static fromVersionString(versionString) {
-        let version = semver.valid(versionString);
-        if (!version) {
-            return new API('invalid version', '1.0.0');
-        }
-        // Cut off any prerelease tag since we sometimes consume those on purpose.
-        const index = versionString.indexOf('-');
-        if (index >= 0) {
-            version = version.substr(0, index);
-        }
-        return new API(versionString, version);
-    }
-    gte(other) {
-        return semver.gte(this.version, other.version);
-    }
-    lt(other) {
-        return !this.gte(other);
-    }
-}
-exports.default = API;
-API.defaultVersion = API.fromSimpleString('1.0.0');
-API.v203 = API.fromSimpleString('2.0.3');
-API.v206 = API.fromSimpleString('2.0.6');
-API.v208 = API.fromSimpleString('2.0.8');
-API.v213 = API.fromSimpleString('2.1.3');
-API.v220 = API.fromSimpleString('2.2.0');
-API.v222 = API.fromSimpleString('2.2.2');
-API.v230 = API.fromSimpleString('2.3.0');
-API.v234 = API.fromSimpleString('2.3.4');
-API.v240 = API.fromSimpleString('2.4.0');
-API.v250 = API.fromSimpleString('2.5.0');
-API.v260 = API.fromSimpleString('2.6.0');
-API.v270 = API.fromSimpleString('2.7.0');
-API.v280 = API.fromSimpleString('2.8.0');
-API.v290 = API.fromSimpleString('2.9.0');
-API.v291 = API.fromSimpleString('2.9.1');
-API.v292 = API.fromSimpleString('2.9.2');
-API.v300 = API.fromSimpleString('3.0.0');
-API.v310 = API.fromSimpleString('3.1.0');
-API.v314 = API.fromSimpleString('3.1.4');
-API.v320 = API.fromSimpleString('3.2.0');
-API.v330 = API.fromSimpleString('3.3.0');
-API.v333 = API.fromSimpleString('3.3.3');
-API.v340 = API.fromSimpleString('3.4.0');
-API.v345 = API.fromSimpleString('3.4.5');
-API.v350 = API.fromSimpleString('3.5.0');
-API.v380 = API.fromSimpleString('3.8.0');
-API.v381 = API.fromSimpleString('3.8.1');
-API.v390 = API.fromSimpleString('3.9.0');
-API.v400 = API.fromSimpleString('4.0.0');
-API.v401 = API.fromSimpleString('4.0.1');
-
-
-/***/ }),
-/* 41 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// just pre-load all the stuff that index.js lazily exports
-const internalRe = __webpack_require__(42)
-module.exports = {
-  re: internalRe.re,
-  src: internalRe.src,
-  tokens: internalRe.t,
-  SEMVER_SPEC_VERSION: __webpack_require__(43).SEMVER_SPEC_VERSION,
-  SemVer: __webpack_require__(45),
-  compareIdentifiers: __webpack_require__(46).compareIdentifiers,
-  rcompareIdentifiers: __webpack_require__(46).rcompareIdentifiers,
-  parse: __webpack_require__(47),
-  valid: __webpack_require__(48),
-  clean: __webpack_require__(49),
-  inc: __webpack_require__(50),
-  diff: __webpack_require__(51),
-  major: __webpack_require__(54),
-  minor: __webpack_require__(55),
-  patch: __webpack_require__(56),
-  prerelease: __webpack_require__(57),
-  compare: __webpack_require__(53),
-  rcompare: __webpack_require__(58),
-  compareLoose: __webpack_require__(59),
-  compareBuild: __webpack_require__(60),
-  sort: __webpack_require__(61),
-  rsort: __webpack_require__(62),
-  gt: __webpack_require__(63),
-  lt: __webpack_require__(64),
-  eq: __webpack_require__(52),
-  neq: __webpack_require__(65),
-  gte: __webpack_require__(66),
-  lte: __webpack_require__(67),
-  cmp: __webpack_require__(68),
-  coerce: __webpack_require__(69),
-  Comparator: __webpack_require__(70),
-  Range: __webpack_require__(71),
-  satisfies: __webpack_require__(72),
-  toComparators: __webpack_require__(73),
-  maxSatisfying: __webpack_require__(74),
-  minSatisfying: __webpack_require__(75),
-  minVersion: __webpack_require__(76),
-  validRange: __webpack_require__(77),
-  outside: __webpack_require__(78),
-  gtr: __webpack_require__(79),
-  ltr: __webpack_require__(80),
-  intersects: __webpack_require__(81),
-  simplifyRange: __webpack_require__(82),
-  subset: __webpack_require__(83),
-}
-
-
-/***/ }),
-/* 42 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(43)
-const debug = __webpack_require__(44)
-exports = module.exports = {}
-
-// The actual regexps go on exports.re
-const re = exports.re = []
-const src = exports.src = []
-const t = exports.t = {}
-let R = 0
-
-const createToken = (name, value, isGlobal) => {
-  const index = R++
-  debug(index, value)
-  t[name] = index
-  src[index] = value
-  re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
-}
-
-// The following Regular Expressions can be used for tokenizing,
-// validating, and parsing SemVer version strings.
-
-// ## Numeric Identifier
-// A single `0`, or a non-zero digit followed by zero or more digits.
-
-createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*')
-createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')
-
-// ## Non-numeric Identifier
-// Zero or more digits, followed by a letter or hyphen, and then zero or
-// more letters, digits, or hyphens.
-
-createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*')
-
-// ## Main Version
-// Three dot-separated numeric identifiers.
-
-createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
-                   `(${src[t.NUMERICIDENTIFIER]})\\.` +
-                   `(${src[t.NUMERICIDENTIFIER]})`)
-
-createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
-                        `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
-                        `(${src[t.NUMERICIDENTIFIERLOOSE]})`)
-
-// ## Pre-release Version Identifier
-// A numeric identifier, or a non-numeric identifier.
-
-createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
-}|${src[t.NONNUMERICIDENTIFIER]})`)
-
-createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
-}|${src[t.NONNUMERICIDENTIFIER]})`)
-
-// ## Pre-release Version
-// Hyphen, followed by one or more dot-separated pre-release version
-// identifiers.
-
-createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
-}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`)
-
-createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
-}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)
-
-// ## Build Metadata Identifier
-// Any combination of digits, letters, or hyphens.
-
-createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')
-
-// ## Build Metadata
-// Plus sign, followed by one or more period-separated build metadata
-// identifiers.
-
-createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
-}(?:\\.${src[t.BUILDIDENTIFIER]})*))`)
-
-// ## Full Version String
-// A main version, followed optionally by a pre-release version and
-// build metadata.
-
-// Note that the only major, minor, patch, and pre-release sections of
-// the version string are capturing groups.  The build metadata is not a
-// capturing group, because it should not ever be used in version
-// comparison.
-
-createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
-}${src[t.PRERELEASE]}?${
-  src[t.BUILD]}?`)
-
-createToken('FULL', `^${src[t.FULLPLAIN]}$`)
-
-// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
-// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
-// common in the npm registry.
-createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
-}${src[t.PRERELEASELOOSE]}?${
-  src[t.BUILD]}?`)
-
-createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
-
-createToken('GTLT', '((?:<|>)?=?)')
-
-// Something like "2.*" or "1.2.x".
-// Note that "x.x" is a valid xRange identifer, meaning "any version"
-// Only the first item is strictly required.
-createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
-createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
-
-createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
-                   `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
-                   `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
-                   `(?:${src[t.PRERELEASE]})?${
-                     src[t.BUILD]}?` +
-                   `)?)?`)
-
-createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
-                        `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
-                        `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
-                        `(?:${src[t.PRERELEASELOOSE]})?${
-                          src[t.BUILD]}?` +
-                        `)?)?`)
-
-createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`)
-createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
-
-// Coercion.
-// Extract anything that could conceivably be a part of a valid semver
-createToken('COERCE', `${'(^|[^\\d])' +
-              '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
-              `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
-              `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
-              `(?:$|[^\\d])`)
-createToken('COERCERTL', src[t.COERCE], true)
-
-// Tilde ranges.
-// Meaning is "reasonably at or greater than"
-createToken('LONETILDE', '(?:~>?)')
-
-createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true)
-exports.tildeTrimReplace = '$1~'
-
-createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)
-createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)
-
-// Caret ranges.
-// Meaning is "at least and backwards compatible with"
-createToken('LONECARET', '(?:\\^)')
-
-createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true)
-exports.caretTrimReplace = '$1^'
-
-createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)
-createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)
-
-// A simple gt/lt/eq thing, or just "" to indicate "any version"
-createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`)
-createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`)
-
-// An expression to strip any whitespace between the gtlt and the thing
-// it modifies, so that `> 1.2.3` ==> `>1.2.3`
-createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
-}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)
-exports.comparatorTrimReplace = '$1$2$3'
-
-// Something like `1.2.3 - 1.2.4`
-// Note that these all use the loose form, because they'll be
-// checked against either the strict or loose comparator form
-// later.
-createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
-                   `\\s+-\\s+` +
-                   `(${src[t.XRANGEPLAIN]})` +
-                   `\\s*$`)
-
-createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
-                        `\\s+-\\s+` +
-                        `(${src[t.XRANGEPLAINLOOSE]})` +
-                        `\\s*$`)
-
-// Star ranges basically just allow anything at all.
-createToken('STAR', '(<|>)?=?\\s*\\*')
-// >=0.0.0 is like a star
-createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$')
-createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$')
-
-
-/***/ }),
-/* 43 */
-/***/ (function(module, exports) {
-
-// Note: this is the semver.org version of the spec that it implements
-// Not necessarily the package version of this code.
-const SEMVER_SPEC_VERSION = '2.0.0'
-
-const MAX_LENGTH = 256
-const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
-  /* istanbul ignore next */ 9007199254740991
-
-// Max safe segment length for coercion.
-const MAX_SAFE_COMPONENT_LENGTH = 16
-
-module.exports = {
-  SEMVER_SPEC_VERSION,
-  MAX_LENGTH,
-  MAX_SAFE_INTEGER,
-  MAX_SAFE_COMPONENT_LENGTH
-}
-
-
-/***/ }),
-/* 44 */
-/***/ (function(module, exports) {
-
-const debug = (
-  typeof process === 'object' &&
-  process.env &&
-  process.env.NODE_DEBUG &&
-  /\bsemver\b/i.test(process.env.NODE_DEBUG)
-) ? (...args) => console.error('SEMVER', ...args)
-  : () => {}
-
-module.exports = debug
-
-
-/***/ }),
-/* 45 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const debug = __webpack_require__(44)
-const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(43)
-const { re, t } = __webpack_require__(42)
-
-const { compareIdentifiers } = __webpack_require__(46)
-class SemVer {
-  constructor (version, options) {
-    if (!options || typeof options !== 'object') {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      }
-    }
-    if (version instanceof SemVer) {
-      if (version.loose === !!options.loose &&
-          version.includePrerelease === !!options.includePrerelease) {
-        return version
-      } else {
-        version = version.version
-      }
-    } else if (typeof version !== 'string') {
-      throw new TypeError(`Invalid Version: ${version}`)
-    }
-
-    if (version.length > MAX_LENGTH) {
-      throw new TypeError(
-        `version is longer than ${MAX_LENGTH} characters`
-      )
-    }
-
-    debug('SemVer', version, options)
-    this.options = options
-    this.loose = !!options.loose
-    // this isn't actually relevant for versions, but keep it so that we
-    // don't run into trouble passing this.options around.
-    this.includePrerelease = !!options.includePrerelease
-
-    const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
-
-    if (!m) {
-      throw new TypeError(`Invalid Version: ${version}`)
-    }
-
-    this.raw = version
-
-    // these are actually numbers
-    this.major = +m[1]
-    this.minor = +m[2]
-    this.patch = +m[3]
-
-    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
-      throw new TypeError('Invalid major version')
-    }
-
-    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
-      throw new TypeError('Invalid minor version')
-    }
-
-    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
-      throw new TypeError('Invalid patch version')
-    }
-
-    // numberify any prerelease numeric ids
-    if (!m[4]) {
-      this.prerelease = []
-    } else {
-      this.prerelease = m[4].split('.').map((id) => {
-        if (/^[0-9]+$/.test(id)) {
-          const num = +id
-          if (num >= 0 && num < MAX_SAFE_INTEGER) {
-            return num
-          }
-        }
-        return id
-      })
-    }
-
-    this.build = m[5] ? m[5].split('.') : []
-    this.format()
-  }
-
-  format () {
-    this.version = `${this.major}.${this.minor}.${this.patch}`
-    if (this.prerelease.length) {
-      this.version += `-${this.prerelease.join('.')}`
-    }
-    return this.version
-  }
-
-  toString () {
-    return this.version
-  }
-
-  compare (other) {
-    debug('SemVer.compare', this.version, this.options, other)
-    if (!(other instanceof SemVer)) {
-      if (typeof other === 'string' && other === this.version) {
-        return 0
-      }
-      other = new SemVer(other, this.options)
-    }
-
-    if (other.version === this.version) {
-      return 0
-    }
-
-    return this.compareMain(other) || this.comparePre(other)
-  }
-
-  compareMain (other) {
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options)
-    }
-
-    return (
-      compareIdentifiers(this.major, other.major) ||
-      compareIdentifiers(this.minor, other.minor) ||
-      compareIdentifiers(this.patch, other.patch)
-    )
-  }
-
-  comparePre (other) {
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options)
-    }
-
-    // NOT having a prerelease is > having one
-    if (this.prerelease.length && !other.prerelease.length) {
-      return -1
-    } else if (!this.prerelease.length && other.prerelease.length) {
-      return 1
-    } else if (!this.prerelease.length && !other.prerelease.length) {
-      return 0
-    }
-
-    let i = 0
-    do {
-      const a = this.prerelease[i]
-      const b = other.prerelease[i]
-      debug('prerelease compare', i, a, b)
-      if (a === undefined && b === undefined) {
-        return 0
-      } else if (b === undefined) {
-        return 1
-      } else if (a === undefined) {
-        return -1
-      } else if (a === b) {
-        continue
-      } else {
-        return compareIdentifiers(a, b)
-      }
-    } while (++i)
-  }
-
-  compareBuild (other) {
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options)
-    }
-
-    let i = 0
-    do {
-      const a = this.build[i]
-      const b = other.build[i]
-      debug('prerelease compare', i, a, b)
-      if (a === undefined && b === undefined) {
-        return 0
-      } else if (b === undefined) {
-        return 1
-      } else if (a === undefined) {
-        return -1
-      } else if (a === b) {
-        continue
-      } else {
-        return compareIdentifiers(a, b)
-      }
-    } while (++i)
-  }
-
-  // preminor will bump the version up to the next minor release, and immediately
-  // down to pre-release. premajor and prepatch work the same way.
-  inc (release, identifier) {
-    switch (release) {
-      case 'premajor':
-        this.prerelease.length = 0
-        this.patch = 0
-        this.minor = 0
-        this.major++
-        this.inc('pre', identifier)
-        break
-      case 'preminor':
-        this.prerelease.length = 0
-        this.patch = 0
-        this.minor++
-        this.inc('pre', identifier)
-        break
-      case 'prepatch':
-        // If this is already a prerelease, it will bump to the next version
-        // drop any prereleases that might already exist, since they are not
-        // relevant at this point.
-        this.prerelease.length = 0
-        this.inc('patch', identifier)
-        this.inc('pre', identifier)
-        break
-      // If the input is a non-prerelease version, this acts the same as
-      // prepatch.
-      case 'prerelease':
-        if (this.prerelease.length === 0) {
-          this.inc('patch', identifier)
-        }
-        this.inc('pre', identifier)
-        break
-
-      case 'major':
-        // If this is a pre-major version, bump up to the same major version.
-        // Otherwise increment major.
-        // 1.0.0-5 bumps to 1.0.0
-        // 1.1.0 bumps to 2.0.0
-        if (
-          this.minor !== 0 ||
-          this.patch !== 0 ||
-          this.prerelease.length === 0
-        ) {
-          this.major++
-        }
-        this.minor = 0
-        this.patch = 0
-        this.prerelease = []
-        break
-      case 'minor':
-        // If this is a pre-minor version, bump up to the same minor version.
-        // Otherwise increment minor.
-        // 1.2.0-5 bumps to 1.2.0
-        // 1.2.1 bumps to 1.3.0
-        if (this.patch !== 0 || this.prerelease.length === 0) {
-          this.minor++
-        }
-        this.patch = 0
-        this.prerelease = []
-        break
-      case 'patch':
-        // If this is not a pre-release version, it will increment the patch.
-        // If it is a pre-release it will bump up to the same patch version.
-        // 1.2.0-5 patches to 1.2.0
-        // 1.2.0 patches to 1.2.1
-        if (this.prerelease.length === 0) {
-          this.patch++
-        }
-        this.prerelease = []
-        break
-      // This probably shouldn't be used publicly.
-      // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
-      case 'pre':
-        if (this.prerelease.length === 0) {
-          this.prerelease = [0]
-        } else {
-          let i = this.prerelease.length
-          while (--i >= 0) {
-            if (typeof this.prerelease[i] === 'number') {
-              this.prerelease[i]++
-              i = -2
-            }
-          }
-          if (i === -1) {
-            // didn't increment anything
-            this.prerelease.push(0)
-          }
-        }
-        if (identifier) {
-          // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
-          // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
-          if (this.prerelease[0] === identifier) {
-            if (isNaN(this.prerelease[1])) {
-              this.prerelease = [identifier, 0]
-            }
-          } else {
-            this.prerelease = [identifier, 0]
-          }
-        }
-        break
-
-      default:
-        throw new Error(`invalid increment argument: ${release}`)
-    }
-    this.format()
-    this.raw = this.version
-    return this
-  }
-}
-
-module.exports = SemVer
-
-
-/***/ }),
-/* 46 */
-/***/ (function(module, exports) {
-
-const numeric = /^[0-9]+$/
-const compareIdentifiers = (a, b) => {
-  const anum = numeric.test(a)
-  const bnum = numeric.test(b)
-
-  if (anum && bnum) {
-    a = +a
-    b = +b
-  }
-
-  return a === b ? 0
-    : (anum && !bnum) ? -1
-    : (bnum && !anum) ? 1
-    : a < b ? -1
-    : 1
-}
-
-const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)
-
-module.exports = {
-  compareIdentifiers,
-  rcompareIdentifiers
-}
-
-
-/***/ }),
-/* 47 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const {MAX_LENGTH} = __webpack_require__(43)
-const { re, t } = __webpack_require__(42)
-const SemVer = __webpack_require__(45)
-
-const parse = (version, options) => {
-  if (!options || typeof options !== 'object') {
-    options = {
-      loose: !!options,
-      includePrerelease: false
-    }
-  }
-
-  if (version instanceof SemVer) {
-    return version
-  }
-
-  if (typeof version !== 'string') {
-    return null
-  }
-
-  if (version.length > MAX_LENGTH) {
-    return null
-  }
-
-  const r = options.loose ? re[t.LOOSE] : re[t.FULL]
-  if (!r.test(version)) {
-    return null
-  }
-
-  try {
-    return new SemVer(version, options)
-  } catch (er) {
-    return null
-  }
-}
-
-module.exports = parse
-
-
-/***/ }),
-/* 48 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const parse = __webpack_require__(47)
-const valid = (version, options) => {
-  const v = parse(version, options)
-  return v ? v.version : null
-}
-module.exports = valid
-
-
-/***/ }),
-/* 49 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const parse = __webpack_require__(47)
-const clean = (version, options) => {
-  const s = parse(version.trim().replace(/^[=v]+/, ''), options)
-  return s ? s.version : null
-}
-module.exports = clean
-
-
-/***/ }),
-/* 50 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-
-const inc = (version, release, options, identifier) => {
-  if (typeof (options) === 'string') {
-    identifier = options
-    options = undefined
-  }
-
-  try {
-    return new SemVer(version, options).inc(release, identifier).version
-  } catch (er) {
-    return null
-  }
-}
-module.exports = inc
-
-
-/***/ }),
-/* 51 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const parse = __webpack_require__(47)
-const eq = __webpack_require__(52)
-
-const diff = (version1, version2) => {
-  if (eq(version1, version2)) {
-    return null
-  } else {
-    const v1 = parse(version1)
-    const v2 = parse(version2)
-    const hasPre = v1.prerelease.length || v2.prerelease.length
-    const prefix = hasPre ? 'pre' : ''
-    const defaultResult = hasPre ? 'prerelease' : ''
-    for (const key in v1) {
-      if (key === 'major' || key === 'minor' || key === 'patch') {
-        if (v1[key] !== v2[key]) {
-          return prefix + key
-        }
-      }
-    }
-    return defaultResult // may be undefined
-  }
-}
-module.exports = diff
-
-
-/***/ }),
-/* 52 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const eq = (a, b, loose) => compare(a, b, loose) === 0
-module.exports = eq
-
-
-/***/ }),
-/* 53 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const compare = (a, b, loose) =>
-  new SemVer(a, loose).compare(new SemVer(b, loose))
-
-module.exports = compare
-
-
-/***/ }),
-/* 54 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const major = (a, loose) => new SemVer(a, loose).major
-module.exports = major
-
-
-/***/ }),
-/* 55 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const minor = (a, loose) => new SemVer(a, loose).minor
-module.exports = minor
-
-
-/***/ }),
-/* 56 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const patch = (a, loose) => new SemVer(a, loose).patch
-module.exports = patch
-
-
-/***/ }),
-/* 57 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const parse = __webpack_require__(47)
-const prerelease = (version, options) => {
-  const parsed = parse(version, options)
-  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
-}
-module.exports = prerelease
-
-
-/***/ }),
-/* 58 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const rcompare = (a, b, loose) => compare(b, a, loose)
-module.exports = rcompare
-
-
-/***/ }),
-/* 59 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const compareLoose = (a, b) => compare(a, b, true)
-module.exports = compareLoose
-
-
-/***/ }),
-/* 60 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const compareBuild = (a, b, loose) => {
-  const versionA = new SemVer(a, loose)
-  const versionB = new SemVer(b, loose)
-  return versionA.compare(versionB) || versionA.compareBuild(versionB)
-}
-module.exports = compareBuild
-
-
-/***/ }),
-/* 61 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compareBuild = __webpack_require__(60)
-const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
-module.exports = sort
-
-
-/***/ }),
-/* 62 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compareBuild = __webpack_require__(60)
-const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
-module.exports = rsort
-
-
-/***/ }),
-/* 63 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const gt = (a, b, loose) => compare(a, b, loose) > 0
-module.exports = gt
-
-
-/***/ }),
-/* 64 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const lt = (a, b, loose) => compare(a, b, loose) < 0
-module.exports = lt
-
-
-/***/ }),
-/* 65 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const neq = (a, b, loose) => compare(a, b, loose) !== 0
-module.exports = neq
-
-
-/***/ }),
-/* 66 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const gte = (a, b, loose) => compare(a, b, loose) >= 0
-module.exports = gte
-
-
-/***/ }),
-/* 67 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const compare = __webpack_require__(53)
-const lte = (a, b, loose) => compare(a, b, loose) <= 0
-module.exports = lte
-
-
-/***/ }),
-/* 68 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const eq = __webpack_require__(52)
-const neq = __webpack_require__(65)
-const gt = __webpack_require__(63)
-const gte = __webpack_require__(66)
-const lt = __webpack_require__(64)
-const lte = __webpack_require__(67)
-
-const cmp = (a, op, b, loose) => {
-  switch (op) {
-    case '===':
-      if (typeof a === 'object')
-        a = a.version
-      if (typeof b === 'object')
-        b = b.version
-      return a === b
-
-    case '!==':
-      if (typeof a === 'object')
-        a = a.version
-      if (typeof b === 'object')
-        b = b.version
-      return a !== b
-
-    case '':
-    case '=':
-    case '==':
-      return eq(a, b, loose)
-
-    case '!=':
-      return neq(a, b, loose)
-
-    case '>':
-      return gt(a, b, loose)
-
-    case '>=':
-      return gte(a, b, loose)
-
-    case '<':
-      return lt(a, b, loose)
-
-    case '<=':
-      return lte(a, b, loose)
-
-    default:
-      throw new TypeError(`Invalid operator: ${op}`)
-  }
-}
-module.exports = cmp
-
-
-/***/ }),
-/* 69 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const parse = __webpack_require__(47)
-const {re, t} = __webpack_require__(42)
-
-const coerce = (version, options) => {
-  if (version instanceof SemVer) {
-    return version
-  }
-
-  if (typeof version === 'number') {
-    version = String(version)
-  }
-
-  if (typeof version !== 'string') {
-    return null
-  }
-
-  options = options || {}
-
-  let match = null
-  if (!options.rtl) {
-    match = version.match(re[t.COERCE])
-  } else {
-    // Find the right-most coercible string that does not share
-    // a terminus with a more left-ward coercible string.
-    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
-    //
-    // Walk through the string checking with a /g regexp
-    // Manually set the index so as to pick up overlapping matches.
-    // Stop when we get a match that ends at the string end, since no
-    // coercible string can be more right-ward without the same terminus.
-    let next
-    while ((next = re[t.COERCERTL].exec(version)) &&
-        (!match || match.index + match[0].length !== version.length)
-    ) {
-      if (!match ||
-            next.index + next[0].length !== match.index + match[0].length) {
-        match = next
-      }
-      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
-    }
-    // leave it in a clean state
-    re[t.COERCERTL].lastIndex = -1
-  }
-
-  if (match === null)
-    return null
-
-  return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
-}
-module.exports = coerce
-
-
-/***/ }),
-/* 70 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const ANY = Symbol('SemVer ANY')
-// hoisted class for cyclic dependency
-class Comparator {
-  static get ANY () {
-    return ANY
-  }
-  constructor (comp, options) {
-    if (!options || typeof options !== 'object') {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      }
-    }
-
-    if (comp instanceof Comparator) {
-      if (comp.loose === !!options.loose) {
-        return comp
-      } else {
-        comp = comp.value
-      }
-    }
-
-    debug('comparator', comp, options)
-    this.options = options
-    this.loose = !!options.loose
-    this.parse(comp)
-
-    if (this.semver === ANY) {
-      this.value = ''
-    } else {
-      this.value = this.operator + this.semver.version
-    }
-
-    debug('comp', this)
-  }
-
-  parse (comp) {
-    const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
-    const m = comp.match(r)
-
-    if (!m) {
-      throw new TypeError(`Invalid comparator: ${comp}`)
-    }
-
-    this.operator = m[1] !== undefined ? m[1] : ''
-    if (this.operator === '=') {
-      this.operator = ''
-    }
-
-    // if it literally is just '>' or '' then allow anything.
-    if (!m[2]) {
-      this.semver = ANY
-    } else {
-      this.semver = new SemVer(m[2], this.options.loose)
-    }
-  }
-
-  toString () {
-    return this.value
-  }
-
-  test (version) {
-    debug('Comparator.test', version, this.options.loose)
-
-    if (this.semver === ANY || version === ANY) {
-      return true
-    }
-
-    if (typeof version === 'string') {
-      try {
-        version = new SemVer(version, this.options)
-      } catch (er) {
-        return false
-      }
-    }
-
-    return cmp(version, this.operator, this.semver, this.options)
-  }
-
-  intersects (comp, options) {
-    if (!(comp instanceof Comparator)) {
-      throw new TypeError('a Comparator is required')
-    }
-
-    if (!options || typeof options !== 'object') {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      }
-    }
-
-    if (this.operator === '') {
-      if (this.value === '') {
-        return true
-      }
-      return new Range(comp.value, options).test(this.value)
-    } else if (comp.operator === '') {
-      if (comp.value === '') {
-        return true
-      }
-      return new Range(this.value, options).test(comp.semver)
-    }
-
-    const sameDirectionIncreasing =
-      (this.operator === '>=' || this.operator === '>') &&
-      (comp.operator === '>=' || comp.operator === '>')
-    const sameDirectionDecreasing =
-      (this.operator === '<=' || this.operator === '<') &&
-      (comp.operator === '<=' || comp.operator === '<')
-    const sameSemVer = this.semver.version === comp.semver.version
-    const differentDirectionsInclusive =
-      (this.operator === '>=' || this.operator === '<=') &&
-      (comp.operator === '>=' || comp.operator === '<=')
-    const oppositeDirectionsLessThan =
-      cmp(this.semver, '<', comp.semver, options) &&
-      (this.operator === '>=' || this.operator === '>') &&
-        (comp.operator === '<=' || comp.operator === '<')
-    const oppositeDirectionsGreaterThan =
-      cmp(this.semver, '>', comp.semver, options) &&
-      (this.operator === '<=' || this.operator === '<') &&
-        (comp.operator === '>=' || comp.operator === '>')
-
-    return (
-      sameDirectionIncreasing ||
-      sameDirectionDecreasing ||
-      (sameSemVer && differentDirectionsInclusive) ||
-      oppositeDirectionsLessThan ||
-      oppositeDirectionsGreaterThan
-    )
-  }
-}
-
-module.exports = Comparator
-
-const {re, t} = __webpack_require__(42)
-const cmp = __webpack_require__(68)
-const debug = __webpack_require__(44)
-const SemVer = __webpack_require__(45)
-const Range = __webpack_require__(71)
-
-
-/***/ }),
-/* 71 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// hoisted class for cyclic dependency
-class Range {
-  constructor (range, options) {
-    if (!options || typeof options !== 'object') {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      }
-    }
-
-    if (range instanceof Range) {
-      if (
-        range.loose === !!options.loose &&
-        range.includePrerelease === !!options.includePrerelease
-      ) {
-        return range
-      } else {
-        return new Range(range.raw, options)
-      }
-    }
-
-    if (range instanceof Comparator) {
-      // just put it in the set and return
-      this.raw = range.value
-      this.set = [[range]]
-      this.format()
-      return this
-    }
-
-    this.options = options
-    this.loose = !!options.loose
-    this.includePrerelease = !!options.includePrerelease
-
-    // First, split based on boolean or ||
-    this.raw = range
-    this.set = range
-      .split(/\s*\|\|\s*/)
-      // map the range to a 2d array of comparators
-      .map(range => this.parseRange(range.trim()))
-      // throw out any comparator lists that are empty
-      // this generally means that it was not a valid range, which is allowed
-      // in loose mode, but will still throw if the WHOLE range is invalid.
-      .filter(c => c.length)
-
-    if (!this.set.length) {
-      throw new TypeError(`Invalid SemVer Range: ${range}`)
-    }
-
-    this.format()
-  }
-
-  format () {
-    this.range = this.set
-      .map((comps) => {
-        return comps.join(' ').trim()
-      })
-      .join('||')
-      .trim()
-    return this.range
-  }
-
-  toString () {
-    return this.range
-  }
-
-  parseRange (range) {
-    const loose = this.options.loose
-    range = range.trim()
-    // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
-    const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
-    range = range.replace(hr, hyphenReplace(this.options.includePrerelease))
-    debug('hyphen replace', range)
-    // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
-    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
-    debug('comparator trim', range, re[t.COMPARATORTRIM])
-
-    // `~ 1.2.3` => `~1.2.3`
-    range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
-
-    // `^ 1.2.3` => `^1.2.3`
-    range = range.replace(re[t.CARETTRIM], caretTrimReplace)
-
-    // normalize spaces
-    range = range.split(/\s+/).join(' ')
-
-    // At this point, the range is completely trimmed and
-    // ready to be split into comparators.
-
-    const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
-    return range
-      .split(' ')
-      .map(comp => parseComparator(comp, this.options))
-      .join(' ')
-      .split(/\s+/)
-      .map(comp => replaceGTE0(comp, this.options))
-      // in loose mode, throw out any that are not valid comparators
-      .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)
-      .map(comp => new Comparator(comp, this.options))
-  }
-
-  intersects (range, options) {
-    if (!(range instanceof Range)) {
-      throw new TypeError('a Range is required')
-    }
-
-    return this.set.some((thisComparators) => {
-      return (
-        isSatisfiable(thisComparators, options) &&
-        range.set.some((rangeComparators) => {
-          return (
-            isSatisfiable(rangeComparators, options) &&
-            thisComparators.every((thisComparator) => {
-              return rangeComparators.every((rangeComparator) => {
-                return thisComparator.intersects(rangeComparator, options)
-              })
-            })
-          )
-        })
-      )
-    })
-  }
-
-  // if ANY of the sets match ALL of its comparators, then pass
-  test (version) {
-    if (!version) {
-      return false
-    }
-
-    if (typeof version === 'string') {
-      try {
-        version = new SemVer(version, this.options)
-      } catch (er) {
-        return false
-      }
-    }
-
-    for (let i = 0; i < this.set.length; i++) {
-      if (testSet(this.set[i], version, this.options)) {
-        return true
-      }
-    }
-    return false
-  }
-}
-module.exports = Range
-
-const Comparator = __webpack_require__(70)
-const debug = __webpack_require__(44)
-const SemVer = __webpack_require__(45)
-const {
-  re,
-  t,
-  comparatorTrimReplace,
-  tildeTrimReplace,
-  caretTrimReplace
-} = __webpack_require__(42)
-
-// take a set of comparators and determine whether there
-// exists a version which can satisfy it
-const isSatisfiable = (comparators, options) => {
-  let result = true
-  const remainingComparators = comparators.slice()
-  let testComparator = remainingComparators.pop()
-
-  while (result && remainingComparators.length) {
-    result = remainingComparators.every((otherComparator) => {
-      return testComparator.intersects(otherComparator, options)
-    })
-
-    testComparator = remainingComparators.pop()
-  }
-
-  return result
-}
-
-// comprised of xranges, tildes, stars, and gtlt's at this point.
-// already replaced the hyphen ranges
-// turn into a set of JUST comparators.
-const parseComparator = (comp, options) => {
-  debug('comp', comp, options)
-  comp = replaceCarets(comp, options)
-  debug('caret', comp)
-  comp = replaceTildes(comp, options)
-  debug('tildes', comp)
-  comp = replaceXRanges(comp, options)
-  debug('xrange', comp)
-  comp = replaceStars(comp, options)
-  debug('stars', comp)
-  return comp
-}
-
-const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
-
-// ~, ~> --> * (any, kinda silly)
-// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
-// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
-// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
-// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
-// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
-const replaceTildes = (comp, options) =>
-  comp.trim().split(/\s+/).map((comp) => {
-    return replaceTilde(comp, options)
-  }).join(' ')
-
-const replaceTilde = (comp, options) => {
-  const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
-  return comp.replace(r, (_, M, m, p, pr) => {
-    debug('tilde', comp, _, M, m, p, pr)
-    let ret
-
-    if (isX(M)) {
-      ret = ''
-    } else if (isX(m)) {
-      ret = `>=${M}.0.0 <${+M + 1}.0.0-0`
-    } else if (isX(p)) {
-      // ~1.2 == >=1.2.0 <1.3.0-0
-      ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`
-    } else if (pr) {
-      debug('replaceTilde pr', pr)
-      ret = `>=${M}.${m}.${p}-${pr
-      } <${M}.${+m + 1}.0-0`
-    } else {
-      // ~1.2.3 == >=1.2.3 <1.3.0-0
-      ret = `>=${M}.${m}.${p
-      } <${M}.${+m + 1}.0-0`
-    }
-
-    debug('tilde return', ret)
-    return ret
-  })
-}
-
-// ^ --> * (any, kinda silly)
-// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
-// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
-// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
-// ^1.2.3 --> >=1.2.3 <2.0.0-0
-// ^1.2.0 --> >=1.2.0 <2.0.0-0
-const replaceCarets = (comp, options) =>
-  comp.trim().split(/\s+/).map((comp) => {
-    return replaceCaret(comp, options)
-  }).join(' ')
-
-const replaceCaret = (comp, options) => {
-  debug('caret', comp, options)
-  const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
-  const z = options.includePrerelease ? '-0' : ''
-  return comp.replace(r, (_, M, m, p, pr) => {
-    debug('caret', comp, _, M, m, p, pr)
-    let ret
-
-    if (isX(M)) {
-      ret = ''
-    } else if (isX(m)) {
-      ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`
-    } else if (isX(p)) {
-      if (M === '0') {
-        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`
-      } else {
-        ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`
-      }
-    } else if (pr) {
-      debug('replaceCaret pr', pr)
-      if (M === '0') {
-        if (m === '0') {
-          ret = `>=${M}.${m}.${p}-${pr
-          } <${M}.${m}.${+p + 1}-0`
-        } else {
-          ret = `>=${M}.${m}.${p}-${pr
-          } <${M}.${+m + 1}.0-0`
-        }
-      } else {
-        ret = `>=${M}.${m}.${p}-${pr
-        } <${+M + 1}.0.0-0`
-      }
-    } else {
-      debug('no pr')
-      if (M === '0') {
-        if (m === '0') {
-          ret = `>=${M}.${m}.${p
-          }${z} <${M}.${m}.${+p + 1}-0`
-        } else {
-          ret = `>=${M}.${m}.${p
-          }${z} <${M}.${+m + 1}.0-0`
-        }
-      } else {
-        ret = `>=${M}.${m}.${p
-        } <${+M + 1}.0.0-0`
-      }
-    }
-
-    debug('caret return', ret)
-    return ret
-  })
-}
-
-const replaceXRanges = (comp, options) => {
-  debug('replaceXRanges', comp, options)
-  return comp.split(/\s+/).map((comp) => {
-    return replaceXRange(comp, options)
-  }).join(' ')
-}
-
-const replaceXRange = (comp, options) => {
-  comp = comp.trim()
-  const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
-  return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
-    debug('xRange', comp, ret, gtlt, M, m, p, pr)
-    const xM = isX(M)
-    const xm = xM || isX(m)
-    const xp = xm || isX(p)
-    const anyX = xp
-
-    if (gtlt === '=' && anyX) {
-      gtlt = ''
-    }
-
-    // if we're including prereleases in the match, then we need
-    // to fix this to -0, the lowest possible prerelease value
-    pr = options.includePrerelease ? '-0' : ''
-
-    if (xM) {
-      if (gtlt === '>' || gtlt === '<') {
-        // nothing is allowed
-        ret = '<0.0.0-0'
-      } else {
-        // nothing is forbidden
-        ret = '*'
-      }
-    } else if (gtlt && anyX) {
-      // we know patch is an x, because we have any x at all.
-      // replace X with 0
-      if (xm) {
-        m = 0
-      }
-      p = 0
-
-      if (gtlt === '>') {
-        // >1 => >=2.0.0
-        // >1.2 => >=1.3.0
-        gtlt = '>='
-        if (xm) {
-          M = +M + 1
-          m = 0
-          p = 0
-        } else {
-          m = +m + 1
-          p = 0
-        }
-      } else if (gtlt === '<=') {
-        // <=0.7.x is actually <0.8.0, since any 0.7.x should
-        // pass.  Similarly, <=7.x is actually <8.0.0, etc.
-        gtlt = '<'
-        if (xm) {
-          M = +M + 1
-        } else {
-          m = +m + 1
-        }
-      }
-
-      if (gtlt === '<')
-        pr = '-0'
-
-      ret = `${gtlt + M}.${m}.${p}${pr}`
-    } else if (xm) {
-      ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`
-    } else if (xp) {
-      ret = `>=${M}.${m}.0${pr
-      } <${M}.${+m + 1}.0-0`
-    }
-
-    debug('xRange return', ret)
-
-    return ret
-  })
-}
-
-// Because * is AND-ed with everything else in the comparator,
-// and '' means "any version", just remove the *s entirely.
-const replaceStars = (comp, options) => {
-  debug('replaceStars', comp, options)
-  // Looseness is ignored here.  star is always as loose as it gets!
-  return comp.trim().replace(re[t.STAR], '')
-}
-
-const replaceGTE0 = (comp, options) => {
-  debug('replaceGTE0', comp, options)
-  return comp.trim()
-    .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
-}
-
-// This function is passed to string.replace(re[t.HYPHENRANGE])
-// M, m, patch, prerelease, build
-// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
-// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
-// 1.2 - 3.4 => >=1.2.0 <3.5.0-0
-const hyphenReplace = incPr => ($0,
-  from, fM, fm, fp, fpr, fb,
-  to, tM, tm, tp, tpr, tb) => {
-  if (isX(fM)) {
-    from = ''
-  } else if (isX(fm)) {
-    from = `>=${fM}.0.0${incPr ? '-0' : ''}`
-  } else if (isX(fp)) {
-    from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`
-  } else if (fpr) {
-    from = `>=${from}`
-  } else {
-    from = `>=${from}${incPr ? '-0' : ''}`
-  }
-
-  if (isX(tM)) {
-    to = ''
-  } else if (isX(tm)) {
-    to = `<${+tM + 1}.0.0-0`
-  } else if (isX(tp)) {
-    to = `<${tM}.${+tm + 1}.0-0`
-  } else if (tpr) {
-    to = `<=${tM}.${tm}.${tp}-${tpr}`
-  } else if (incPr) {
-    to = `<${tM}.${tm}.${+tp + 1}-0`
-  } else {
-    to = `<=${to}`
-  }
-
-  return (`${from} ${to}`).trim()
-}
-
-const testSet = (set, version, options) => {
-  for (let i = 0; i < set.length; i++) {
-    if (!set[i].test(version)) {
-      return false
-    }
-  }
-
-  if (version.prerelease.length && !options.includePrerelease) {
-    // Find the set of versions that are allowed to have prereleases
-    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
-    // That should allow `1.2.3-pr.2` to pass.
-    // However, `1.2.4-alpha.notready` should NOT be allowed,
-    // even though it's within the range set by the comparators.
-    for (let i = 0; i < set.length; i++) {
-      debug(set[i].semver)
-      if (set[i].semver === Comparator.ANY) {
-        continue
-      }
-
-      if (set[i].semver.prerelease.length > 0) {
-        const allowed = set[i].semver
-        if (allowed.major === version.major &&
-            allowed.minor === version.minor &&
-            allowed.patch === version.patch) {
-          return true
-        }
-      }
-    }
-
-    // Version has a -pre, but it's not one of the ones we like.
-    return false
-  }
-
-  return true
-}
-
-
-/***/ }),
-/* 72 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const Range = __webpack_require__(71)
-const satisfies = (version, range, options) => {
-  try {
-    range = new Range(range, options)
-  } catch (er) {
-    return false
-  }
-  return range.test(version)
-}
-module.exports = satisfies
-
-
-/***/ }),
-/* 73 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const Range = __webpack_require__(71)
-
-// Mostly just for testing and legacy API reasons
-const toComparators = (range, options) =>
-  new Range(range, options).set
-    .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))
-
-module.exports = toComparators
-
-
-/***/ }),
-/* 74 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const Range = __webpack_require__(71)
-
-const maxSatisfying = (versions, range, options) => {
-  let max = null
-  let maxSV = null
-  let rangeObj = null
-  try {
-    rangeObj = new Range(range, options)
-  } catch (er) {
-    return null
-  }
-  versions.forEach((v) => {
-    if (rangeObj.test(v)) {
-      // satisfies(v, range, options)
-      if (!max || maxSV.compare(v) === -1) {
-        // compare(max, v, true)
-        max = v
-        maxSV = new SemVer(max, options)
-      }
-    }
-  })
-  return max
-}
-module.exports = maxSatisfying
-
-
-/***/ }),
-/* 75 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const Range = __webpack_require__(71)
-const minSatisfying = (versions, range, options) => {
-  let min = null
-  let minSV = null
-  let rangeObj = null
-  try {
-    rangeObj = new Range(range, options)
-  } catch (er) {
-    return null
-  }
-  versions.forEach((v) => {
-    if (rangeObj.test(v)) {
-      // satisfies(v, range, options)
-      if (!min || minSV.compare(v) === 1) {
-        // compare(min, v, true)
-        min = v
-        minSV = new SemVer(min, options)
-      }
-    }
-  })
-  return min
-}
-module.exports = minSatisfying
-
-
-/***/ }),
-/* 76 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const Range = __webpack_require__(71)
-const gt = __webpack_require__(63)
-
-const minVersion = (range, loose) => {
-  range = new Range(range, loose)
-
-  let minver = new SemVer('0.0.0')
-  if (range.test(minver)) {
-    return minver
-  }
-
-  minver = new SemVer('0.0.0-0')
-  if (range.test(minver)) {
-    return minver
-  }
-
-  minver = null
-  for (let i = 0; i < range.set.length; ++i) {
-    const comparators = range.set[i]
-
-    comparators.forEach((comparator) => {
-      // Clone to avoid manipulating the comparator's semver object.
-      const compver = new SemVer(comparator.semver.version)
-      switch (comparator.operator) {
-        case '>':
-          if (compver.prerelease.length === 0) {
-            compver.patch++
-          } else {
-            compver.prerelease.push(0)
-          }
-          compver.raw = compver.format()
-          /* fallthrough */
-        case '':
-        case '>=':
-          if (!minver || gt(minver, compver)) {
-            minver = compver
-          }
-          break
-        case '<':
-        case '<=':
-          /* Ignore maximum versions */
-          break
-        /* istanbul ignore next */
-        default:
-          throw new Error(`Unexpected operation: ${comparator.operator}`)
-      }
-    })
-  }
-
-  if (minver && range.test(minver)) {
-    return minver
-  }
-
-  return null
-}
-module.exports = minVersion
-
-
-/***/ }),
-/* 77 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const Range = __webpack_require__(71)
-const validRange = (range, options) => {
-  try {
-    // Return '*' instead of '' so that truthiness works.
-    // This will throw if it's invalid anyway
-    return new Range(range, options).range || '*'
-  } catch (er) {
-    return null
-  }
-}
-module.exports = validRange
-
-
-/***/ }),
-/* 78 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const SemVer = __webpack_require__(45)
-const Comparator = __webpack_require__(70)
-const {ANY} = Comparator
-const Range = __webpack_require__(71)
-const satisfies = __webpack_require__(72)
-const gt = __webpack_require__(63)
-const lt = __webpack_require__(64)
-const lte = __webpack_require__(67)
-const gte = __webpack_require__(66)
-
-const outside = (version, range, hilo, options) => {
-  version = new SemVer(version, options)
-  range = new Range(range, options)
-
-  let gtfn, ltefn, ltfn, comp, ecomp
-  switch (hilo) {
-    case '>':
-      gtfn = gt
-      ltefn = lte
-      ltfn = lt
-      comp = '>'
-      ecomp = '>='
-      break
-    case '<':
-      gtfn = lt
-      ltefn = gte
-      ltfn = gt
-      comp = '<'
-      ecomp = '<='
-      break
-    default:
-      throw new TypeError('Must provide a hilo val of "<" or ">"')
-  }
-
-  // If it satisifes the range it is not outside
-  if (satisfies(version, range, options)) {
-    return false
-  }
-
-  // From now on, variable terms are as if we're in "gtr" mode.
-  // but note that everything is flipped for the "ltr" function.
-
-  for (let i = 0; i < range.set.length; ++i) {
-    const comparators = range.set[i]
-
-    let high = null
-    let low = null
-
-    comparators.forEach((comparator) => {
-      if (comparator.semver === ANY) {
-        comparator = new Comparator('>=0.0.0')
-      }
-      high = high || comparator
-      low = low || comparator
-      if (gtfn(comparator.semver, high.semver, options)) {
-        high = comparator
-      } else if (ltfn(comparator.semver, low.semver, options)) {
-        low = comparator
-      }
-    })
-
-    // If the edge version comparator has a operator then our version
-    // isn't outside it
-    if (high.operator === comp || high.operator === ecomp) {
-      return false
-    }
-
-    // If the lowest version comparator has an operator and our version
-    // is less than it then it isn't higher than the range
-    if ((!low.operator || low.operator === comp) &&
-        ltefn(version, low.semver)) {
-      return false
-    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
-      return false
-    }
-  }
-  return true
-}
-
-module.exports = outside
-
-
-/***/ }),
-/* 79 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// Determine if version is greater than all the versions possible in the range.
-const outside = __webpack_require__(78)
-const gtr = (version, range, options) => outside(version, range, '>', options)
-module.exports = gtr
-
-
-/***/ }),
-/* 80 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const outside = __webpack_require__(78)
-// Determine if version is less than all the versions possible in the range
-const ltr = (version, range, options) => outside(version, range, '<', options)
-module.exports = ltr
-
-
-/***/ }),
-/* 81 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const Range = __webpack_require__(71)
-const intersects = (r1, r2, options) => {
-  r1 = new Range(r1, options)
-  r2 = new Range(r2, options)
-  return r1.intersects(r2)
-}
-module.exports = intersects
-
-
-/***/ }),
-/* 82 */
-/***/ (function(module, exports, __webpack_require__) {
-
-// given a set of versions and a range, create a "simplified" range
-// that includes the same versions that the original range does
-// If the original range is shorter than the simplified one, return that.
-const satisfies = __webpack_require__(72)
-const compare = __webpack_require__(53)
-module.exports = (versions, range, options) => {
-  const set = []
-  let min = null
-  let prev = null
-  const v = versions.sort((a, b) => compare(a, b, options))
-  for (const version of v) {
-    const included = satisfies(version, range, options)
-    if (included) {
-      prev = version
-      if (!min)
-        min = version
-    } else {
-      if (prev) {
-        set.push([min, prev])
-      }
-      prev = null
-      min = null
-    }
-  }
-  if (min)
-    set.push([min, null])
-
-  const ranges = []
-  for (const [min, max] of set) {
-    if (min === max)
-      ranges.push(min)
-    else if (!max && min === v[0])
-      ranges.push('*')
-    else if (!max)
-      ranges.push(`>=${min}`)
-    else if (min === v[0])
-      ranges.push(`<=${max}`)
-    else
-      ranges.push(`${min} - ${max}`)
-  }
-  const simplified = ranges.join(' || ')
-  const original = typeof range.raw === 'string' ? range.raw : String(range)
-  return simplified.length < original.length ? simplified : range
-}
-
-
-/***/ }),
-/* 83 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const Range = __webpack_require__(71)
-const { ANY } = __webpack_require__(70)
-const satisfies = __webpack_require__(72)
-const compare = __webpack_require__(53)
-
-// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
-// - Every simple range `r1, r2, ...` is a subset of some `R1, R2, ...`
-//
-// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
-// - If c is only the ANY comparator
-//   - If C is only the ANY comparator, return true
-//   - Else return false
-// - Let EQ be the set of = comparators in c
-// - If EQ is more than one, return true (null set)
-// - Let GT be the highest > or >= comparator in c
-// - Let LT be the lowest < or <= comparator in c
-// - If GT and LT, and GT.semver > LT.semver, return true (null set)
-// - If EQ
-//   - If GT, and EQ does not satisfy GT, return true (null set)
-//   - If LT, and EQ does not satisfy LT, return true (null set)
-//   - If EQ satisfies every C, return true
-//   - Else return false
-// - If GT
-//   - If GT is lower than any > or >= comp in C, return false
-//   - If GT is >=, and GT.semver does not satisfy every C, return false
-// - If LT
-//   - If LT.semver is greater than that of any > comp in C, return false
-//   - If LT is <=, and LT.semver does not satisfy every C, return false
-// - If any C is a = range, and GT or LT are set, return false
-// - Else return true
-
-const subset = (sub, dom, options) => {
-  sub = new Range(sub, options)
-  dom = new Range(dom, options)
-  let sawNonNull = false
-
-  OUTER: for (const simpleSub of sub.set) {
-    for (const simpleDom of dom.set) {
-      const isSub = simpleSubset(simpleSub, simpleDom, options)
-      sawNonNull = sawNonNull || isSub !== null
-      if (isSub)
-        continue OUTER
-    }
-    // the null set is a subset of everything, but null simple ranges in
-    // a complex range should be ignored.  so if we saw a non-null range,
-    // then we know this isn't a subset, but if EVERY simple range was null,
-    // then it is a subset.
-    if (sawNonNull)
-      return false
-  }
-  return true
-}
-
-const simpleSubset = (sub, dom, options) => {
-  if (sub.length === 1 && sub[0].semver === ANY)
-    return dom.length === 1 && dom[0].semver === ANY
-
-  const eqSet = new Set()
-  let gt, lt
-  for (const c of sub) {
-    if (c.operator === '>' || c.operator === '>=')
-      gt = higherGT(gt, c, options)
-    else if (c.operator === '<' || c.operator === '<=')
-      lt = lowerLT(lt, c, options)
-    else
-      eqSet.add(c.semver)
-  }
-
-  if (eqSet.size > 1)
-    return null
-
-  let gtltComp
-  if (gt && lt) {
-    gtltComp = compare(gt.semver, lt.semver, options)
-    if (gtltComp > 0)
-      return null
-    else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))
-      return null
-  }
-
-  // will iterate one or zero times
-  for (const eq of eqSet) {
-    if (gt && !satisfies(eq, String(gt), options))
-      return null
-
-    if (lt && !satisfies(eq, String(lt), options))
-      return null
-
-    for (const c of dom) {
-      if (!satisfies(eq, String(c), options))
-        return false
-    }
-    return true
-  }
-
-  let higher, lower
-  let hasDomLT, hasDomGT
-  for (const c of dom) {
-    hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
-    hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
-    if (gt) {
-      if (c.operator === '>' || c.operator === '>=') {
-        higher = higherGT(gt, c, options)
-        if (higher === c)
-          return false
-      } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))
-        return false
-    }
-    if (lt) {
-      if (c.operator === '<' || c.operator === '<=') {
-        lower = lowerLT(lt, c, options)
-        if (lower === c)
-          return false
-      } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))
-        return false
-    }
-    if (!c.operator && (lt || gt) && gtltComp !== 0)
-      return false
-  }
-
-  // if there was a < or >, and nothing in the dom, then must be false
-  // UNLESS it was limited by another range in the other direction.
-  // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
-  if (gt && hasDomLT && !lt && gtltComp !== 0)
-    return false
-
-  if (lt && hasDomGT && !gt && gtltComp !== 0)
-    return false
-
-  return true
-}
-
-// >=1.2.3 is lower than >1.2.3
-const higherGT = (a, b, options) => {
-  if (!a)
-    return b
-  const comp = compare(a.semver, b.semver, options)
-  return comp > 0 ? a
-    : comp < 0 ? b
-    : b.operator === '>' && a.operator === '>=' ? b
-    : a
-}
-
-// <=1.2.3 is higher than <1.2.3
-const lowerLT = (a, b, options) => {
-  if (!a)
-    return b
-  const comp = compare(a.semver, b.semver, options)
-  return comp < 0 ? a
-    : comp > 0 ? b
-    : b.operator === '<' && a.operator === '<=' ? b
-    : a
-}
-
-module.exports = subset
-
-
-/***/ }),
-/* 84 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.applyCodeActionCommands = exports.applyCodeAction = exports.getEditForCodeAction = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const typeConverters = __importStar(__webpack_require__(37));
-function getEditForCodeAction(client, action) {
-    return action.changes && action.changes.length
-        ? typeConverters.WorkspaceEdit.fromFileCodeEdits(client, action.changes)
-        : undefined;
-}
-exports.getEditForCodeAction = getEditForCodeAction;
-async function applyCodeAction(client, action) {
-    const workspaceEdit = getEditForCodeAction(client, action);
-    if (workspaceEdit) {
-        if (!(await coc_nvim_1.workspace.applyEdit(workspaceEdit))) {
-            return false;
-        }
-    }
-    return applyCodeActionCommands(client, action);
-}
-exports.applyCodeAction = applyCodeAction;
-async function applyCodeActionCommands(client, action) {
-    // make sure there is command
-    if (action.commands && action.commands.length) {
-        for (const command of action.commands) {
-            const response = await client.execute('applyCodeActionCommand', { command }, vscode_languageserver_protocol_1.CancellationToken.None);
-            if (!response || response.type != 'response' || !response.body) {
-                return false;
-            }
-        }
-    }
-    return true;
-}
-exports.applyCodeActionCommands = applyCodeActionCommands;
-
-
-/***/ }),
-/* 85 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.getParameterListParts = exports.convertCompletionEntry = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const PConst = __importStar(__webpack_require__(39));
-function convertCompletionEntry(tsEntry, uri, position, context) {
-    let label = tsEntry.name;
-    let sortText = tsEntry.sortText;
-    let preselect = false;
-    let detail;
-    if (tsEntry.isRecommended) {
-        preselect = true;
-    }
-    if (tsEntry.source) {
-        // De-prioritze auto-imports https://github.com/Microsoft/vscode/issues/40311
-        sortText = '\uffff' + sortText;
-    }
-    else {
-        sortText = tsEntry.sortText;
-    }
-    let kind = convertKind(tsEntry.kind);
-    let insertTextFormat = (context.enableCallCompletions &&
-        (kind === vscode_languageserver_protocol_1.CompletionItemKind.Function ||
-            kind === vscode_languageserver_protocol_1.CompletionItemKind.Method)) ? vscode_languageserver_protocol_1.InsertTextFormat.Snippet : vscode_languageserver_protocol_1.InsertTextFormat.PlainText;
-    let insertText = tsEntry.insertText;
-    let commitCharacters = getCommitCharacters(tsEntry, context);
-    let textEdit = null;
-    if (tsEntry.replacementSpan) {
-        let { start, end } = tsEntry.replacementSpan;
-        if (start.line == end.line) {
-            textEdit = {
-                range: vscode_languageserver_protocol_1.Range.create(start.line - 1, start.offset - 1, end.line - 1, end.offset - 1),
-                newText: insertText || label
-            };
-        }
-    }
-    if (tsEntry.kindModifiers) {
-        const kindModifiers = new Set(tsEntry.kindModifiers.split(/,|\s+/g));
-        if (kindModifiers.has(PConst.KindModifiers.optional)) {
-            insertText = label;
-            label += '?';
-        }
-        if (kindModifiers.has(PConst.KindModifiers.color)) {
-            kind = vscode_languageserver_protocol_1.CompletionItemKind.Color;
-        }
-        if (tsEntry.kind === PConst.Kind.script) {
-            for (const extModifier of PConst.KindModifiers.fileExtensionKindModifiers) {
-                if (kindModifiers.has(extModifier)) {
-                    if (tsEntry.name.toLowerCase().endsWith(extModifier)) {
-                        detail = tsEntry.name;
-                    }
-                    else {
-                        detail = tsEntry.name + extModifier;
-                    }
-                    break;
-                }
-            }
-        }
-    }
-    return {
-        label,
-        insertText,
-        textEdit,
-        kind,
-        preselect,
-        insertTextFormat,
-        sortText,
-        commitCharacters,
-        detail,
-        data: {
-            uri,
-            position,
-            name: tsEntry.name,
-            source: tsEntry.source || ''
-        }
-    };
-}
-exports.convertCompletionEntry = convertCompletionEntry;
-function convertKind(kind) {
-    switch (kind) {
-        case PConst.Kind.primitiveType:
-        case PConst.Kind.keyword:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Keyword;
-        case PConst.Kind.const:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Constant;
-        case PConst.Kind.let:
-        case PConst.Kind.variable:
-        case PConst.Kind.localVariable:
-        case PConst.Kind.alias:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Variable;
-        case PConst.Kind.memberVariable:
-        case PConst.Kind.memberGetAccessor:
-        case PConst.Kind.memberSetAccessor:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Field;
-        case PConst.Kind.function:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Function;
-        case PConst.Kind.method:
-        case PConst.Kind.constructSignature:
-        case PConst.Kind.callSignature:
-        case PConst.Kind.indexSignature:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Method;
-        case PConst.Kind.enum:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Enum;
-        case PConst.Kind.module:
-        case PConst.Kind.externalModuleName:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Module;
-        case PConst.Kind.class:
-        case PConst.Kind.type:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Class;
-        case PConst.Kind.interface:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Interface;
-        case PConst.Kind.warning:
-        case PConst.Kind.script:
-            return vscode_languageserver_protocol_1.CompletionItemKind.File;
-        case PConst.Kind.directory:
-            return vscode_languageserver_protocol_1.CompletionItemKind.Folder;
-    }
-    return vscode_languageserver_protocol_1.CompletionItemKind.Variable;
-}
-function getCommitCharacters(tsEntry, context) {
-    if (context.isNewIdentifierLocation || !context.isInValidCommitCharacterContext) {
-        return undefined;
-    }
-    const commitCharacters = [];
-    switch (tsEntry.kind) {
-        case PConst.Kind.memberGetAccessor:
-        case PConst.Kind.memberSetAccessor:
-        case PConst.Kind.constructSignature:
-        case PConst.Kind.callSignature:
-        case PConst.Kind.indexSignature:
-        case PConst.Kind.enum:
-        case PConst.Kind.interface:
-            commitCharacters.push('.', ';');
-            break;
-        case PConst.Kind.module:
-        case PConst.Kind.alias:
-        case PConst.Kind.const:
-        case PConst.Kind.let:
-        case PConst.Kind.variable:
-        case PConst.Kind.localVariable:
-        case PConst.Kind.memberVariable:
-        case PConst.Kind.class:
-        case PConst.Kind.function:
-        case PConst.Kind.method:
-        case PConst.Kind.keyword:
-        case PConst.Kind.parameter:
-            commitCharacters.push('.', ',', ';');
-            if (context.enableCallCompletions) {
-                commitCharacters.push('(');
-            }
-            break;
-    }
-    return commitCharacters.length === 0 ? undefined : commitCharacters;
-}
-function getParameterListParts(displayParts) {
-    const parts = [];
-    let isInMethod = false;
-    let hasOptionalParameters = false;
-    let parenCount = 0;
-    let braceCount = 0;
-    outer: for (let i = 0; i < displayParts.length; ++i) {
-        const part = displayParts[i];
-        switch (part.kind) {
-            case PConst.DisplayPartKind.methodName:
-            case PConst.DisplayPartKind.functionName:
-            case PConst.DisplayPartKind.text:
-            case PConst.DisplayPartKind.propertyName:
-                if (parenCount === 0 && braceCount === 0) {
-                    isInMethod = true;
-                }
-                break;
-            case PConst.DisplayPartKind.parameterName:
-                if (parenCount === 1 && braceCount === 0 && isInMethod) {
-                    // Only take top level paren names
-                    const next = displayParts[i + 1];
-                    // Skip optional parameters
-                    const nameIsFollowedByOptionalIndicator = next && next.text === '?';
-                    // Skip this parameter
-                    const nameIsThis = part.text === 'this';
-                    if (!nameIsFollowedByOptionalIndicator && !nameIsThis) {
-                        parts.push(part);
-                    }
-                    hasOptionalParameters = hasOptionalParameters || nameIsFollowedByOptionalIndicator;
-                }
-                break;
-            case PConst.DisplayPartKind.punctuation:
-                if (part.text === '(') {
-                    ++parenCount;
-                }
-                else if (part.text === ')') {
-                    --parenCount;
-                    if (parenCount <= 0 && isInMethod) {
-                        break outer;
-                    }
-                }
-                else if (part.text === '...' && parenCount === 1) {
-                    // Found rest parmeter. Do not fill in any further arguments
-                    hasOptionalParameters = true;
-                    break outer;
-                }
-                else if (part.text === '{') {
-                    ++braceCount;
-                }
-                else if (part.text === '}') {
-                    --braceCount;
-                }
-                break;
-        }
-    }
-    return { hasOptionalParameters, parts };
-}
-exports.getParameterListParts = getParameterListParts;
-
-
-/***/ }),
-/* 86 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.markdownDocumentation = exports.tagsMarkdownPreview = exports.plain = void 0;
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-function getTagBodyText(tag) {
-    if (!tag.text) {
-        return undefined;
-    }
-    switch (tag.name) {
-        case 'example':
-        case 'default':
-            // Convert to markdown code block if it not already one
-            if (tag.text.match(/^\s*[~`]{3}/g)) {
-                return tag.text;
-            }
-            return '```\n' + tag.text + '\n```';
-    }
-    return tag.text;
-}
-function getTagDocumentation(tag) {
-    switch (tag.name) {
-        case 'param':
-            const body = (tag.text || '').split(/^([\w\.]+)\s*/);
-            if (body && body.length === 3) {
-                const param = body[1];
-                const doc = body[2];
-                const label = `*@${tag.name}* \`${param}\``;
-                if (!doc) {
-                    return label;
-                }
-                return label + (doc.match(/\r\n|\n/g) ? '\n' + doc : ` — ${doc}`);
-            }
-    }
-    // Generic tag
-    const label = `*@${tag.name}*`;
-    const text = getTagBodyText(tag);
-    if (!text) {
-        return label;
-    }
-    return label + (text.match(/\r\n|\n/g) ? '\n' + text : ` — ${text}`);
-}
-function plain(parts) {
-    if (!parts || !parts.length)
-        return '';
-    return parts.map(part => part.text).join('');
-}
-exports.plain = plain;
-function tagsMarkdownPreview(tags) {
-    return (tags || []).map(getTagDocumentation).join('  \n\n');
-}
-exports.tagsMarkdownPreview = tagsMarkdownPreview;
-function markdownDocumentation(documentation, tags) {
-    let out = plain(documentation);
-    const tagsPreview = tagsMarkdownPreview(tags);
-    if (tagsPreview) {
-        out = out + ('\n\n' + tagsPreview);
-    }
-    return {
-        kind: vscode_languageserver_protocol_1.MarkupKind.Markdown,
-        value: out
-    };
-}
-exports.markdownDocumentation = markdownDocumentation;
-
-
-/***/ }),
-/* 87 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-class SnippetString {
-    constructor(value) {
-        this._tabstop = 1;
-        this.value = value || '';
-    }
-    static isSnippetString(thing) {
-        if (thing instanceof SnippetString) {
-            return true;
-        }
-        if (!thing) {
-            return false;
-        }
-        return typeof thing.value === 'string';
-    }
-    static _escape(value) {
-        return value.replace(/\$|}|\\/g, '\\$&');
-    }
-    appendText(str) {
-        this.value += SnippetString._escape(str);
-        return this;
-    }
-    appendTabstop(n = this._tabstop++) {
-        this.value += '$';
-        this.value += n;
-        return this;
-    }
-    appendPlaceholder(value, n = this._tabstop++) {
-        if (typeof value === 'function') {
-            const nested = new SnippetString();
-            nested._tabstop = this._tabstop;
-            value(nested);
-            this._tabstop = nested._tabstop;
-            value = nested.value;
-        }
-        else {
-            value = SnippetString._escape(value);
-        }
-        this.value += '${';
-        this.value += n;
-        this.value += ':';
-        this.value += value;
-        this.value += '}';
-        return this;
-    }
-    appendVariable(name, defaultValue) {
-        if (typeof defaultValue === 'function') {
-            const nested = new SnippetString();
-            nested._tabstop = this._tabstop;
-            defaultValue(nested);
-            this._tabstop = nested._tabstop;
-            defaultValue = nested.value;
-        }
-        else if (typeof defaultValue === 'string') {
-            defaultValue = defaultValue.replace(/\$|}/g, '\\$&');
-        }
-        this.value += '${';
-        this.value += name;
-        if (defaultValue) {
-            this.value += ':';
-            this.value += defaultValue;
-        }
-        this.value += '}';
-        return this;
-    }
-}
-exports.default = SnippetString;
-
-
-/***/ }),
-/* 88 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptDefinitionProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async getSymbolLocations(definitionType, document, position, token) {
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath) {
-            return undefined;
-        }
-        const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
-        try {
-            const response = await this.client.execute(definitionType, args, token);
-            const locations = (response.type == 'response' && response.body) || [];
-            return locations.map(location => typeConverters.Location.fromTextSpan(this.client.toResource(location.file), location));
-        }
-        catch (_a) {
-            return [];
-        }
-    }
-    provideDefinition(document, position, token) {
-        return this.getSymbolLocations('definition', document, position, token);
-    }
-    provideTypeDefinition(document, position, token) {
-        return this.getSymbolLocations('typeDefinition', document, position, token);
-    }
-    provideImplementation(document, position, token) {
-        return this.getSymbolLocations('implementation', document, position, token);
-    }
-}
-exports.default = TypeScriptDefinitionProvider;
-
-
-/***/ }),
-/* 89 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const api_1 = __importDefault(__webpack_require__(40));
-const tsDirectives = [
-    {
-        value: '@ts-check',
-        description: 'Enables semantic checking in a JavaScript file. Must be at the top of a file.'
-    },
-    {
-        value: '@ts-nocheck',
-        description: 'Disables semantic checking in a JavaScript file. Must be at the top of a file.'
-    },
-    {
-        value: '@ts-ignore',
-        description: 'Suppresses @ts-check errors on the next line of a file.'
-    }
-];
-const tsDirectives390 = [
-    ...tsDirectives,
-    {
-        value: '@ts-expect-error',
-        description: 'Suppresses @ts-check errors on the next line of a file, expecting at least one to exist.'
-    }
-];
-class DirectiveCommentCompletionProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    provideCompletionItems(document, position, _token, context) {
-        if (context.triggerCharacter != '@') {
-            return [];
-        }
-        const file = this.client.toPath(document.uri);
-        if (!file) {
-            return [];
-        }
-        const doc = coc_nvim_1.workspace.getDocument(document.uri);
-        const line = doc.getline(position.line);
-        const prefix = line.slice(0, position.character);
-        const match = prefix.match(/^\s*\/\/+\s?(@[a-zA-Z\-]*)?$/);
-        if (match) {
-            const directives = this.client.apiVersion.gte(api_1.default.v390)
-                ? tsDirectives390
-                : tsDirectives;
-            let items = directives.map(directive => {
-                const item = vscode_languageserver_protocol_1.CompletionItem.create(directive.value);
-                item.kind = vscode_languageserver_protocol_1.CompletionItemKind.Snippet;
-                item.detail = directive.description;
-                item.textEdit = {
-                    range: vscode_languageserver_protocol_1.Range.create(position.line, Math.max(0, position.character - (match[1] ? match[1].length : 0)), position.line, position.character),
-                    newText: directive.value
-                };
-                return item;
-            });
-            let res = {
-                isIncomplete: false,
-                items
-            };
-            res.startcol = doc.fixStartcol(position, ['@']);
-            return res;
-        }
-        return [];
-    }
-}
-exports.default = DirectiveCommentCompletionProvider;
-
-
-/***/ }),
-/* 90 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const typeConverters = __importStar(__webpack_require__(37));
-const arrays_1 = __webpack_require__(91);
-class TypeScriptDocumentHighlightProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideDocumentHighlights(resource, position, token) {
-        const file = this.client.toPath(resource.uri);
-        if (!file)
-            return [];
-        const args = Object.assign(Object.assign({}, typeConverters.Position.toFileLocationRequestArgs(file, position)), { filesToSearch: [file] });
-        try {
-            const response = await this.client.execute('documentHighlights', args, token);
-            if (response.type !== 'response' || !response.body) {
-                return [];
-            }
-            return arrays_1.flatten(response.body
-                .filter(highlight => highlight.file === file)
-                .map(convertDocumentHighlight));
-        }
-        catch (_e) {
-            return [];
-        }
-    }
-}
-exports.default = TypeScriptDocumentHighlightProvider;
-function convertDocumentHighlight(highlight) {
-    return highlight.highlightSpans.map(span => {
-        return {
-            range: typeConverters.Range.fromTextSpan(span),
-            kind: span.kind === 'writtenReference' ? vscode_languageserver_protocol_1.DocumentHighlightKind.Write : vscode_languageserver_protocol_1.DocumentHighlightKind.Read
-        };
-    });
-}
-
-
-/***/ }),
-/* 91 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.flatten = exports.equals = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-function equals(one, other, itemEquals = (a, b) => a === b) {
-    if (one.length !== other.length) {
-        return false;
-    }
-    for (let i = 0, len = one.length; i < len; i++) {
-        if (!itemEquals(one[i], other[i])) {
-            return false;
-        }
-    }
-    return true;
-}
-exports.equals = equals;
-function flatten(arr) {
-    return [].concat.apply([], arr);
-}
-exports.flatten = flatten;
-
-
-/***/ }),
-/* 92 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const PConst = __importStar(__webpack_require__(39));
-const typeConverters = __importStar(__webpack_require__(37));
-const getSymbolKind = (kind) => {
-    switch (kind) {
-        case PConst.Kind.module:
-            return vscode_languageserver_protocol_1.SymbolKind.Module;
-        case PConst.Kind.class:
-            return vscode_languageserver_protocol_1.SymbolKind.Class;
-        case PConst.Kind.enum:
-            return vscode_languageserver_protocol_1.SymbolKind.Enum;
-        case PConst.Kind.interface:
-            return vscode_languageserver_protocol_1.SymbolKind.Interface;
-        case PConst.Kind.method:
-            return vscode_languageserver_protocol_1.SymbolKind.Method;
-        case PConst.Kind.memberVariable:
-            return vscode_languageserver_protocol_1.SymbolKind.Property;
-        case PConst.Kind.memberGetAccessor:
-            return vscode_languageserver_protocol_1.SymbolKind.Property;
-        case PConst.Kind.memberSetAccessor:
-            return vscode_languageserver_protocol_1.SymbolKind.Property;
-        case PConst.Kind.variable:
-            return vscode_languageserver_protocol_1.SymbolKind.Variable;
-        case PConst.Kind.const:
-            return vscode_languageserver_protocol_1.SymbolKind.Variable;
-        case PConst.Kind.localVariable:
-            return vscode_languageserver_protocol_1.SymbolKind.Variable;
-        case PConst.Kind.variable:
-            return vscode_languageserver_protocol_1.SymbolKind.Variable;
-        case PConst.Kind.constructSignature:
-        case PConst.Kind.constructorImplementation:
-        case PConst.Kind.function:
-        case PConst.Kind.localFunction:
-            return vscode_languageserver_protocol_1.SymbolKind.Function;
-    }
-    return vscode_languageserver_protocol_1.SymbolKind.Variable;
-};
-class TypeScriptDocumentSymbolProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideDocumentSymbols(resource, token) {
-        const filepath = this.client.toPath(resource.uri);
-        if (!filepath)
-            return [];
-        const args = {
-            file: filepath
-        };
-        try {
-            const response = await this.client.execute('navtree', args, token);
-            if (response.type == 'response' && response.body) {
-                // The root represents the file. Ignore this when showing in the UI
-                const tree = response.body;
-                if (tree.childItems) {
-                    const result = new Array();
-                    tree.childItems.forEach(item => TypeScriptDocumentSymbolProvider.convertNavTree(result, item));
-                    return result;
-                }
-            }
-            return [];
-        }
-        catch (e) {
-            return [];
-        }
-    }
-    static convertNavTree(bucket, item) {
-        let shouldInclude = TypeScriptDocumentSymbolProvider.shouldInclueEntry(item);
-        const children = new Set(item.childItems || []);
-        for (const span of item.spans) {
-            const range = typeConverters.Range.fromTextSpan(span);
-            const symbolInfo = vscode_languageserver_protocol_1.DocumentSymbol.create(item.text, '', getSymbolKind(item.kind), range, range);
-            symbolInfo.children = children.size > 0 ? [] : null;
-            for (const child of children) {
-                if (child.spans.some(span => !!containsRange(range, typeConverters.Range.fromTextSpan(span)))) {
-                    const includedChild = TypeScriptDocumentSymbolProvider.convertNavTree(symbolInfo.children, child);
-                    shouldInclude = shouldInclude || includedChild;
-                    children.delete(child);
-                }
-            }
-            if (shouldInclude) {
-                bucket.push(symbolInfo);
-            }
-        }
-        return shouldInclude;
-    }
-    static shouldInclueEntry(item) {
-        if (item.kind === PConst.Kind.alias) {
-            return false;
-        }
-        return !!(item.text &&
-            item.text !== '<function>' &&
-            item.text !== '<class>');
-    }
-}
-exports.default = TypeScriptDocumentSymbolProvider;
-function containsRange(range, otherRange) {
-    if (otherRange.start.line < range.start.line || otherRange.end.line < range.start.line) {
-        return false;
-    }
-    if (otherRange.start.line > range.end.line || otherRange.end.line > range.end.line) {
-        return false;
-    }
-    if (otherRange.start.line === range.start.line && otherRange.start.character < range.start.character) {
-        return false;
-    }
-    if (otherRange.end.line === range.end.line && otherRange.end.character > range.end.character) {
-        return false;
-    }
-    return true;
-}
-
-
-/***/ }),
-/* 93 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const vscode_languageserver_types_1 = __webpack_require__(18);
-const coc_nvim_1 = __webpack_require__(1);
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptFoldingProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideFoldingRanges(document, _context, token) {
-        const file = this.client.toPath(document.uri);
-        if (!file) {
-            return;
-        }
-        const args = { file };
-        const res = await this.client.execute('getOutliningSpans', args, token);
-        if (res.type != 'response') {
-            return;
-        }
-        const { body } = res;
-        if (!body) {
-            return;
-        }
-        return body
-            .map(span => this.convertOutliningSpan(span, document))
-            .filter(foldingRange => !!foldingRange);
-    }
-    convertOutliningSpan(span, document) {
-        const range = typeConverters.Range.fromTextSpan(span.textSpan);
-        const kind = TypeScriptFoldingProvider.getFoldingRangeKind(span);
-        // Workaround for #49904
-        if (span.kind === 'comment') {
-            let doc = coc_nvim_1.workspace.getDocument(document.uri);
-            const line = doc.getline(range.start.line);
-            if (line.match(/\/\/\s*#endregion/gi)) {
-                return undefined;
-            }
-        }
-        let { start, end } = range;
-        return vscode_languageserver_types_1.FoldingRange.create(start.line, end.line, start.character, end.character, kind);
-    }
-    static getFoldingRangeKind(span) {
-        switch (span.kind) {
-            case 'comment':
-            case 'region':
-            case 'imports':
-            case 'code':
-                return span.kind;
-            default:
-                return undefined;
-        }
-    }
-}
-exports.default = TypeScriptFoldingProvider;
-
-
-/***/ }),
-/* 94 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptFormattingProvider {
-    constructor(client, formattingOptionsManager) {
-        this.client = client;
-        this.formattingOptionsManager = formattingOptionsManager;
-    }
-    enabled(document) {
-        return this.formattingOptionsManager.formatEnabled(document);
-    }
-    async doFormat(document, options, args, token) {
-        if (!this.enabled(document))
-            return [];
-        await this.formattingOptionsManager.ensureConfigurationOptions(document, options.insertSpaces, options.tabSize, token);
-        try {
-            const response = await this.client.execute('format', args, token);
-            if (response.type == 'response' && response.body) {
-                let edits = response.body.map(typeConverters.TextEdit.fromCodeEdit);
-                return edits;
-            }
-        }
-        catch (_a) {
-            // noop
-        }
-        return [];
-    }
-    async provideDocumentRangeFormattingEdits(document, range, options, token) {
-        if (!this.enabled(document))
-            return [];
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath)
-            return [];
-        const args = {
-            file: filepath,
-            line: range.start.line + 1,
-            offset: range.start.character + 1,
-            endLine: range.end.line + 1,
-            endOffset: range.end.character + 1
-        };
-        return this.doFormat(document, options, args, token);
-    }
-    async provideDocumentFormattingEdits(document, options, token) {
-        if (!this.enabled(document))
-            return [];
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath)
-            return [];
-        const args = {
-            file: filepath,
-            line: 1,
-            offset: 1,
-            endLine: document.lineCount + 1,
-            endOffset: 1
-        };
-        return this.doFormat(document, options, args, token);
-    }
-    async provideOnTypeFormattingEdits(document, position, ch, options, token) {
-        if (!this.enabled(document))
-            return [];
-        if (!this.client.configuration.formatOnType)
-            return [];
-        const file = this.client.toPath(document.uri);
-        if (!file)
-            return [];
-        await this.formattingOptionsManager.ensureConfigurationOptions(document, options.insertSpaces, options.tabSize, token);
-        const doc = coc_nvim_1.workspace.getDocument(document.uri);
-        const args = Object.assign(Object.assign({}, typeConverters.Position.toFileLocationRequestArgs(file, position)), { key: ch });
-        try {
-            const res = await this.client.execute('formatonkey', args, token);
-            if (res.type != 'response') {
-                return [];
-            }
-            const { body } = res;
-            const edits = body;
-            const result = [];
-            if (!edits) {
-                return result;
-            }
-            for (const edit of edits) {
-                const textEdit = typeConverters.TextEdit.fromCodeEdit(edit);
-                const range = textEdit.range;
-                // Work around for https://github.com/Microsoft/TypeScript/issues/6700.
-                // Check if we have an edit at the beginning of the line which only removes white spaces and leaves
-                // an empty line. Drop those edits
-                if (range.start.character === 0 &&
-                    range.start.line === range.end.line &&
-                    textEdit.newText === '') {
-                    const lText = doc.getline(range.start.line);
-                    // If the edit leaves something on the line keep the edit (note that the end character is exclusive).
-                    // Keep it also if it removes something else than whitespace
-                    if (lText.trim().length > 0 || lText.length > range.end.character) {
-                        result.push(textEdit);
-                    }
-                }
-                else {
-                    result.push(textEdit);
-                }
-            }
-            return result;
-        }
-        catch (_a) {
-            // noop
-        }
-        return [];
-    }
-}
-exports.default = TypeScriptFormattingProvider;
-
-
-/***/ }),
-/* 95 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const previewer_1 = __webpack_require__(86);
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptHoverProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideHover(document, position, token) {
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath) {
-            return undefined;
-        }
-        const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
-        try {
-            const response = await this.client.interruptGetErr(() => this.client.execute('quickinfo', args, token));
-            if (response && response.type == 'response' && response.body) {
-                const data = response.body;
-                return {
-                    contents: TypeScriptHoverProvider.getContents(data),
-                    range: typeConverters.Range.fromTextSpan(data)
-                };
-            }
-        }
-        catch (e) {
-            // noop
-        }
-        return undefined;
-    }
-    static getContents(data) {
-        const parts = [];
-        if (data.displayString) {
-            parts.push({ language: 'typescript', value: data.displayString });
-        }
-        const tags = previewer_1.tagsMarkdownPreview(data.tags);
-        parts.push(data.documentation + (tags ? '\n\n' + tags : ''));
-        return parts;
-    }
-}
-exports.default = TypeScriptHoverProvider;
-
-
-/***/ }),
-/* 96 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const PConst = __importStar(__webpack_require__(39));
-const typeConverters = __importStar(__webpack_require__(37));
-const baseCodeLensProvider_1 = __webpack_require__(35);
-class TypeScriptImplementationsCodeLensProvider extends baseCodeLensProvider_1.TypeScriptBaseCodeLensProvider {
-    async resolveCodeLens(codeLens, token) {
-        let { uri } = codeLens.data;
-        let filepath = this.client.toPath(uri);
-        const args = typeConverters.Position.toFileLocationRequestArgs(filepath, codeLens.range.start);
-        try {
-            const response = await this.client.execute('implementation', args, token, { lowPriority: true });
-            if (response && response.type == 'response' && response.body) {
-                const locations = response.body
-                    .map(reference => {
-                    return {
-                        uri: this.client.toResource(reference.file),
-                        range: {
-                            start: typeConverters.Position.fromLocation(reference.start),
-                            end: {
-                                line: reference.start.line,
-                                character: 0
-                            }
-                        }
-                    };
-                })
-                    // Exclude original from implementations
-                    .filter(location => !(location.uri.toString() === uri &&
-                    location.range.start.line === codeLens.range.start.line &&
-                    location.range.start.character ===
-                        codeLens.range.start.character));
-                codeLens.command = this.getCommand(locations, codeLens);
-                return codeLens;
-            }
-        }
-        catch (_a) {
-            // noop
-        }
-        codeLens.command = {
-            title: '0 implementations',
-            command: ''
-        };
-        return codeLens;
-    }
-    getCommand(locations, codeLens) {
-        let { uri } = codeLens.data;
-        return {
-            title: this.getTitle(locations),
-            command: locations.length ? 'editor.action.showReferences' : '',
-            arguments: [uri, codeLens.range.start, locations]
-        };
-    }
-    getTitle(locations) {
-        return locations.length === 1 ? '1 implementation' : `${locations.length} implementations`;
-    }
-    extractSymbol(document, item, _parent) {
-        switch (item.kind) {
-            case PConst.Kind.interface:
-                return super.getSymbolRange(document, item);
-            case PConst.Kind.class:
-            case PConst.Kind.method:
-            case PConst.Kind.memberVariable:
-            case PConst.Kind.memberGetAccessor:
-            case PConst.Kind.memberSetAccessor:
-                if (item.kindModifiers.match(/\babstract\b/g)) {
-                    return super.getSymbolRange(document, item);
-                }
-                break;
-        }
-        return null;
-    }
-}
-exports.default = TypeScriptImplementationsCodeLensProvider;
-
-
-/***/ }),
-/* 97 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const helper_1 = __webpack_require__(98);
-class ImportFixProvider {
-    constructor(bufferSyncSupport) {
-        this.bufferSyncSupport = bufferSyncSupport;
-    }
-    async provideCodeActions(document, _range, context, _token) {
-        if (this.bufferSyncSupport.hasPendingDiagnostics(document.uri)) {
-            return [];
-        }
-        let diagnostics = context.diagnostics.filter(d => d.code == 2304);
-        if (!diagnostics.length)
-            return [];
-        let edits = [];
-        let names = [];
-        let doc = coc_nvim_1.workspace.getDocument(document.uri);
-        let command;
-        for (const diagnostic of diagnostics) {
-            let { range } = diagnostic;
-            let line = doc.getline(range.start.line);
-            let name = line.slice(range.start.character, range.end.character);
-            if (names.indexOf(name) !== -1)
-                continue;
-            if (helper_1.nodeModules.indexOf(name) !== -1) {
-                names.push(name);
-                edits.push({
-                    range: vscode_languageserver_protocol_1.Range.create(0, 0, 0, 0),
-                    newText: `import ${name} from '${name}'\n`
-                });
-                command = 'tsserver.organizeImports';
-            }
-        }
-        let edit = {
-            changes: {
-                [document.uri]: edits
-            }
-        };
-        let cmd = null;
-        if (command)
-            cmd = {
-                title: `fix import`,
-                command: 'tsserver.organizeImports'
-            };
-        return [{
-                title: `Add import ${names.join(', ')}`,
-                edit,
-                command: cmd
-            }];
-    }
-}
-exports.default = ImportFixProvider;
-
-
-/***/ }),
-/* 98 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.nodeModules = void 0;
-exports.nodeModules = [
-    'assert',
-    'cluster',
-    'crypto',
-    'dns',
-    'domain',
-    'events',
-    'fs',
-    'http',
-    'http2',
-    'https',
-    'inspector',
-    'net',
-    'os',
-    'path',
-    'punycode',
-    'querystring',
-    'readline',
-    'repl',
-    'stream',
-    'string_decoder',
-    'tls',
-    'tty',
-    'url',
-    'util',
-    'v8',
-    'vm',
-    'zlib',
-    'perf_hooks'
-];
-
-
-/***/ }),
-/* 99 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const modules_1 = __webpack_require__(100);
-class InstallModuleCommand {
-    constructor() {
-        this.id = InstallModuleCommand.ID;
-    }
-    async execute(uri, name) {
-        await modules_1.installModules(uri, [name]);
-    }
-}
-InstallModuleCommand.ID = '_tsserver.installModule';
-class InstallModuleProvider {
-    constructor(client) {
-        this.client = client;
-        coc_nvim_1.commands.register(new InstallModuleCommand(), true);
-    }
-    async provideCodeActions(document, _range, context, _token) {
-        const uri = coc_nvim_1.Uri.parse(document.uri);
-        if (uri.scheme != 'file')
-            return null;
-        let { diagnostics } = context;
-        let diags = diagnostics.filter(s => s.code == 2307);
-        let names = diags.map(o => {
-            let ms = o.message.match(/module\s'(.+)'/);
-            return ms ? ms[1] : null;
-        });
-        names = names.filter(s => s != null);
-        if (!names.length)
-            return null;
-        let actions = [];
-        for (let name of names) {
-            let title = `install ${name}`;
-            let command = {
-                title: `install ${name}`,
-                command: InstallModuleCommand.ID,
-                arguments: [document.uri, name]
-            };
-            let codeAction = vscode_languageserver_protocol_1.CodeAction.create(title, command, vscode_languageserver_protocol_1.CodeActionKind.QuickFix);
-            actions.push(codeAction);
-        }
-        return actions;
-    }
-}
-exports.default = InstallModuleProvider;
-
-
-/***/ }),
-/* 100 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.installModules = exports.distinct = exports.moduleExists = exports.runCommand = void 0;
-const child_process_1 = __webpack_require__(101);
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(102));
-const path_1 = __importDefault(__webpack_require__(13));
-function runCommand(cmd, cwd, timeout) {
-    return new Promise((resolve, reject) => {
-        let timer;
-        if (timeout) {
-            timer = setTimeout(() => {
-                reject(new Error(`timeout after ${timeout}s`));
-            }, timeout * 1000);
-        }
-        child_process_1.exec(cmd, { cwd }, (err, stdout) => {
-            if (timer)
-                clearTimeout(timer);
-            if (err) {
-                reject(new Error(`exited with ${err.code}`));
-                return;
-            }
-            resolve(stdout);
-        });
-    });
-}
-exports.runCommand = runCommand;
-async function getManager() {
-    let res = await coc_nvim_1.workspace.findUp(['yarn.lock', 'package-lock.json']);
-    if (!res)
-        return 'yarn';
-    return res.endsWith('yarn.lock') ? 'yarn' : 'npm';
-}
-async function getRoot() {
-    let res = await coc_nvim_1.workspace.findUp(['package.json']);
-    if (!res)
-        return null;
-    return path_1.default.dirname(res);
-}
-async function moduleExists(name) {
-    try {
-        let content = await runCommand(`npm info ${name} --json`, process.cwd());
-        if (!content)
-            return false;
-        let obj = JSON.parse(content);
-        if (obj.error != null)
-            return false;
-        return true;
-    }
-    catch (e) {
-        return false;
-    }
-    return false;
-}
-exports.moduleExists = moduleExists;
-/**
- * Removes duplicates from the given array. The optional keyFn allows to specify
- * how elements are checked for equalness by returning a unique string for each.
- */
-function distinct(array, keyFn) {
-    if (!keyFn) {
-        return array.filter((element, position) => {
-            return array.indexOf(element) === position;
-        });
-    }
-    const seen = Object.create(null);
-    return array.filter(elem => {
-        const key = keyFn(elem);
-        if (seen[key]) {
-            return false;
-        }
-        seen[key] = true;
-        return true;
-    });
-}
-exports.distinct = distinct;
-async function installModules(uri, names) {
-    names = distinct(names);
-    let workspaceFolder = coc_nvim_1.workspace.getWorkspaceFolder(uri);
-    let root = workspaceFolder ? coc_nvim_1.Uri.parse(workspaceFolder.uri).fsPath : undefined;
-    if (!root || !fs_1.default.existsSync(path_1.default.join(root, 'package.json'))) {
-        coc_nvim_1.workspace.showMessage(`package.json not found from workspaceFolder: ${root}`, 'error');
-        return;
-    }
-    let arr = names.concat(names.map(s => `@types/${s}`));
-    let statusItem = coc_nvim_1.workspace.createStatusBarItem(99, { progress: true });
-    statusItem.text = `Checking module ${arr.join(' ')}`;
-    statusItem.show();
-    let exists = await Promise.all(arr.map(name => {
-        return moduleExists(name).then(exists => {
-            return exists ? name : null;
-        });
-    }));
-    let manager = await getManager();
-    exists = exists.filter(s => s != null);
-    if (!exists.length)
-        return;
-    let devs = exists.filter(s => s.startsWith('@types'));
-    let deps = exists.filter(s => devs.indexOf(s) == -1);
-    statusItem.text = `Installing ${exists.join(' ')}`;
-    try {
-        let cmd = manager == 'npm' ? `npm i ${deps.join(' ')}` : `yarn add ${deps.join(' ')}`;
-        await runCommand(cmd, root);
-        cmd = manager == 'npm' ? `npm i ${deps.join(' ')} --save-dev` : `yarn add ${deps.join(' ')} --save-dev`;
-        await runCommand(cmd, root);
-    }
-    catch (e) {
-        statusItem.dispose();
-        coc_nvim_1.workspace.showMessage(`Install error ${e.message}`, 'error');
-        return;
-    }
-    statusItem.dispose();
-    coc_nvim_1.workspace.showMessage(`Installed: ${exists.join(' ')}`, 'more');
-}
-exports.installModules = installModules;
-
-
-/***/ }),
-/* 101 */
-/***/ (function(module, exports) {
-
-module.exports = require("child_process");
-
-/***/ }),
-/* 102 */
-/***/ (function(module, exports) {
-
-module.exports = require("fs");
-
-/***/ }),
-/* 103 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const api_1 = __importDefault(__webpack_require__(40));
-const codeAction_1 = __webpack_require__(84);
-const typeConverters = __importStar(__webpack_require__(37));
-class ApplyCodeActionCommand {
-    constructor(client, formattingConfigurationManager) {
-        this.client = client;
-        this.formattingConfigurationManager = formattingConfigurationManager;
-        this.id = ApplyCodeActionCommand.ID;
-    }
-    async execute(action) {
-        return codeAction_1.applyCodeActionCommands(this.client, action);
-    }
-}
-ApplyCodeActionCommand.ID = '_typescript.applyCodeActionCommand';
-class ApplyFixAllCodeAction {
-    constructor(client, formattingConfigurationManager) {
-        this.client = client;
-        this.formattingConfigurationManager = formattingConfigurationManager;
-        this.id = ApplyFixAllCodeAction.ID;
-    }
-    async execute(document, file, tsAction) {
-        if (!tsAction.fixId) {
-            return;
-        }
-        await this.formattingConfigurationManager.ensureConfigurationForDocument(document, vscode_languageserver_protocol_1.CancellationToken.None);
-        const args = {
-            scope: {
-                type: 'file',
-                args: { file }
-            },
-            fixId: tsAction.fixId
-        };
-        try {
-            const res = await this.client.execute('getCombinedCodeFix', args, vscode_languageserver_protocol_1.CancellationToken.None);
-            if (res.type != 'response') {
-                return;
-            }
-            let { body } = res;
-            const edit = typeConverters.WorkspaceEdit.fromFileCodeEdits(this.client, body.changes);
-            await coc_nvim_1.workspace.applyEdit(edit);
-            const token = vscode_languageserver_protocol_1.CancellationToken.None;
-            const { commands } = body;
-            if (commands && commands.length) {
-                for (const command of commands) {
-                    await this.client.execute('applyCodeActionCommand', { command }, token);
-                }
-            }
-        }
-        catch (_a) {
-            // noop
-        }
-    }
-}
-ApplyFixAllCodeAction.ID = '_typescript.applyFixAllCodeAction';
-/**
- * Unique set of diagnostics keyed on diagnostic range and error code.
- */
-class DiagnosticsSet {
-    constructor(_values) {
-        this._values = _values;
-    }
-    static from(diagnostics) {
-        const values = new Map();
-        for (const diagnostic of diagnostics) {
-            values.set(DiagnosticsSet.key(diagnostic), diagnostic);
-        }
-        return new DiagnosticsSet(values);
-    }
-    static key(diagnostic) {
-        const { start, end } = diagnostic.range;
-        return `${diagnostic.code}-${start.line},${start.character}-${end.line},${end.character}`;
-    }
-    get values() {
-        return this._values.values();
-    }
-}
-class SupportedCodeActionProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async getFixableDiagnosticsForContext(context) {
-        const supportedActions = await this.supportedCodeActions;
-        const fixableDiagnostics = DiagnosticsSet.from(context.diagnostics.filter(diagnostic => supportedActions.has(+diagnostic.code)));
-        return Array.from(fixableDiagnostics.values);
-    }
-    get supportedCodeActions() {
-        if (!this._supportedCodeActions) {
-            return new Promise((resolve, reject) => {
-                this.client.execute('getSupportedCodeFixes', null, vscode_languageserver_protocol_1.CancellationToken.None).then(res => {
-                    if (res.type !== 'response') {
-                        resolve(new Set());
-                        return;
-                    }
-                    let codes = res.body.map(code => +code).filter(code => !isNaN(code));
-                    resolve(new Set(codes));
-                }, reject);
-            });
-        }
-        return Promise.resolve(this._supportedCodeActions);
-    }
-}
-class TypeScriptQuickFixProvider {
-    constructor(client, formattingConfigurationManager) {
-        this.client = client;
-        this.formattingConfigurationManager = formattingConfigurationManager;
-        coc_nvim_1.commands.register(new ApplyCodeActionCommand(client, formattingConfigurationManager));
-        coc_nvim_1.commands.register(new ApplyFixAllCodeAction(client, formattingConfigurationManager));
-        this.supportedCodeActionProvider = new SupportedCodeActionProvider(client);
-    }
-    async provideCodeActions(document, _range, context, token) {
-        const file = this.client.toPath(document.uri);
-        if (!file) {
-            return [];
-        }
-        await this.formattingConfigurationManager.ensureConfigurationForDocument(document, token);
-        const fixableDiagnostics = await this.supportedCodeActionProvider.getFixableDiagnosticsForContext(context);
-        if (!fixableDiagnostics.length) {
-            return [];
-        }
-        if (this.client.bufferSyncSupport.hasPendingDiagnostics(document.uri)) {
-            return [];
-        }
-        const results = [];
-        for (const diagnostic of fixableDiagnostics) {
-            results.push(...(await this.getFixesForDiagnostic(document, file, diagnostic, token)));
-        }
-        return results;
-    }
-    async getFixesForDiagnostic(document, file, diagnostic, token) {
-        const args = Object.assign(Object.assign({}, typeConverters.Range.toFileRangeRequestArgs(file, diagnostic.range)), { errorCodes: [+diagnostic.code] });
-        const codeFixesResponse = await this.client.execute('getCodeFixes', args, token);
-        if (codeFixesResponse.type != 'response') {
-            return [];
-        }
-        if (codeFixesResponse.body) {
-            const results = [];
-            for (const tsCodeFix of codeFixesResponse.body) {
-                results.push(...(await this.getAllFixesForTsCodeAction(document, file, diagnostic, tsCodeFix)));
-            }
-            return results;
-        }
-        return [];
-    }
-    async getAllFixesForTsCodeAction(document, file, diagnostic, tsAction) {
-        const singleFix = this.getSingleFixForTsCodeAction(diagnostic, tsAction);
-        const fixAll = await this.getFixAllForTsCodeAction(document, file, diagnostic, tsAction);
-        return fixAll ? [singleFix, fixAll] : [singleFix];
-    }
-    getSingleFixForTsCodeAction(diagnostic, tsAction) {
-        const codeAction = {
-            title: tsAction.description,
-            kind: vscode_languageserver_protocol_1.CodeActionKind.QuickFix
-        };
-        codeAction.edit = codeAction_1.getEditForCodeAction(this.client, tsAction);
-        codeAction.diagnostics = [diagnostic];
-        codeAction.isPreferred = true;
-        if (tsAction.commands) {
-            codeAction.command = {
-                command: ApplyCodeActionCommand.ID,
-                arguments: [tsAction],
-                title: tsAction.description
-            };
-        }
-        return codeAction;
-    }
-    async getFixAllForTsCodeAction(document, file, diagnostic, tsAction) {
-        if (!tsAction.fixId || !this.client.apiVersion.gte(api_1.default.v270)) {
-            return undefined;
-        }
-        // Make sure there are multiple diagnostics of the same type in the file
-        if (!this.client.diagnosticsManager
-            .getDiagnostics(document.uri)
-            .some(x => x.code === diagnostic.code && x !== diagnostic)) {
-            return;
-        }
-        const action = {
-            title: tsAction.fixAllDescription || 'Fix all in file',
-            kind: vscode_languageserver_protocol_1.CodeActionKind.QuickFix
-        };
-        action.diagnostics = [diagnostic];
-        action.command = {
-            command: ApplyFixAllCodeAction.ID,
-            arguments: [document, file, tsAction],
-            title: ''
-        };
-        return action;
-    }
-}
-exports.default = TypeScriptQuickFixProvider;
-
-
-/***/ }),
-/* 104 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const typeConverters = __importStar(__webpack_require__(37));
-class ApplyRefactoringCommand {
-    constructor(client) {
-        this.client = client;
-        this.id = ApplyRefactoringCommand.ID;
-    }
-    async execute(document, file, refactor, action, range) {
-        const args = Object.assign(Object.assign({}, typeConverters.Range.toFileRangeRequestArgs(file, range)), { refactor,
-            action });
-        const response = await this.client.execute('getEditsForRefactor', args, vscode_languageserver_protocol_1.CancellationToken.None);
-        const body = response && response.body;
-        if (!body || !body.edits.length) {
-            return false;
-        }
-        const workspaceEdit = await this.toWorkspaceEdit(body);
-        if (!(await coc_nvim_1.workspace.applyEdit(workspaceEdit))) {
-            return false;
-        }
-        const renameLocation = body.renameLocation;
-        if (renameLocation) {
-            coc_nvim_1.commands.executeCommand('editor.action.rename', document.uri, typeConverters.Position.fromLocation(renameLocation));
-        }
-        return true;
-    }
-    async toWorkspaceEdit(body) {
-        for (const edit of body.edits) {
-            await coc_nvim_1.workspace.createFile(edit.fileName, { ignoreIfExists: true });
-        }
-        let workspaceEdit = typeConverters.WorkspaceEdit.fromFileCodeEdits(this.client, body.edits);
-        return workspaceEdit;
-    }
-}
-ApplyRefactoringCommand.ID = '_typescript.applyRefactoring';
-class SelectRefactorCommand {
-    constructor(doRefactoring) {
-        this.doRefactoring = doRefactoring;
-        this.id = SelectRefactorCommand.ID;
-    }
-    async execute(document, file, info, range) {
-        let { actions } = info;
-        const idx = actions.length == 1 ? 0 : await coc_nvim_1.workspace.showQuickpick(actions.map(action => action.description || action.name));
-        if (idx == -1)
-            return false;
-        let label = info.actions[idx].name;
-        if (!label)
-            return false;
-        return this.doRefactoring.execute(document, file, info.name, label, range);
-    }
-}
-SelectRefactorCommand.ID = '_typescript.selectRefactoring';
-class TypeScriptRefactorProvider {
-    constructor(client, formattingOptionsManager) {
-        this.client = client;
-        this.formattingOptionsManager = formattingOptionsManager;
-        const doRefactoringCommand = coc_nvim_1.commands.register(new ApplyRefactoringCommand(this.client));
-        coc_nvim_1.commands.register(new SelectRefactorCommand(doRefactoringCommand));
-    }
-    async provideCodeActions(document, range, context, token) {
-        if (!this.shouldTrigger(context)) {
-            return undefined;
-        }
-        const file = this.client.toPath(document.uri);
-        if (!file)
-            return undefined;
-        await this.formattingOptionsManager.ensureConfigurationForDocument(document, token);
-        const args = typeConverters.Range.toFileRangeRequestArgs(file, range);
-        let response;
-        try {
-            response = await this.client.interruptGetErr(() => {
-                return this.client.execute('getApplicableRefactors', args, token);
-            });
-            if (!response || !response.body) {
-                return undefined;
-            }
-        }
-        catch (_a) {
-            return undefined;
-        }
-        return this.convertApplicableRefactors(response.body, document, file, range, context.only && context.only.some(v => v.includes(vscode_languageserver_protocol_1.CodeActionKind.Refactor)));
-    }
-    convertApplicableRefactors(body, document, file, rangeOrSelection, setPrefrred) {
-        const actions = [];
-        for (const info of body) {
-            // ignore not refactor that not applicable
-            if (info.notApplicableReason)
-                continue;
-            if (!info.inlineable) {
-                const codeAction = {
-                    title: info.description,
-                    kind: vscode_languageserver_protocol_1.CodeActionKind.Refactor
-                };
-                codeAction.command = {
-                    title: info.description,
-                    command: SelectRefactorCommand.ID,
-                    arguments: [document, file, info, rangeOrSelection]
-                };
-                actions.push(codeAction);
-            }
-            else {
-                for (const action of info.actions) {
-                    let codeAction = this.refactorActionToCodeAction(action, document, file, info, rangeOrSelection);
-                    if (setPrefrred) {
-                        codeAction.isPreferred = TypeScriptRefactorProvider.isPreferred(action, info.actions);
-                    }
-                    actions.push(codeAction);
-                }
-            }
-        }
-        return actions;
-    }
-    refactorActionToCodeAction(action, document, file, info, rangeOrSelection) {
-        const codeAction = {
-            title: action.description,
-            kind: TypeScriptRefactorProvider.getKind(action)
-        };
-        codeAction.command = {
-            title: action.description,
-            command: ApplyRefactoringCommand.ID,
-            arguments: [document, file, info.name, action.name, rangeOrSelection]
-        };
-        return codeAction;
-    }
-    shouldTrigger(context) {
-        if (context.only &&
-            context.only.every(o => !o.includes(vscode_languageserver_protocol_1.CodeActionKind.Refactor))) {
-            return false;
-        }
-        return true;
-    }
-    static getKind(refactor) {
-        if (refactor.name.startsWith('function_')) {
-            return TypeScriptRefactorProvider.extractFunctionKind;
-        }
-        else if (refactor.name.startsWith('constant_')) {
-            return TypeScriptRefactorProvider.extractConstantKind;
-        }
-        else if (refactor.name.startsWith('Move')) {
-            return TypeScriptRefactorProvider.moveKind;
-        }
-        return vscode_languageserver_protocol_1.CodeActionKind.Refactor;
-    }
-    static isPreferred(action, allActions) {
-        let kind = TypeScriptRefactorProvider.getKind(action);
-        if (TypeScriptRefactorProvider.extractConstantKind == kind) {
-            // Only mark the action with the lowest scope as preferred
-            const getScope = (name) => {
-                var _a;
-                const scope = (_a = name.match(/scope_(\d)/)) === null || _a === void 0 ? void 0 : _a[1];
-                return scope ? +scope : undefined;
-            };
-            const scope = getScope(action.name);
-            if (typeof scope !== 'number') {
-                return false;
-            }
-            return allActions
-                .filter(otherAtion => otherAtion !== action && otherAtion.name.startsWith('constant_'))
-                .every(otherAction => {
-                const otherScope = getScope(otherAction.name);
-                return typeof otherScope === 'number' ? scope < otherScope : true;
-            });
-        }
-        let { name } = action;
-        if (name.startsWith('Extract to type alias') || name.startsWith('Extract to interface')) {
-            return true;
-        }
-        return false;
-    }
-}
-exports.default = TypeScriptRefactorProvider;
-TypeScriptRefactorProvider.extractFunctionKind = vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract + '.function';
-TypeScriptRefactorProvider.extractConstantKind = vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract + '.constant';
-TypeScriptRefactorProvider.moveKind = vscode_languageserver_protocol_1.CodeActionKind.Refactor + '.move';
-TypeScriptRefactorProvider.metadata = {
-    providedCodeActionKinds: [vscode_languageserver_protocol_1.CodeActionKind.Refactor]
-};
-
-
-/***/ }),
-/* 105 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptReferences {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideReferences(document, position, context, token) {
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath)
-            return [];
-        const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
-        try {
-            const msg = await this.client.execute('references', args, token);
-            if (!msg || msg.type != 'response' || !msg.body) {
-                return [];
-            }
-            const result = [];
-            for (const ref of msg.body.refs) {
-                if (!context.includeDeclaration && ref.isDefinition) {
-                    continue;
-                }
-                const url = this.client.toResource(ref.file);
-                const location = typeConverters.Location.fromTextSpan(url, ref);
-                result.push(location);
-            }
-            return result;
-        }
-        catch (_a) {
-            return [];
-        }
-    }
-}
-exports.default = TypeScriptReferences;
-
-
-/***/ }),
-/* 106 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const PConst = __importStar(__webpack_require__(39));
-const typeConverters = __importStar(__webpack_require__(37));
-const baseCodeLensProvider_1 = __webpack_require__(35);
-class TypeScriptReferencesCodeLensProvider extends baseCodeLensProvider_1.TypeScriptBaseCodeLensProvider {
-    resolveCodeLens(codeLens, token) {
-        let { uri } = codeLens.data;
-        let filepath = this.client.toPath(uri);
-        const args = typeConverters.Position.toFileLocationRequestArgs(filepath, codeLens.range.start);
-        return this.client
-            .execute('references', args, token, {
-            lowPriority: true
-        })
-            .then(response => {
-            if (!response || response.type != 'response' || !response.body) {
-                throw codeLens;
-            }
-            const locations = response.body.refs
-                .map(reference => typeConverters.Location.fromTextSpan(this.client.toResource(reference.file), reference))
-                .filter(location => 
-            // Exclude original definition from references
-            !(location.uri.toString() === uri &&
-                location.range.start.line === codeLens.range.start.line &&
-                location.range.start.character ===
-                    codeLens.range.start.character));
-            codeLens.command = {
-                title: locations.length === 1 ? '1 reference' : `${locations.length} references`,
-                command: locations.length ? 'editor.action.showReferences' : '',
-                arguments: [uri, codeLens.range.start, locations]
-            };
-            return codeLens;
-        })
-            .catch(() => {
-            codeLens.command = {
-                title: '0 references',
-                command: ''
-            };
-            return codeLens;
-        });
-    }
-    extractSymbol(document, item, parent) {
-        if (parent && parent.kind === PConst.Kind.enum) {
-            return super.getSymbolRange(document, item);
-        }
-        switch (item.kind) {
-            case PConst.Kind.const:
-            case PConst.Kind.let:
-            case PConst.Kind.variable:
-            case PConst.Kind.function:
-                // Only show references for exported variables
-                if (!item.kindModifiers.match(/\bexport\b/)) {
-                    break;
-                }
-            // fallthrough
-            case PConst.Kind.class:
-                if (item.text === '<class>') {
-                    break;
-                }
-            // fallthrough
-            case PConst.Kind.method:
-            case PConst.Kind.memberVariable:
-            case PConst.Kind.memberGetAccessor:
-            case PConst.Kind.memberSetAccessor:
-            case PConst.Kind.constructorImplementation:
-            case PConst.Kind.interface:
-            case PConst.Kind.type:
-            case PConst.Kind.enum:
-                return super.getSymbolRange(document, item);
-        }
-        return null;
-    }
-}
-exports.default = TypeScriptReferencesCodeLensProvider;
-
-
-/***/ }),
-/* 107 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const path_1 = __importDefault(__webpack_require__(13));
-const api_1 = __importDefault(__webpack_require__(40));
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptRenameProvider {
-    constructor(client, fileConfigurationManager) {
-        this.client = client;
-        this.fileConfigurationManager = fileConfigurationManager;
-    }
-    async prepareRename(document, position, token) {
-        const response = await this.execRename(document, position, token);
-        if (!response || response.type !== 'response' || !response.body) {
-            return null;
-        }
-        const renameInfo = response.body.info;
-        if (!renameInfo.canRename) {
-            return Promise.reject(new Error('Invalid location for rename.'));
-        }
-        if (this.client.apiVersion.gte(api_1.default.v310)) {
-            const triggerSpan = renameInfo.triggerSpan;
-            if (triggerSpan) {
-                const range = typeConverters.Range.fromTextSpan(triggerSpan);
-                return range;
-            }
-        }
-        return null;
-    }
-    async provideRenameEdits(document, position, newName, token) {
-        const response = await this.execRename(document, position, token);
-        if (!response || response.type !== 'response' || !response.body) {
-            return null;
-        }
-        const renameInfo = response.body.info;
-        if (!renameInfo.canRename) {
-            return Promise.reject(new Error('Invalid location for rename.'));
-        }
-        if (this.client.apiVersion.gte(api_1.default.v310)) {
-            if (renameInfo.fileToRename) {
-                const edits = await this.renameFile(renameInfo.fileToRename, newName, token);
-                if (edits) {
-                    return edits;
-                }
-                else {
-                    return Promise.reject(new Error('An error occurred while renaming file'));
-                }
-            }
-        }
-        return this.toWorkspaceEdit(response.body.locs, newName);
-    }
-    async execRename(document, position, token) {
-        const file = this.client.toPath(document.uri);
-        if (!file)
-            return undefined;
-        const args = Object.assign(Object.assign({}, typeConverters.Position.toFileLocationRequestArgs(file, position)), { findInStrings: false, findInComments: false });
-        await this.fileConfigurationManager.ensureConfigurationForDocument(document, token);
-        return this.client.interruptGetErr(() => {
-            return this.client.execute('rename', args, token);
-        });
-    }
-    toWorkspaceEdit(locations, newName) {
-        let changes = {};
-        for (const spanGroup of locations) {
-            const uri = this.client.toResource(spanGroup.file);
-            if (uri) {
-                changes[uri] = [];
-                for (const textSpan of spanGroup.locs) {
-                    changes[uri].push({
-                        range: typeConverters.Range.fromTextSpan(textSpan),
-                        newText: (textSpan.prefixText || '') + newName + (textSpan.suffixText || '')
-                    });
-                }
-            }
-        }
-        return { changes };
-    }
-    async renameFile(fileToRename, newName, token) {
-        // Make sure we preserve file exension if none provided
-        if (!path_1.default.extname(newName)) {
-            newName += path_1.default.extname(fileToRename);
-        }
-        const dirname = path_1.default.dirname(fileToRename);
-        const newFilePath = path_1.default.join(dirname, newName);
-        const args = {
-            file: fileToRename,
-            oldFilePath: fileToRename,
-            newFilePath
-        };
-        const response = await this.client.execute('getEditsForFileRename', args, token);
-        if (response.type !== 'response' || !response.body) {
-            return undefined;
-        }
-        const edits = typeConverters.WorkspaceEdit.fromFileCodeEdits(this.client, response.body);
-        edits.documentChanges = edits.documentChanges || [];
-        edits.documentChanges.push({
-            kind: 'rename',
-            oldUri: coc_nvim_1.Uri.file(fileToRename).toString(),
-            newUri: coc_nvim_1.Uri.file(newFilePath).toString(),
-            options: {
-                overwrite: false,
-                ignoreIfExists: true
-            }
-        });
-        return edits;
-    }
-}
-exports.default = TypeScriptRenameProvider;
-
-
-/***/ }),
-/* 108 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const Previewer = __importStar(__webpack_require__(86));
-const typeConverters = __importStar(__webpack_require__(37));
-class TypeScriptSignatureHelpProvider {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideSignatureHelp(document, position, token) {
-        const filepath = this.client.toPath(document.uri);
-        if (!filepath) {
-            return undefined;
-        }
-        const args = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
-        let response;
-        try {
-            response = await this.client.interruptGetErr(() => this.client.execute('signatureHelp', args, token));
-        }
-        catch (e) {
-            return undefined;
-        }
-        if (response.type !== 'response' || !response.body) {
-            return undefined;
-        }
-        let info = response.body;
-        const result = {
-            activeSignature: info.selectedItemIndex,
-            activeParameter: this.getActiveParmeter(info),
-            signatures: info.items.map(signature => {
-                return this.convertSignature(signature);
-            })
-        };
-        return result;
-    }
-    getActiveParmeter(info) {
-        const activeSignature = info.items[info.selectedItemIndex];
-        if (activeSignature && activeSignature.isVariadic) {
-            return Math.min(info.argumentIndex, activeSignature.parameters.length - 1);
-        }
-        return info.argumentIndex;
-    }
-    convertSignature(item) {
-        let parameters = item.parameters.map(p => {
-            return {
-                label: Previewer.plain(p.displayParts),
-                documentation: Previewer.markdownDocumentation(p.documentation, [])
-            };
-        });
-        let label = Previewer.plain(item.prefixDisplayParts);
-        label += parameters.map(parameter => parameter.label).join(Previewer.plain(item.separatorDisplayParts));
-        label += Previewer.plain(item.suffixDisplayParts);
-        return {
-            label,
-            documentation: Previewer.markdownDocumentation(item.documentation, item.tags.filter(x => x.name !== 'param')),
-            parameters
-        };
-    }
-}
-exports.default = TypeScriptSignatureHelpProvider;
-TypeScriptSignatureHelpProvider.triggerCharacters = ['(', ',', '<'];
-
-
-/***/ }),
-/* 109 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const typeConverters = __importStar(__webpack_require__(37));
-class SmartSelection {
-    constructor(client) {
-        this.client = client;
-    }
-    async provideSelectionRanges(document, positions, token) {
-        const file = this.client.toPath(document.uri);
-        if (!file) {
-            return undefined;
-        }
-        const args = {
-            file,
-            locations: positions.map(typeConverters.Position.toLocation)
-        };
-        const response = await this.client.execute('selectionRange', args, token);
-        if (response.type !== 'response' || !response.body) {
-            return undefined;
-        }
-        return response.body.map(SmartSelection.convertSelectionRange);
-    }
-    static convertSelectionRange(selectionRange) {
-        return {
-            range: typeConverters.Range.fromTextSpan(selectionRange.textSpan),
-            parent: selectionRange.parent ? SmartSelection.convertSelectionRange(selectionRange.parent) : undefined,
-        };
-    }
-}
-exports.default = SmartSelection;
-
-
-/***/ }),
-/* 110 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const typeConverters = __importStar(__webpack_require__(37));
-const mutex_1 = __webpack_require__(111);
-function wait(ms) {
-    return new Promise(resolve => {
-        setTimeout(() => {
-            resolve();
-        }, ms);
-    });
-}
-class UpdateImportsOnFileRenameHandler {
-    constructor(client, fileConfigurationManager, languageId) {
-        this.client = client;
-        this.fileConfigurationManager = fileConfigurationManager;
-        this.disposables = [];
-        let glob = languageId == 'typescript' ? '**/*.{ts,tsx}' : '**/*.{js,jsx}';
-        const watcher = coc_nvim_1.workspace.createFileSystemWatcher(glob);
-        this.disposables.push(watcher);
-        let mutex = new mutex_1.Mutex();
-        watcher.onDidRename(async (e) => {
-            let release = await mutex.acquire();
-            try {
-                await this.doRename(e.oldUri, e.newUri);
-                release();
-            }
-            catch (e) {
-                this.client.logger.error('Error on rename:', e);
-                release();
-            }
-        }, null, this.disposables);
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-    }
-    async doRename(oldResource, newResource) {
-        if (oldResource.scheme !== 'file' || newResource.scheme !== 'file') {
-            return;
-        }
-        const targetFile = newResource.fsPath;
-        const oldFile = oldResource.fsPath;
-        const newUri = newResource.toString();
-        let oldDocument = coc_nvim_1.workspace.getDocument(oldResource.toString());
-        if (oldDocument) {
-            await coc_nvim_1.workspace.nvim.command(`silent ${oldDocument.bufnr}bwipeout!`);
-        }
-        let document = coc_nvim_1.workspace.getDocument(newUri);
-        if (document) {
-            await coc_nvim_1.workspace.nvim.command(`silent ${document.bufnr}bwipeout!`);
-            await wait(30);
-        }
-        document = await coc_nvim_1.workspace.loadFile(newUri);
-        if (!document)
-            return;
-        await wait(50);
-        const edits = await this.getEditsForFileRename(document.textDocument, oldFile, targetFile);
-        if (!edits)
-            return;
-        if (await this.promptUser(newResource)) {
-            await coc_nvim_1.workspace.applyEdit(edits);
-        }
-    }
-    async promptUser(newResource) {
-        return await coc_nvim_1.workspace.showPrompt(`Update imports for moved file: ${newResource.fsPath}?`);
-    }
-    async getEditsForFileRename(document, oldFile, newFile) {
-        await this.fileConfigurationManager.ensureConfigurationForDocument(document, vscode_languageserver_protocol_1.CancellationToken.None);
-        const response = await this.client.interruptGetErr(() => {
-            const args = {
-                oldFilePath: oldFile,
-                newFilePath: newFile,
-            };
-            return this.client.execute('getEditsForFileRename', args, vscode_languageserver_protocol_1.CancellationToken.None);
-        });
-        if (!response || response.type != 'response' || !response.body) {
-            return;
-        }
-        const edits = [];
-        for (const edit of response.body) {
-            // Workaround for https://github.com/Microsoft/vscode/issues/52675
-            if (edit.fileName.match(/[\/\\]node_modules[\/\\]/gi)) {
-                continue;
-            }
-            for (const change of edit.textChanges) {
-                if (change.newText.match(/\/node_modules\//gi)) {
-                    continue;
-                }
-            }
-            edits.push(edit);
-        }
-        return typeConverters.WorkspaceEdit.fromFileCodeEdits(this.client, edits);
-    }
-}
-exports.default = UpdateImportsOnFileRenameHandler;
-
-
-/***/ }),
-/* 111 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.Mutex = void 0;
-class Mutex {
-    constructor() {
-        this.tasks = [];
-        this.count = 1;
-    }
-    sched() {
-        if (this.count > 0 && this.tasks.length > 0) {
-            this.count--;
-            let next = this.tasks.shift();
-            next();
-        }
-    }
-    get busy() {
-        return this.count == 0;
-    }
-    // tslint:disable-next-line: typedef
-    acquire() {
-        return new Promise(res => {
-            let task = () => {
-                let released = false;
-                res(() => {
-                    if (!released) {
-                        released = true;
-                        this.count++;
-                        this.sched();
-                    }
-                });
-            };
-            this.tasks.push(task);
-            process.nextTick(this.sched.bind(this));
-        });
-    }
-    use(f) {
-        return this.acquire()
-            .then(release => {
-            return f()
-                .then(res => {
-                release();
-                return res;
-            })
-                .catch(err => {
-                release();
-                throw err;
-            });
-        });
-    }
-}
-exports.Mutex = Mutex;
-
-
-/***/ }),
-/* 112 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.OrganizeImportsCodeActionProvider = exports.OrganizeImportsCommand = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const typeconverts = __importStar(__webpack_require__(37));
-class OrganizeImportsCommand {
-    constructor(service) {
-        this.service = service;
-        this.id = 'tsserver.organizeImports';
-    }
-    async _execute(client, document) {
-        let file = client.toPath(document.uri);
-        const args = {
-            scope: {
-                type: 'file',
-                args: {
-                    file
-                }
-            }
-        };
-        const response = await client.interruptGetErr(() => client.execute('organizeImports', args, vscode_languageserver_protocol_1.CancellationToken.None));
-        if (!response || response.type != 'response' || !response.success) {
-            return;
-        }
-        const edit = typeconverts.WorkspaceEdit.fromFileCodeEdits(client, response.body);
-        let keys = Object.keys(edit.changes);
-        if (keys.length == 1) {
-            let doc = coc_nvim_1.workspace.getDocument(keys[0]);
-            if (doc) {
-                await doc.applyEdits(edit.changes[keys[0]]);
-                return;
-            }
-        }
-        if (edit)
-            await coc_nvim_1.workspace.applyEdit(edit);
-    }
-    async execute(document) {
-        let client = await this.service.getClientHost();
-        if (!document) {
-            let doc = await coc_nvim_1.workspace.document;
-            if (!doc.attached) {
-                throw new Error(`Document not attached.`);
-            }
-            if (client.serviceClient.modeIds.indexOf(doc.filetype) == -1) {
-                throw new Error(`filetype "${doc.filetype}" not supported by tsserver.`);
-            }
-            document = doc.textDocument;
-        }
-        await this._execute(client.serviceClient, document);
-    }
-}
-exports.OrganizeImportsCommand = OrganizeImportsCommand;
-class OrganizeImportsCodeActionProvider {
-    // public static readonly minVersion = API.v280
-    constructor(client, fileConfigManager) {
-        this.client = client;
-        this.fileConfigManager = fileConfigManager;
-        this.metadata = {
-            providedCodeActionKinds: [vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports]
-        };
-    }
-    async provideCodeActions(document, _range, context, token) {
-        if (this.client.modeIds.indexOf(document.languageId) == -1)
-            return;
-        if (!context.only || !context.only.includes(vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports)) {
-            return [];
-        }
-        await this.fileConfigManager.ensureConfigurationForDocument(document, token);
-        const action = vscode_languageserver_protocol_1.CodeAction.create('Organize Imports', {
-            title: '',
-            command: 'tsserver.organizeImports',
-            arguments: [document]
-        }, vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports);
-        return [action];
-    }
-}
-exports.OrganizeImportsCodeActionProvider = OrganizeImportsCodeActionProvider;
-
-
-/***/ }),
-/* 113 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const api_1 = __importDefault(__webpack_require__(40));
-function objAreEqual(a, b) {
-    let keys = Object.keys(a);
-    for (let i = 0; i < keys.length; i++) { // tslint:disable-line
-        let key = keys[i];
-        if (a[key] !== b[key]) {
-            return false;
-        }
-    }
-    return true;
-}
-class FileConfigurationManager {
-    constructor(client) {
-        this.client = client;
-        this.cachedMap = new Map();
-        this.disposables = [];
-        coc_nvim_1.workspace.onDidCloseTextDocument(textDocument => {
-            // When a document gets closed delete the cached formatting options.
-            // This is necessary since the tsserver now closed a project when its
-            // last file in it closes which drops the stored formatting options
-            // as well.
-            this.cachedMap.delete(textDocument.uri);
-        }, undefined, this.disposables);
-    }
-    async ensureConfigurationOptions(document, insertSpaces, tabSize, token) {
-        const file = this.client.toPath(document.uri);
-        let options = {
-            tabSize,
-            insertSpaces
-        };
-        let cachedOption = this.cachedMap.get(document.uri);
-        const currentOptions = this.getFileOptions(options, document);
-        if (cachedOption
-            && objAreEqual(cachedOption.formatOptions, currentOptions.formatOptions)
-            && objAreEqual(cachedOption.preferences, currentOptions.preferences))
-            return;
-        this.cachedMap.set(document.uri, currentOptions);
-        const args = Object.assign({ file }, currentOptions);
-        await this.client.execute('configure', args, vscode_languageserver_protocol_1.CancellationToken.None);
-        try {
-            const response = await this.client.execute('configure', args, token);
-            if (response.type !== 'response') {
-                this.cachedMap.delete(document.uri);
-            }
-        }
-        catch (_e) {
-            this.cachedMap.delete(document.uri);
-        }
-    }
-    async ensureConfigurationForDocument(document, token) {
-        let opts = await coc_nvim_1.workspace.getFormatOptions(document.uri);
-        return this.ensureConfigurationOptions(document, opts.insertSpaces, opts.tabSize, token);
-    }
-    reset() {
-        this.cachedMap.clear();
-    }
-    getLanguageConfiguration(languageId) {
-        return coc_nvim_1.workspace.getConfiguration(languageId);
-    }
-    isTypeScriptDocument(languageId) {
-        return languageId.startsWith('typescript');
-    }
-    formatEnabled(document) {
-        let { languageId, uri } = document;
-        let language = languageId.startsWith('typescript') ? 'typescript' : 'javascript';
-        const config = coc_nvim_1.workspace.getConfiguration(`${language}.format`, uri);
-        return config.get('enabled');
-    }
-    enableJavascript() {
-        const config = coc_nvim_1.workspace.getConfiguration('tsserver');
-        return !!config.get('enableJavascript');
-    }
-    getFileOptions(options, document) {
-        const lang = this.isTypeScriptDocument(document.languageId) ? 'typescript' : 'javascript';
-        return {
-            formatOptions: this.getFormatOptions(options, lang, document.uri),
-            preferences: this.getPreferences(lang, document.uri)
-        };
-    }
-    getFormatOptions(options, language, uri) {
-        const config = coc_nvim_1.workspace.getConfiguration(`${language}.format`, uri);
-        return {
-            tabSize: options.tabSize,
-            indentSize: options.tabSize,
-            convertTabsToSpaces: options.insertSpaces,
-            // We can use \n here since the editor normalizes later on to its line endings.
-            newLineCharacter: '\n',
-            insertSpaceAfterCommaDelimiter: config.get('insertSpaceAfterCommaDelimiter'),
-            insertSpaceAfterConstructor: config.get('insertSpaceAfterConstructor'),
-            insertSpaceAfterSemicolonInForStatements: config.get('insertSpaceAfterSemicolonInForStatements'),
-            insertSpaceBeforeAndAfterBinaryOperators: config.get('insertSpaceBeforeAndAfterBinaryOperators'),
-            insertSpaceAfterKeywordsInControlFlowStatements: config.get('insertSpaceAfterKeywordsInControlFlowStatements'),
-            insertSpaceAfterFunctionKeywordForAnonymousFunctions: config.get('insertSpaceAfterFunctionKeywordForAnonymousFunctions'),
-            insertSpaceBeforeFunctionParenthesis: config.get('insertSpaceBeforeFunctionParenthesis'),
-            insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: config.get('insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis'),
-            insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: config.get('insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets'),
-            insertSpaceAfterOpeningAndBeforeClosingEmptyBraces: config.get('insertSpaceAfterOpeningAndBeforeClosingEmptyBraces'),
-            insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: config.get('insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces'),
-            insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: config.get('insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces'),
-            insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: config.get('insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces'),
-            insertSpaceAfterTypeAssertion: config.get('insertSpaceAfterTypeAssertion'),
-            placeOpenBraceOnNewLineForFunctions: config.get('placeOpenBraceOnNewLineForFunctions'),
-            placeOpenBraceOnNewLineForControlBlocks: config.get('placeOpenBraceOnNewLineForControlBlocks'),
-            semicolons: config.get('semicolons', undefined)
-        };
-    }
-    getCompleteOptions(languageId) {
-        const lang = this.isTypeScriptDocument(languageId) ? 'typescript' : 'javascript';
-        const config = coc_nvim_1.workspace.getConfiguration(`${lang}.suggest`);
-        return {
-            enabled: config.get('enabled', true),
-            names: config.get('names', true),
-            paths: config.get('paths', true),
-            completeFunctionCalls: config.get('completeFunctionCalls', true),
-            autoImports: config.get('autoImports', true),
-            includeAutomaticOptionalChainCompletions: config.get('includeAutomaticOptionalChainCompletions', true)
-        };
-    }
-    getPreferences(language, uri) {
-        if (this.client.apiVersion.lt(api_1.default.v290)) {
-            return {};
-        }
-        const config = coc_nvim_1.workspace.getConfiguration(`${language}.preferences`, uri);
-        // getImportModuleSpecifierEndingPreference available on ts 2.9.0
-        const preferences = {
-            quotePreference: this.getQuoteStyle(config),
-            importModuleSpecifierPreference: getImportModuleSpecifier(config),
-            importModuleSpecifierEnding: getImportModuleSpecifierEndingPreference(config),
-            allowTextChangesInNewFiles: uri.startsWith('file:'),
-            allowRenameOfImportPath: true,
-            providePrefixAndSuffixTextForRename: config.get('renameShorthandProperties', true) === false ? false : config.get('useAliasesForRenames', true),
-        };
-        return preferences;
-    }
-    getQuoteStyle(config) {
-        let quoteStyle = config.get('quoteStyle', 'auto');
-        if (this.client.apiVersion.gte(api_1.default.v333) || quoteStyle != 'auto')
-            return quoteStyle;
-        return 'single';
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-    }
-}
-exports.default = FileConfigurationManager;
-function getImportModuleSpecifier(config) {
-    let val = config.get('importModuleSpecifier');
-    switch (val) {
-        case 'relative':
-            return 'relative';
-        case 'non-relative':
-            return 'non-relative';
-        default:
-            return 'auto';
-    }
-}
-function getImportModuleSpecifierEndingPreference(config) {
-    switch (config.get('importModuleSpecifierEnding')) {
-        case 'minimal': return 'minimal';
-        case 'index': return 'index';
-        case 'js': return 'js';
-        default: return 'auto';
-    }
-}
-
-
-/***/ }),
-/* 114 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(102));
-const os_1 = __importDefault(__webpack_require__(14));
-const path_1 = __importDefault(__webpack_require__(13));
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const fileSchemes = __importStar(__webpack_require__(115));
-const callbackMap_1 = __webpack_require__(116);
-const bufferSyncSupport_1 = __importDefault(__webpack_require__(118));
-const diagnostics_1 = __webpack_require__(122);
-const fileConfigurationManager_1 = __importDefault(__webpack_require__(113));
-const requestQueue_1 = __webpack_require__(123);
-const typescriptService_1 = __webpack_require__(117);
-const api_1 = __importDefault(__webpack_require__(40));
-const configuration_1 = __webpack_require__(124);
-const logger_1 = __importDefault(__webpack_require__(129));
-const process_1 = __webpack_require__(131);
-const tracer_1 = __importDefault(__webpack_require__(132));
-const tsconfig_1 = __webpack_require__(133);
-const versionProvider_1 = __webpack_require__(134);
-const versionStatus_1 = __importDefault(__webpack_require__(135));
-const wireProtocol_1 = __webpack_require__(136);
-class ForkedTsServerProcess {
-    constructor(childProcess) {
-        this.childProcess = childProcess;
-        this.toCancelOnResourceChange = new Set();
-    }
-    onError(cb) {
-        this.childProcess.on('error', cb);
-    }
-    onExit(cb) {
-        this.childProcess.on('exit', cb);
-    }
-    write(serverRequest) {
-        this.childProcess.stdin.write(JSON.stringify(serverRequest) + '\r\n', 'utf8');
-    }
-    createReader(callback, onError) {
-        // tslint:disable-next-line:no-unused-expression
-        new wireProtocol_1.Reader(this.childProcess.stdout, callback, onError);
-    }
-    kill() {
-        this.childProcess.kill();
-    }
-}
-class TypeScriptServiceClient {
-    constructor(pluginManager, modeIds) {
-        this.pluginManager = pluginManager;
-        this.modeIds = modeIds;
-        this.state = coc_nvim_1.ServiceStat.Initial;
-        this.logger = new logger_1.default();
-        this.tsServerLogFile = null;
-        this.cancellationPipeName = null;
-        this._callbacks = new callbackMap_1.CallbackMap();
-        this._requestQueue = new requestQueue_1.RequestQueue();
-        this._pendingResponses = new Set();
-        this._onTsServerStarted = new vscode_languageserver_protocol_1.Emitter();
-        this._onProjectLanguageServiceStateChanged = new vscode_languageserver_protocol_1.Emitter();
-        this._onDidBeginInstallTypings = new vscode_languageserver_protocol_1.Emitter();
-        this._onDidEndInstallTypings = new vscode_languageserver_protocol_1.Emitter();
-        this._onTypesInstallerInitializationFailed = new vscode_languageserver_protocol_1.Emitter();
-        this.disposables = [];
-        this.isRestarting = false;
-        this._onDiagnosticsReceived = new vscode_languageserver_protocol_1.Emitter();
-        this._onConfigDiagnosticsReceived = new vscode_languageserver_protocol_1.Emitter();
-        this._onResendModelsRequested = new vscode_languageserver_protocol_1.Emitter();
-        this.pathSeparator = path_1.default.sep;
-        this.lastStart = Date.now();
-        this.servicePromise = null;
-        this.lastError = null;
-        this.numberRestarts = 0;
-        this.fileConfigurationManager = new fileConfigurationManager_1.default(this);
-        this._configuration = configuration_1.TypeScriptServiceConfiguration.loadFromWorkspace();
-        this.versionProvider = new versionProvider_1.TypeScriptVersionProvider(this._configuration);
-        this._apiVersion = api_1.default.defaultVersion;
-        this.tracer = new tracer_1.default(this.logger);
-        this.versionStatus = new versionStatus_1.default(this.normalizePath.bind(this), this.fileConfigurationManager.enableJavascript());
-        pluginManager.onDidUpdateConfig(update => {
-            this.configurePlugin(update.pluginId, update.config);
-        }, null, this.disposables);
-        pluginManager.onDidChangePlugins(() => {
-            this.restartTsServer();
-        }, null, this.disposables);
-        this.bufferSyncSupport = new bufferSyncSupport_1.default(this, modeIds);
-        this.onTsServerStarted(() => {
-            this.bufferSyncSupport.listen();
-        });
-        this.diagnosticsManager = new diagnostics_1.DiagnosticsManager();
-        this.bufferSyncSupport.onDelete(resource => {
-            this.cancelInflightRequestsForResource(resource);
-            this.diagnosticsManager.delete(resource);
-        }, null, this.disposables);
-        this.bufferSyncSupport.onWillChange(resource => {
-            this.cancelInflightRequestsForResource(resource);
-        });
-    }
-    get onDiagnosticsReceived() {
-        return this._onDiagnosticsReceived.event;
-    }
-    get onConfigDiagnosticsReceived() {
-        return this._onConfigDiagnosticsReceived.event;
-    }
-    get onResendModelsRequested() {
-        return this._onResendModelsRequested.event;
-    }
-    get configuration() {
-        return this._configuration;
-    }
-    dispose() {
-        if (this.servicePromise) {
-            this.servicePromise
-                .then(childProcess => {
-                childProcess.kill();
-            })
-                .then(undefined, () => void 0);
-        }
-        this.bufferSyncSupport.dispose();
-        this.logger.dispose();
-        this._onTsServerStarted.dispose();
-        this._onResendModelsRequested.dispose();
-        this.versionStatus.dispose();
-    }
-    info(message, data) {
-        this.logger.info(message, data);
-    }
-    error(message, data) {
-        this.logger.error(message, data);
-    }
-    restartTsServer() {
-        const start = () => {
-            this.servicePromise = this.startService(true);
-            return this.servicePromise;
-        };
-        if (this.servicePromise) {
-            return Promise.resolve(this.servicePromise.then(childProcess => {
-                this.state = coc_nvim_1.ServiceStat.Stopping;
-                this.info('Killing TS Server');
-                this.isRestarting = true;
-                childProcess.kill();
-                this.servicePromise = null;
-            }).then(start));
-        }
-        else {
-            return Promise.resolve(start());
-        }
-    }
-    stop() {
-        if (!this.servicePromise)
-            return;
-        return new Promise((resolve, reject) => {
-            this.servicePromise.then(childProcess => {
-                if (this.state == coc_nvim_1.ServiceStat.Running) {
-                    this.info('Killing TS Server');
-                    childProcess.onExit(() => {
-                        resolve();
-                    });
-                    childProcess.kill();
-                    this.servicePromise = null;
-                }
-                else {
-                    resolve();
-                }
-            }, reject);
-        });
-    }
-    get onTsServerStarted() {
-        return this._onTsServerStarted.event;
-    }
-    get onProjectLanguageServiceStateChanged() {
-        return this._onProjectLanguageServiceStateChanged.event;
-    }
-    get onDidBeginInstallTypings() {
-        return this._onDidBeginInstallTypings.event;
-    }
-    get onDidEndInstallTypings() {
-        return this._onDidEndInstallTypings.event;
-    }
-    get onTypesInstallerInitializationFailed() {
-        return this._onTypesInstallerInitializationFailed.event;
-    }
-    get apiVersion() {
-        return this._apiVersion;
-    }
-    get tscPath() {
-        return this._tscPath;
-    }
-    service() {
-        if (this.servicePromise) {
-            return this.servicePromise;
-        }
-        if (this.lastError) {
-            return Promise.reject(this.lastError);
-        }
-        return this.startService().then(() => {
-            if (this.servicePromise) {
-                return this.servicePromise;
-            }
-        });
-    }
-    ensureServiceStarted() {
-        if (!this.servicePromise) {
-            this.startService().catch(err => {
-                coc_nvim_1.workspace.showMessage(`TSServer start failed: ${err.message}`, 'error');
-                this.error(`Service start failed: ${err.stack}`);
-            });
-        }
-    }
-    async startService(resendModels = false) {
-        const { ignoreLocalTsserver } = this.configuration;
-        let currentVersion;
-        if (!ignoreLocalTsserver)
-            currentVersion = this.versionProvider.getLocalVersion();
-        if (!currentVersion || !fs_1.default.existsSync(currentVersion.tsServerPath)) {
-            currentVersion = this.versionProvider.getDefaultVersion();
-        }
-        if (!currentVersion || !currentVersion.isValid) {
-            if (this.configuration.globalTsdk) {
-                coc_nvim_1.workspace.showMessage(`Can not find typescript module, in 'tsserver.tsdk': ${this.configuration.globalTsdk}`, 'error');
-            }
-            else {
-                coc_nvim_1.workspace.showMessage(`Can not find typescript module, run ':CocInstall coc-tsserver' to fix it!`, 'error');
-            }
-            return;
-        }
-        this._apiVersion = currentVersion.version;
-        this._tscPath = currentVersion.tscPath;
-        this.versionStatus.onDidChangeTypeScriptVersion(currentVersion);
-        this.lastError = null;
-        const tsServerForkArgs = await this.getTsServerArgs(currentVersion);
-        const debugPort = this._configuration.debugPort;
-        const maxTsServerMemory = this._configuration.maxTsServerMemory;
-        const options = {
-            execArgv: [
-                ...(debugPort ? [`--inspect=${debugPort}`] : []),
-                ...(maxTsServerMemory ? [`--max-old-space-size=${maxTsServerMemory}`] : []),
-            ],
-            cwd: coc_nvim_1.workspace.root
-        };
-        this.servicePromise = this.startProcess(currentVersion, tsServerForkArgs, options, resendModels);
-        return this.servicePromise;
-    }
-    startProcess(currentVersion, args, options, resendModels) {
-        this.state = coc_nvim_1.ServiceStat.Starting;
-        return new Promise((resolve, reject) => {
-            try {
-                process_1.fork(currentVersion.tsServerPath, args, options, this.logger, (err, childProcess) => {
-                    if (err || !childProcess) {
-                        this.state = coc_nvim_1.ServiceStat.StartFailed;
-                        this.lastError = err;
-                        this.error('Starting TSServer failed with error.', err.stack);
-                        return;
-                    }
-                    this.state = coc_nvim_1.ServiceStat.Running;
-                    this.info('Started TSServer', JSON.stringify(currentVersion, null, 2));
-                    const handle = new ForkedTsServerProcess(childProcess);
-                    this.tsServerProcess = handle;
-                    this.lastStart = Date.now();
-                    handle.onError((err) => {
-                        this.lastError = err;
-                        this.error('TSServer errored with error.', err);
-                        this.error(`TSServer log file: ${this.tsServerLogFile || ''}`);
-                        coc_nvim_1.workspace.showMessage(`TSServer errored with error. ${err.message}`, 'error');
-                        this.serviceExited(false);
-                    });
-                    handle.onExit((code) => {
-                        if (code == null) {
-                            this.info('TSServer normal exit');
-                        }
-                        else {
-                            this.error(`TSServer exited with code: ${code}`);
-                        }
-                        this.info(`TSServer log file: ${this.tsServerLogFile || ''}`);
-                        this.serviceExited(!this.isRestarting);
-                        this.isRestarting = false;
-                    });
-                    handle.createReader(msg => {
-                        this.dispatchMessage(msg);
-                    }, error => {
-                        this.error('ReaderError', error);
-                    });
-                    resolve(handle);
-                    this.serviceStarted(resendModels);
-                    this._onTsServerStarted.fire(currentVersion.version);
-                });
-            }
-            catch (e) {
-                reject(e);
-            }
-        });
-    }
-    async openTsServerLogFile() {
-        const isRoot = process.getuid && process.getuid() == 0;
-        let echoErr = (msg) => {
-            coc_nvim_1.workspace.showMessage(msg, 'error');
-        };
-        if (isRoot) {
-            echoErr('Log disabled for root user.');
-            return false;
-        }
-        if (!this.apiVersion.gte(api_1.default.v222)) {
-            echoErr('TS Server logging requires TS 2.2.2+');
-            return false;
-        }
-        if (this._configuration.tsServerLogLevel === configuration_1.TsServerLogLevel.Off) {
-            echoErr(`TS Server logging is off. Change 'tsserver.log' in 'coc-settings.json' to enable`);
-            return false;
-        }
-        if (!this.tsServerLogFile) {
-            echoErr('TS Server has not started logging.');
-            return false;
-        }
-        try {
-            await coc_nvim_1.workspace.nvim.command(`edit ${this.tsServerLogFile}`);
-            return true;
-        }
-        catch (_a) {
-            echoErr('Could not open TS Server log file');
-            return false;
-        }
-    }
-    serviceStarted(resendModels) {
-        this.bufferSyncSupport.reset();
-        const watchOptions = this.apiVersion.gte(api_1.default.v380)
-            ? this.configuration.watchOptions
-            : undefined;
-        const configureOptions = {
-            hostInfo: 'coc-nvim',
-            preferences: {
-                providePrefixAndSuffixTextForRename: true,
-                allowRenameOfImportPath: true,
-            },
-            watchOptions
-        };
-        this.executeWithoutWaitingForResponse('configure', configureOptions); // tslint:disable-line
-        this.setCompilerOptionsForInferredProjects(this._configuration);
-        if (resendModels) {
-            this._onResendModelsRequested.fire(void 0);
-            this.fileConfigurationManager.reset();
-            this.diagnosticsManager.reInitialize();
-            this.bufferSyncSupport.reinitialize();
-        }
-        // Reconfigure any plugins
-        for (const [config, pluginName] of this.pluginManager.configurations()) {
-            this.configurePlugin(config, pluginName);
-        }
-    }
-    setCompilerOptionsForInferredProjects(configuration) {
-        if (!this.apiVersion.gte(api_1.default.v206))
-            return;
-        const args = {
-            options: this.getCompilerOptionsForInferredProjects(configuration)
-        };
-        this.executeWithoutWaitingForResponse('compilerOptionsForInferredProjects', args); // tslint:disable-line
-    }
-    getCompilerOptionsForInferredProjects(configuration) {
-        return Object.assign(Object.assign({}, tsconfig_1.inferredProjectConfig(configuration)), { allowJs: true, allowSyntheticDefaultImports: true, allowNonTsExtensions: true });
-    }
-    serviceExited(restart) {
-        this.state = coc_nvim_1.ServiceStat.Stopped;
-        this.servicePromise = null;
-        this.tsServerLogFile = null;
-        this._callbacks.destroy('Service died.');
-        this._callbacks = new callbackMap_1.CallbackMap();
-        this._requestQueue = new requestQueue_1.RequestQueue();
-        this._pendingResponses = new Set();
-        if (restart) {
-            const diff = Date.now() - this.lastStart;
-            this.numberRestarts++;
-            let startService = true;
-            if (this.numberRestarts > 5) {
-                this.numberRestarts = 0;
-                if (diff < 10 * 1000 /* 10 seconds */) {
-                    this.lastStart = Date.now();
-                    startService = false;
-                    coc_nvim_1.workspace.showMessage('The TypeScript language service died 5 times right after it got started.', 'error'); // tslint:disable-line
-                }
-                else if (diff < 60 * 1000 /* 1 Minutes */) {
-                    this.lastStart = Date.now();
-                    coc_nvim_1.workspace.showMessage('The TypeScript language service died unexpectedly 5 times in the last 5 Minutes.', 'error'); // tslint:disable-line
-                }
-            }
-            if (startService) {
-                this.startService(true); // tslint:disable-line
-            }
-        }
-    }
-    toPath(uri) {
-        return this.normalizePath(coc_nvim_1.Uri.parse(uri));
-    }
-    toOpenedFilePath(uri, options = {}) {
-        if (!this.bufferSyncSupport.ensureHasBuffer(uri)) {
-            if (!options.suppressAlertOnFailure) {
-                console.error(`Unexpected resource ${uri}`);
-            }
-            return undefined;
-        }
-        return this.toPath(uri);
-    }
-    toResource(filepath) {
-        if (this._apiVersion.gte(api_1.default.v213)) {
-            if (filepath.startsWith('untitled:')) {
-                let resource = coc_nvim_1.Uri.parse(filepath);
-                if (this.inMemoryResourcePrefix) {
-                    const dirName = path_1.default.dirname(resource.path);
-                    const fileName = path_1.default.basename(resource.path);
-                    if (fileName.startsWith(this.inMemoryResourcePrefix)) {
-                        resource = resource.with({ path: path_1.default.posix.join(dirName, fileName.slice(this.inMemoryResourcePrefix.length)) });
-                    }
-                }
-                return resource.toString();
-            }
-        }
-        return coc_nvim_1.Uri.file(filepath).toString();
-    }
-    normalizePath(resource) {
-        if (fileSchemes.disabledSchemes.has(resource.scheme)) {
-            return undefined;
-        }
-        switch (resource.scheme) {
-            case fileSchemes.file: {
-                let result = resource.fsPath;
-                if (!result)
-                    return undefined;
-                result = path_1.default.normalize(result);
-                // Both \ and / must be escaped in regular expressions
-                return result.replace(new RegExp('\\' + this.pathSeparator, 'g'), '/');
-            }
-            default: {
-                return this.inMemoryResourcePrefix + resource.toString(true);
-            }
-        }
-    }
-    get inMemoryResourcePrefix() {
-        return this._apiVersion.gte(api_1.default.v270) ? '^' : '';
-    }
-    asUrl(filepath) {
-        if (this._apiVersion.gte(api_1.default.v213)) {
-            if (filepath.startsWith('untitled:')) {
-                let resource = coc_nvim_1.Uri.parse(filepath);
-                if (this.inMemoryResourcePrefix) {
-                    const dirName = path_1.default.dirname(resource.path);
-                    const fileName = path_1.default.basename(resource.path);
-                    if (fileName.startsWith(this.inMemoryResourcePrefix)) {
-                        resource = resource.with({
-                            path: path_1.default.posix.join(dirName, fileName.slice(this.inMemoryResourcePrefix.length))
-                        });
-                    }
-                }
-                return resource;
-            }
-        }
-        return coc_nvim_1.Uri.file(filepath);
-    }
-    execute(command, args, token, config) {
-        var _a;
-        let execution;
-        if (config === null || config === void 0 ? void 0 : config.cancelOnResourceChange) {
-            const source = new vscode_languageserver_protocol_1.CancellationTokenSource();
-            token.onCancellationRequested(() => source.cancel());
-            const inFlight = {
-                resource: config.cancelOnResourceChange,
-                cancel: () => source.cancel(),
-            };
-            (_a = this.tsServerProcess) === null || _a === void 0 ? void 0 : _a.toCancelOnResourceChange.add(inFlight);
-            execution = this.executeImpl(command, args, Object.assign({ isAsync: false, token: source.token, expectsResult: true }, config)).finally(() => {
-                var _a;
-                (_a = this.tsServerProcess) === null || _a === void 0 ? void 0 : _a.toCancelOnResourceChange.delete(inFlight);
-                source.dispose();
-            });
-        }
-        else {
-            execution = this.executeImpl(command, args, Object.assign({ isAsync: false, token, expectsResult: true }, config));
-        }
-        if (config === null || config === void 0 ? void 0 : config.nonRecoverable) {
-            execution.catch(err => this.fatalError(command, err));
-        }
-        return execution;
-    }
-    fatalError(command, error) {
-        console.error(`A non-recoverable error occured while executing tsserver command: ${command}`);
-        if (this.state === coc_nvim_1.ServiceStat.Running) {
-            this.info('Killing TS Server by fatal error:', error);
-            this.service().then(service => {
-                service.kill();
-            });
-        }
-    }
-    executeAsync(command, args, token) {
-        return this.executeImpl(command, args, {
-            isAsync: true,
-            token,
-            expectsResult: true
-        });
-    }
-    executeWithoutWaitingForResponse(command, args) {
-        this.executeImpl(command, args, {
-            isAsync: false,
-            token: undefined,
-            expectsResult: false
-        });
-    }
-    executeImpl(command, args, executeInfo) {
-        if (this.servicePromise == null) {
-            return Promise.resolve(undefined);
-        }
-        this.bufferSyncSupport.beforeCommand(command);
-        const request = this._requestQueue.createRequest(command, args);
-        const requestInfo = {
-            request,
-            expectsResponse: executeInfo.expectsResult,
-            isAsync: executeInfo.isAsync,
-            queueingType: getQueueingType(command, executeInfo.lowPriority)
-        };
-        let result;
-        if (executeInfo.expectsResult) {
-            result = new Promise((resolve, reject) => {
-                this._callbacks.add(request.seq, { onSuccess: resolve, onError: reject, startTime: Date.now(), isAsync: executeInfo.isAsync }, executeInfo.isAsync);
-                if (executeInfo.token) {
-                    executeInfo.token.onCancellationRequested(() => {
-                        this.tryCancelRequest(request.seq, command);
-                    });
-                }
-            }).catch((err) => {
-                throw err;
-            });
-        }
-        this._requestQueue.enqueue(requestInfo);
-        this.sendNextRequests();
-        return result;
-    }
-    sendNextRequests() {
-        while (this._pendingResponses.size === 0 && this._requestQueue.length > 0) {
-            const item = this._requestQueue.dequeue();
-            if (item) {
-                this.sendRequest(item);
-            }
-        }
-    }
-    sendRequest(requestItem) {
-        const serverRequest = requestItem.request;
-        this.tracer.traceRequest(serverRequest, requestItem.expectsResponse, this._requestQueue.length);
-        if (requestItem.expectsResponse && !requestItem.isAsync) {
-            this._pendingResponses.add(requestItem.request.seq);
-        }
-        this.service().then(childProcess => {
-            try {
-                childProcess.write(serverRequest);
-            }
-            catch (err) {
-                const callback = this.fetchCallback(serverRequest.seq);
-                if (callback) {
-                    callback.onError(err);
-                }
-            }
-        });
-    }
-    tryCancelRequest(seq, command) {
-        try {
-            if (this._requestQueue.tryDeletePendingRequest(seq)) {
-                this.tracer.logTrace(`TypeScript Server: canceled request with sequence number ${seq}`);
-                return true;
-            }
-            if (this.cancellationPipeName) {
-                this.tracer.logTrace(`TypeScript Server: trying to cancel ongoing request with sequence number ${seq}`);
-                try {
-                    fs_1.default.writeFileSync(this.cancellationPipeName + seq, '');
-                }
-                catch (_a) {
-                    // noop
-                }
-                return true;
-            }
-            this.tracer.logTrace(`TypeScript Server: tried to cancel request with sequence number ${seq}. But request got already delivered.`);
-            return false;
-        }
-        finally {
-            const callback = this.fetchCallback(seq);
-            if (callback) {
-                callback.onSuccess(new typescriptService_1.ServerResponse.Cancelled(`Cancelled request ${seq} - ${command}`));
-            }
-        }
-    }
-    fetchCallback(seq) {
-        const callback = this._callbacks.fetch(seq);
-        if (!callback) {
-            return undefined;
-        }
-        this._pendingResponses.delete(seq);
-        return callback;
-    }
-    dispatchMessage(message) {
-        try {
-            switch (message.type) {
-                case 'response':
-                    this.dispatchResponse(message);
-                    break;
-                case 'event':
-                    const event = message;
-                    if (event.event === 'requestCompleted') {
-                        const seq = event.body.request_seq;
-                        const p = this._callbacks.fetch(seq);
-                        if (p) {
-                            this.tracer.traceRequestCompleted('requestCompleted', seq, p.startTime);
-                            p.onSuccess(undefined);
-                        }
-                    }
-                    else {
-                        this.tracer.traceEvent(event);
-                        this.dispatchEvent(event);
-                    }
-                    break;
-                default:
-                    throw new Error(`Unknown message type ${message.type} received`);
-            }
-        }
-        finally {
-            this.sendNextRequests();
-        }
-    }
-    dispatchResponse(response) {
-        const callback = this.fetchCallback(response.request_seq);
-        if (!callback) {
-            return;
-        }
-        this.tracer.traceResponse(response, callback.startTime);
-        if (response.success) {
-            callback.onSuccess(response);
-        }
-        else if (response.message === 'No content available.') {
-            // Special case where response itself is successful but there is not any data to return.
-            callback.onSuccess(typescriptService_1.ServerResponse.NoContent);
-        }
-        else {
-            callback.onError(new Error(response.message));
-        }
-    }
-    dispatchEvent(event) {
-        switch (event.event) {
-            case 'syntaxDiag':
-            case 'semanticDiag':
-            case 'suggestionDiag':
-                const diagnosticEvent = event;
-                if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) {
-                    this._onDiagnosticsReceived.fire({
-                        kind: getDiagnosticsKind(event),
-                        resource: this.asUrl(diagnosticEvent.body.file),
-                        diagnostics: diagnosticEvent.body.diagnostics
-                    });
-                }
-                break;
-            case 'configFileDiag':
-                this._onConfigDiagnosticsReceived.fire(event);
-                break;
-            case 'projectLanguageServiceState':
-                if (event.body) {
-                    this._onProjectLanguageServiceStateChanged.fire(event.body);
-                }
-                break;
-            case 'beginInstallTypes':
-                if (event.body) {
-                    this._onDidBeginInstallTypings.fire(event.body);
-                }
-                break;
-            case 'endInstallTypes':
-                if (event.body) {
-                    this._onDidEndInstallTypings.fire(event.body);
-                }
-                break;
-            case 'projectsUpdatedInBackground':
-                const body = event.body;
-                const resources = body.openFiles.map(coc_nvim_1.Uri.file);
-                this.bufferSyncSupport.getErr(resources);
-                break;
-            case 'typesInstallerInitializationFailed':
-                if (event.body) {
-                    this._onTypesInstallerInitializationFailed.fire(event.body);
-                }
-                break;
-            case 'projectLoadingStart':
-                this.versionStatus.loading = true;
-                break;
-            case 'projectLoadingFinish':
-                this.versionStatus.loading = false;
-                break;
-        }
-    }
-    async getTsServerArgs(currentVersion) {
-        const args = [];
-        args.push('--allowLocalPluginLoads');
-        if (this.apiVersion.gte(api_1.default.v250)) {
-            args.push('--useInferredProjectPerProjectRoot');
-        }
-        else {
-            args.push('--useSingleInferredProject');
-        }
-        if (this.apiVersion.gte(api_1.default.v206) && this._configuration.disableAutomaticTypeAcquisition) {
-            args.push('--disableAutomaticTypingAcquisition');
-        }
-        if (this.apiVersion.gte(api_1.default.v222)) {
-            this.cancellationPipeName = process_1.getTempFile(`tscancellation-${process_1.makeRandomHexString(20)}`);
-            args.push('--cancellationPipeName', this.cancellationPipeName + '*');
-        }
-        if (this.apiVersion.gte(api_1.default.v222)) {
-            const isRoot = process.getuid && process.getuid() == 0;
-            if (this._configuration.tsServerLogLevel !== configuration_1.TsServerLogLevel.Off && !isRoot) {
-                const logDir = process_1.getTempDirectory();
-                if (logDir) {
-                    this.tsServerLogFile = path_1.default.join(logDir, `tsserver.log`);
-                    this.info('TSServer log file :', this.tsServerLogFile);
-                }
-                else {
-                    this.tsServerLogFile = null;
-                    this.error('Could not create TSServer log directory');
-                }
-                if (this.tsServerLogFile) {
-                    args.push('--logVerbosity', configuration_1.TsServerLogLevel.toString(this._configuration.tsServerLogLevel));
-                    args.push('--logFile', this.tsServerLogFile);
-                }
-            }
-        }
-        if (this.apiVersion.gte(api_1.default.v230)) {
-            const pluginNames = this.pluginManager.plugins.map(x => x.name);
-            let pluginPaths = this._configuration.tsServerPluginPaths;
-            pluginPaths = pluginPaths.reduce((p, c) => {
-                if (path_1.default.isAbsolute(c)) {
-                    p.push(c);
-                }
-                else {
-                    let roots = coc_nvim_1.workspace.workspaceFolders.map(o => coc_nvim_1.Uri.parse(o.uri).fsPath);
-                    p.push(...roots.map(r => path_1.default.join(r, c)));
-                }
-                return p;
-            }, []);
-            if (pluginNames.length) {
-                const isUsingBundledTypeScriptVersion = currentVersion.path == this.versionProvider.bundledVersion.path;
-                args.push('--globalPlugins', pluginNames.join(','));
-                for (const plugin of this.pluginManager.plugins) {
-                    if (isUsingBundledTypeScriptVersion || plugin.enableForWorkspaceTypeScriptVersions) {
-                        pluginPaths.push(plugin.path);
-                    }
-                }
-            }
-            if (pluginPaths.length) {
-                args.push('--pluginProbeLocations', pluginPaths.join(','));
-            }
-        }
-        if (this._configuration.locale) {
-            args.push('--locale', this._configuration.locale);
-        }
-        if (this._configuration.typingsCacheLocation) {
-            args.push('--globalTypingsCacheLocation', `"${this._configuration.typingsCacheLocation}"`);
-        }
-        if (this.apiVersion.gte(api_1.default.v234)) {
-            let { npmLocation } = this._configuration;
-            if (npmLocation) {
-                this.logger.info(`using npm from ${npmLocation}`);
-                args.push('--npmLocation', `"${npmLocation}"`);
-            }
-        }
-        if (this.apiVersion.gte(api_1.default.v291)) {
-            args.push('--noGetErrOnBackgroundUpdate');
-        }
-        if (this.apiVersion.gte(api_1.default.v345)) {
-            args.push('--validateDefaultNpmLocation');
-        }
-        return args;
-    }
-    getProjectRootPath(uri) {
-        let root = coc_nvim_1.workspace.cwd;
-        let u = coc_nvim_1.Uri.parse(uri);
-        if (u.scheme !== 'file')
-            return undefined;
-        let folder = coc_nvim_1.workspace.getWorkspaceFolder(uri);
-        if (folder) {
-            root = coc_nvim_1.Uri.parse(folder.uri).fsPath;
-        }
-        else {
-            let filepath = coc_nvim_1.Uri.parse(uri).fsPath;
-            if (!filepath.startsWith(root)) {
-                root = path_1.default.dirname(filepath);
-            }
-        }
-        if (root == os_1.default.homedir())
-            return undefined;
-        return root;
-    }
-    configurePlugin(pluginName, configuration) {
-        if (this.apiVersion.gte(api_1.default.v314)) {
-            if (!this.servicePromise)
-                return;
-            this.servicePromise.then(() => {
-                // tslint:disable-next-line: no-floating-promises
-                this.executeWithoutWaitingForResponse('configurePlugin', { pluginName, configuration });
-            });
-        }
-    }
-    interruptGetErr(f) {
-        return this.bufferSyncSupport.interuptGetErr(f);
-    }
-    cancelInflightRequestsForResource(resource) {
-        if (this.state !== coc_nvim_1.ServiceStat.Running || !this.tsServerProcess) {
-            return;
-        }
-        for (const request of this.tsServerProcess.toCancelOnResourceChange) {
-            if (request.resource.toString() === resource.toString()) {
-                request.cancel();
-            }
-        }
-    }
-}
-exports.default = TypeScriptServiceClient;
-function getDiagnosticsKind(event) {
-    switch (event.event) {
-        case 'syntaxDiag':
-            return diagnostics_1.DiagnosticKind.Syntax;
-        case 'semanticDiag':
-            return diagnostics_1.DiagnosticKind.Semantic;
-        case 'suggestionDiag':
-            return diagnostics_1.DiagnosticKind.Suggestion;
-    }
-    throw new Error('Unknown dignostics kind');
-}
-const fenceCommands = new Set(['change', 'close', 'open']);
-function getQueueingType(command, lowPriority) {
-    if (fenceCommands.has(command)) {
-        return requestQueue_1.RequestQueueingType.Fence;
-    }
-    return lowPriority ? requestQueue_1.RequestQueueingType.LowPriority : requestQueue_1.RequestQueueingType.Normal;
-}
-
-
-/***/ }),
-/* 115 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.disabledSchemes = exports.semanticSupportedSchemes = exports.walkThroughSnippet = exports.vsls = exports.git = exports.untitled = exports.file = void 0;
-exports.file = 'file';
-exports.untitled = 'untitled';
-exports.git = 'git';
-/** Live share scheme */
-exports.vsls = 'vsls';
-exports.walkThroughSnippet = 'walkThroughSnippet';
-exports.semanticSupportedSchemes = [
-    exports.file,
-    exports.untitled,
-    exports.walkThroughSnippet,
-];
-/**
- * File scheme for which JS/TS language feature should be disabled
- */
-exports.disabledSchemes = new Set([
-    exports.git,
-    exports.vsls
-]);
-
-
-/***/ }),
-/* 116 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.CallbackMap = void 0;
-const typescriptService_1 = __webpack_require__(117);
-class CallbackMap {
-    constructor() {
-        this._callbacks = new Map();
-        this._asyncCallbacks = new Map();
-    }
-    destroy(cause) {
-        const cancellation = new typescriptService_1.ServerResponse.Cancelled(cause);
-        for (const callback of this._callbacks.values()) {
-            callback.onSuccess(cancellation);
-        }
-        this._callbacks.clear();
-        for (const callback of this._asyncCallbacks.values()) {
-            callback.onSuccess(cancellation);
-        }
-        this._asyncCallbacks.clear();
-    }
-    add(seq, callback, isAsync) {
-        if (isAsync) {
-            this._asyncCallbacks.set(seq, callback);
-        }
-        else {
-            this._callbacks.set(seq, callback);
-        }
-    }
-    fetch(seq) {
-        const callback = this._callbacks.get(seq) || this._asyncCallbacks.get(seq);
-        this.delete(seq);
-        return callback;
-    }
-    delete(seq) {
-        if (!this._callbacks.delete(seq)) {
-            this._asyncCallbacks.delete(seq);
-        }
-    }
-}
-exports.CallbackMap = CallbackMap;
-
-
-/***/ }),
-/* 117 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.ExectuionTarget = exports.ServerResponse = void 0;
-var ServerResponse;
-(function (ServerResponse) {
-    class Cancelled {
-        constructor(reason) {
-            this.reason = reason;
-            this.type = 'cancelled';
-        }
-    }
-    ServerResponse.Cancelled = Cancelled;
-    // tslint:disable-next-line: new-parens
-    ServerResponse.NoContent = new class {
-        constructor() {
-            this.type = 'noContent';
-        }
-    };
-})(ServerResponse = exports.ServerResponse || (exports.ServerResponse = {}));
-var ExectuionTarget;
-(function (ExectuionTarget) {
-    ExectuionTarget[ExectuionTarget["Semantic"] = 0] = "Semantic";
-    ExectuionTarget[ExectuionTarget["Syntax"] = 1] = "Syntax";
-})(ExectuionTarget = exports.ExectuionTarget || (exports.ExectuionTarget = {}));
-
-
-/***/ }),
-/* 118 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const api_1 = __importDefault(__webpack_require__(40));
-const async_1 = __webpack_require__(119);
-const typeConverters = __importStar(__webpack_require__(37));
-const languageModeIds_1 = __webpack_require__(120);
-const resourceMap_1 = __webpack_require__(121);
-class CloseOperation {
-    constructor(args) {
-        this.args = args;
-        this.type = 0 /* Close */;
-    }
-}
-class OpenOperation {
-    constructor(args) {
-        this.args = args;
-        this.type = 1 /* Open */;
-    }
-}
-class ChangeOperation {
-    constructor(args) {
-        this.args = args;
-        this.type = 2 /* Change */;
-    }
-}
-class SyncedBuffer {
-    constructor(document, filepath, client, synchronizer) {
-        this.document = document;
-        this.filepath = filepath;
-        this.client = client;
-        this.synchronizer = synchronizer;
-        this.state = 1 /* Initial */;
-    }
-    open() {
-        const args = {
-            file: this.filepath,
-            fileContent: this.document.getText(),
-            projectRootPath: this.client.getProjectRootPath(this.document.uri),
-        };
-        const scriptKind = languageModeIds_1.mode2ScriptKind(this.document.languageId);
-        if (scriptKind) {
-            args.scriptKindName = scriptKind;
-        }
-        if (this.client.apiVersion.gte(api_1.default.v240)) {
-            // plugin managed.
-            const tsPluginsForDocument = this.client.pluginManager.plugins
-                .filter(x => x.languages.indexOf(this.document.languageId) >= 0);
-            if (tsPluginsForDocument.length) {
-                args.plugins = tsPluginsForDocument.map(plugin => plugin.name);
-            }
-        }
-        this.synchronizer.open(this.resource, args);
-        this.state = 2 /* Open */;
-    }
-    get resource() {
-        return this.document.uri;
-    }
-    get lineCount() {
-        return this.document.lineCount;
-    }
-    get kind() {
-        if (this.document.languageId.startsWith('javascript')) {
-            return 2 /* JavaScript */;
-        }
-        return 1 /* TypeScript */;
-    }
-    /**
-     * @return Was the buffer open?
-     */
-    close() {
-        if (this.state !== 2 /* Open */) {
-            this.state = 2 /* Closed */;
-            return false;
-        }
-        this.state = 2 /* Closed */;
-        return this.synchronizer.close(this.resource, this.filepath);
-    }
-    onContentChanged(events) {
-        if (this.state !== 2 /* Open */) {
-            console.error(`Unexpected buffer state: ${this.state}`);
-        }
-        this.synchronizer.change(this.resource, this.filepath, events);
-    }
-}
-class SyncedBufferMap extends resourceMap_1.ResourceMap {
-    getForPath(filePath) {
-        return this.get(coc_nvim_1.Uri.file(filePath).toString());
-    }
-    get allBuffers() {
-        return this.values;
-    }
-}
-class PendingDiagnostics extends resourceMap_1.ResourceMap {
-    getOrderedFileSet() {
-        const orderedResources = Array.from(this.entries)
-            .sort((a, b) => a.value - b.value)
-            .map(entry => entry.uri);
-        const map = new resourceMap_1.ResourceMap(this._normalizePath);
-        for (const resource of orderedResources) {
-            map.set(resource, undefined);
-        }
-        return map;
-    }
-}
-/**
- * Manages synchronization of buffers with the TS server.
- *
- * If supported, batches together file changes. This allows the TS server to more efficiently process changes.
- */
-class BufferSynchronizer {
-    constructor(client, pathNormalizer) {
-        this.client = client;
-        this._pending = new resourceMap_1.ResourceMap(pathNormalizer);
-    }
-    open(resource, args) {
-        if (this.supportsBatching) {
-            this.updatePending(resource, new OpenOperation(args));
-        }
-        else {
-            this.client.executeWithoutWaitingForResponse('open', args);
-        }
-    }
-    /**
-     * @return Was the buffer open?
-     */
-    close(resource, filepath) {
-        if (this.supportsBatching) {
-            return this.updatePending(resource, new CloseOperation(filepath));
-        }
-        else {
-            const args = { file: filepath };
-            this.client.executeWithoutWaitingForResponse('close', args);
-            return true;
-        }
-    }
-    change(resource, filepath, events) {
-        if (!events.length) {
-            return;
-        }
-        if (this.supportsBatching) {
-            this.updatePending(resource, new ChangeOperation({
-                fileName: filepath,
-                textChanges: events.map((change) => ({
-                    newText: change.text,
-                    start: typeConverters.Position.toLocation(change.range.start),
-                    end: typeConverters.Position.toLocation(change.range.end),
-                })).reverse(),
-            }));
-        }
-        else {
-            for (const { range, text } of events) {
-                const args = Object.assign({ insertString: text }, typeConverters.Range.toFormattingRequestArgs(filepath, range));
-                this.client.executeWithoutWaitingForResponse('change', args);
-            }
-        }
-    }
-    reset() {
-        this._pending.clear();
-    }
-    beforeCommand(command) {
-        if (command === 'updateOpen') {
-            return;
-        }
-        this.flush();
-    }
-    flush() {
-        if (!this.supportsBatching) {
-            // We've already eagerly synchronized
-            this._pending.clear();
-            return;
-        }
-        if (this._pending.size > 0) {
-            const closedFiles = [];
-            const openFiles = [];
-            const changedFiles = [];
-            for (const change of this._pending.values) {
-                switch (change.type) {
-                    case 2 /* Change */:
-                        changedFiles.push(change.args);
-                        break;
-                    case 1 /* Open */:
-                        openFiles.push(change.args);
-                        break;
-                    case 0 /* Close */:
-                        closedFiles.push(change.args);
-                        break;
-                }
-            }
-            this.client.execute('updateOpen', { changedFiles, closedFiles, openFiles }, vscode_languageserver_protocol_1.CancellationToken.None, { nonRecoverable: true });
-            this._pending.clear();
-        }
-    }
-    get supportsBatching() {
-        return this.client.apiVersion.gte(api_1.default.v340);
-    }
-    updatePending(resource, op) {
-        switch (op.type) {
-            case 0 /* Close */:
-                const existing = this._pending.get(resource);
-                switch (existing === null || existing === void 0 ? void 0 : existing.type) {
-                    case 1 /* Open */:
-                        this._pending.delete(resource);
-                        return false; // Open then close. No need to do anything
-                }
-                break;
-        }
-        if (this._pending.has(resource)) {
-            // we saw this file before, make sure we flush before working with it again
-            this.flush();
-        }
-        this._pending.set(resource, op);
-        return true;
-    }
-}
-class GetErrRequest {
-    constructor(client, uris, _token, onDone) {
-        this.uris = uris;
-        this._token = _token;
-        this._done = false;
-        let files = uris.map(uri => client.normalizePath(uri));
-        const args = {
-            delay: 0,
-            files
-        };
-        const done = () => {
-            if (this._done) {
-                return;
-            }
-            this._done = true;
-            onDone();
-        };
-        client.executeAsync('geterr', args, _token.token).then(done, done);
-    }
-    static executeGetErrRequest(client, uris, onDone) {
-        const token = new vscode_languageserver_protocol_1.CancellationTokenSource();
-        return new GetErrRequest(client, uris, token, onDone);
-    }
-    cancel() {
-        if (!this._done) {
-            this._token.cancel();
-        }
-        this._token.dispose();
-    }
-}
-class BufferSyncSupport {
-    constructor(client, modeIds) {
-        this.disposables = [];
-        this._validateJavaScript = true;
-        this._validateTypeScript = true;
-        this.listening = false;
-        this._onDelete = new vscode_languageserver_protocol_1.Emitter();
-        this.onDelete = this._onDelete.event;
-        this._onWillChange = new vscode_languageserver_protocol_1.Emitter();
-        this.onWillChange = this._onWillChange.event;
-        this.client = client;
-        this.modeIds = new Set(modeIds);
-        this.diagnosticDelayer = new async_1.Delayer(300);
-        const pathNormalizer = (path) => this.client.toPath(path);
-        this.syncedBuffers = new SyncedBufferMap(pathNormalizer);
-        this.pendingDiagnostics = new PendingDiagnostics(pathNormalizer);
-        this.synchronizer = new BufferSynchronizer(client, pathNormalizer);
-        this.updateConfiguration();
-        coc_nvim_1.workspace.onDidChangeConfiguration(this.updateConfiguration, this, this.disposables);
-    }
-    listen() {
-        if (this.listening) {
-            return;
-        }
-        this.listening = true;
-        coc_nvim_1.workspace.onDidOpenTextDocument(this.openTextDocument, this, this.disposables);
-        coc_nvim_1.workspace.onDidCloseTextDocument(this.onDidCloseTextDocument, this, this.disposables);
-        coc_nvim_1.workspace.onDidChangeTextDocument(this.onDidChangeTextDocument, this, this.disposables);
-        coc_nvim_1.workspace.textDocuments.forEach(this.openTextDocument, this);
-    }
-    handles(resource) {
-        return this.syncedBuffers.has(resource);
-    }
-    dispose() {
-        this.pendingDiagnostics.clear();
-        coc_nvim_1.disposeAll(this.disposables);
-        this._onWillChange.dispose();
-        this._onDelete.dispose();
-    }
-    ensureHasBuffer(resource) {
-        if (this.syncedBuffers.has(resource)) {
-            return true;
-        }
-        const existingDocument = coc_nvim_1.workspace.textDocuments.find(doc => doc.uri.toString() === resource);
-        if (existingDocument) {
-            return this.openTextDocument(existingDocument);
-        }
-        return false;
-    }
-    toResource(filePath) {
-        const buffer = this.syncedBuffers.getForPath(filePath);
-        if (buffer)
-            return buffer.resource;
-        return coc_nvim_1.Uri.file(filePath).toString();
-    }
-    reset() {
-        var _a;
-        (_a = this.pendingGetErr) === null || _a === void 0 ? void 0 : _a.cancel();
-        this.pendingDiagnostics.clear();
-        this.synchronizer.reset();
-    }
-    reinitialize() {
-        this.reset();
-        for (const buffer of this.syncedBuffers.allBuffers) {
-            buffer.open();
-        }
-    }
-    openTextDocument(document) {
-        if (!this.modeIds.has(document.languageId)) {
-            // can't handle
-            return false;
-        }
-        const resource = document.uri;
-        const filepath = this.client.normalizePath(coc_nvim_1.Uri.parse(resource));
-        if (!filepath) {
-            return false;
-        }
-        if (this.syncedBuffers.has(resource)) {
-            return true;
-        }
-        const syncedBuffer = new SyncedBuffer(document, filepath, this.client, this.synchronizer);
-        this.syncedBuffers.set(resource, syncedBuffer);
-        syncedBuffer.open();
-        this.requestDiagnostic(syncedBuffer);
-        return true;
-    }
-    closeResource(resource) {
-        const syncedBuffer = this.syncedBuffers.get(resource);
-        if (!syncedBuffer) {
-            return;
-        }
-        this.pendingDiagnostics.delete(resource);
-        this.syncedBuffers.delete(resource);
-        const wasBufferOpen = syncedBuffer.close();
-        this._onDelete.fire(resource);
-        if (wasBufferOpen) {
-            this.requestAllDiagnostics();
-        }
-    }
-    onDidCloseTextDocument(document) {
-        this.closeResource(document.uri);
-    }
-    onDidChangeTextDocument(e) {
-        const syncedBuffer = this.syncedBuffers.get(e.textDocument.uri);
-        if (!syncedBuffer) {
-            return;
-        }
-        this._onWillChange.fire(syncedBuffer.resource);
-        syncedBuffer.onContentChanged(e.contentChanges);
-        const didTrigger = this.requestDiagnostic(syncedBuffer);
-        if (!didTrigger && this.pendingGetErr) {
-            // In this case we always want to re-trigger all diagnostics
-            this.pendingGetErr.cancel();
-            this.pendingGetErr = undefined;
-            this.triggerDiagnostics();
-        }
-    }
-    beforeCommand(command) {
-        this.synchronizer.beforeCommand(command);
-    }
-    interuptGetErr(f) {
-        if (!this.pendingGetErr) {
-            return f();
-        }
-        this.pendingGetErr.cancel();
-        this.pendingGetErr = undefined;
-        const result = f();
-        this.triggerDiagnostics();
-        return result;
-    }
-    getErr(resources) {
-        const handledResources = resources.filter(resource => {
-            let syncedBuffer = this.syncedBuffers.get(resource.toString());
-            return syncedBuffer && this.shouldValidate(syncedBuffer);
-        });
-        if (!handledResources.length) {
-            return;
-        }
-        for (const resource of handledResources) {
-            this.pendingDiagnostics.set(resource.toString(), Date.now());
-        }
-        this.triggerDiagnostics();
-    }
-    triggerDiagnostics(delay = 200) {
-        this.diagnosticDelayer.trigger(() => {
-            this.sendPendingDiagnostics();
-        }, delay);
-    }
-    requestAllDiagnostics() {
-        for (const buffer of this.syncedBuffers.allBuffers) {
-            if (this.shouldValidate(buffer)) {
-                this.pendingDiagnostics.set(buffer.resource, Date.now());
-            }
-        }
-        this.triggerDiagnostics();
-    }
-    requestDiagnostic(buffer) {
-        if (!this.shouldValidate(buffer)) {
-            return false;
-        }
-        this.pendingDiagnostics.set(buffer.resource, Date.now());
-        const delay = Math.min(Math.max(Math.ceil(buffer.lineCount / 20), 300), 800);
-        this.triggerDiagnostics(delay);
-        return true;
-    }
-    hasPendingDiagnostics(uri) {
-        return this.pendingDiagnostics.has(uri);
-    }
-    sendPendingDiagnostics() {
-        const orderedFileSet = this.pendingDiagnostics.getOrderedFileSet();
-        if (this.pendingGetErr) {
-            this.pendingGetErr.cancel();
-            for (const uri of this.pendingGetErr.uris) {
-                let resource = uri.toString();
-                let syncedBuffer = this.syncedBuffers.get(resource);
-                if (syncedBuffer && this.shouldValidate(syncedBuffer)) {
-                    orderedFileSet.set(resource, undefined);
-                }
-                else {
-                    orderedFileSet.delete(resource);
-                }
-            }
-            this.pendingGetErr = undefined;
-        }
-        // Add all open TS buffers to the geterr request. They might be visible
-        for (const buffer of this.syncedBuffers.values) {
-            if (this.shouldValidate(buffer)) {
-                orderedFileSet.set(buffer.resource, undefined);
-            }
-        }
-        if (orderedFileSet.size) {
-            let uris = Array.from(orderedFileSet.uris).map(uri => coc_nvim_1.Uri.parse(uri));
-            const getErr = this.pendingGetErr = GetErrRequest.executeGetErrRequest(this.client, uris, () => {
-                if (this.pendingGetErr === getErr) {
-                    this.pendingGetErr = undefined;
-                }
-            });
-        }
-        this.pendingDiagnostics.clear();
-    }
-    updateConfiguration() {
-        const jsConfig = coc_nvim_1.workspace.getConfiguration('javascript', null);
-        const tsConfig = coc_nvim_1.workspace.getConfiguration('typescript', null);
-        this._validateJavaScript = jsConfig.get('validate.enable', true);
-        this._validateTypeScript = tsConfig.get('validate.enable', true);
-    }
-    shouldValidate(buffer) {
-        switch (buffer.kind) {
-            case 2 /* JavaScript */:
-                return this._validateJavaScript;
-            case 1 /* TypeScript */:
-            default:
-                return this._validateTypeScript;
-        }
-    }
-}
-exports.default = BufferSyncSupport;
-
-
-/***/ }),
-/* 119 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.Delayer = void 0;
-class Delayer {
-    constructor(defaultDelay) {
-        this.defaultDelay = defaultDelay;
-        this.timeout = null;
-        this.completionPromise = null;
-        this.onSuccess = null;
-        this.task = null;
-    }
-    trigger(task, delay = this.defaultDelay) {
-        this.task = task;
-        if (delay >= 0) {
-            this.cancelTimeout();
-        }
-        if (!this.completionPromise) {
-            this.completionPromise = new Promise(resolve => {
-                this.onSuccess = resolve;
-            }).then(() => {
-                this.completionPromise = null;
-                this.onSuccess = null;
-                let result = this.task && this.task();
-                this.task = null;
-                return result;
-            });
-        }
-        if (delay >= 0 || this.timeout === null) {
-            this.timeout = setTimeout(() => {
-                this.timeout = null;
-                if (this.onSuccess) {
-                    this.onSuccess(undefined);
-                }
-            }, delay >= 0 ? delay : this.defaultDelay);
-        }
-        return this.completionPromise;
-    }
-    cancelTimeout() {
-        if (this.timeout !== null) {
-            clearTimeout(this.timeout);
-            this.timeout = null;
-        }
-    }
-}
-exports.Delayer = Delayer;
-
-
-/***/ }),
-/* 120 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.mode2ScriptKind = exports.languageIds = exports.jsxTags = exports.javascriptjsx = exports.javascriptreact = exports.javascript = exports.typescriptjsx = exports.typescripttsx = exports.typescriptreact = exports.typescript = void 0;
-exports.typescript = 'typescript';
-exports.typescriptreact = 'typescriptreact';
-exports.typescripttsx = 'typescript.tsx';
-exports.typescriptjsx = 'typescript.jsx';
-exports.javascript = 'javascript';
-exports.javascriptreact = 'javascriptreact';
-exports.javascriptjsx = 'javascript.jsx';
-exports.jsxTags = 'jsx-tags';
-exports.languageIds = [exports.typescript, exports.typescriptreact, exports.javascript, exports.javascriptreact, exports.javascriptjsx, exports.typescripttsx, exports.jsxTags];
-function mode2ScriptKind(mode) {
-    switch (mode) {
-        case exports.typescript:
-            return 'TS';
-        case exports.typescripttsx:
-            return 'TSX';
-        case exports.typescriptjsx:
-            return 'TSX';
-        case exports.typescriptreact:
-            return 'TSX';
-        case exports.javascript:
-            return 'JS';
-        case exports.javascriptreact:
-            return 'JSX';
-    }
-    return undefined;
-}
-exports.mode2ScriptKind = mode2ScriptKind;
-
-
-/***/ }),
-/* 121 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.isWindowsPath = exports.ResourceMap = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-function defaultPathNormalizer(resource) {
-    let u = coc_nvim_1.Uri.parse(resource);
-    if (u.scheme === 'file') {
-        return u.fsPath;
-    }
-    return resource.toString();
-}
-/**
- * Maps of file uris
- *
- * Attempts to handle correct mapping on both case sensitive and case in-sensitive
- * file systems.
- */
-class ResourceMap {
-    constructor(_normalizePath = defaultPathNormalizer) {
-        this._normalizePath = _normalizePath;
-        this._map = new Map();
-    }
-    get size() {
-        return this._map.size;
-    }
-    get entries() {
-        return this._map.values();
-    }
-    has(uri) {
-        const file = this.toKey(uri);
-        return !!file && this._map.has(file);
-    }
-    get(uri) {
-        const file = this.toKey(uri);
-        if (!file)
-            return undefined;
-        let entry = this._map.get(file);
-        return entry ? entry.value : undefined;
-    }
-    set(uri, value) {
-        const file = this.toKey(uri);
-        if (file) {
-            this._map.set(file, { uri, value });
-        }
-    }
-    delete(uri) {
-        const file = this.toKey(uri);
-        if (file) {
-            this._map.delete(file);
-        }
-    }
-    get values() {
-        return Array.from(this._map.values()).map(x => x.value);
-    }
-    get uris() {
-        return Array.from(this._map.values()).map(x => x.uri);
-    }
-    clear() {
-        this._map.clear();
-    }
-    toKey(uri) {
-        const key = this._normalizePath
-            ? this._normalizePath(uri)
-            : uri;
-        if (!key) {
-            return key;
-        }
-        return this.isCaseInsensitivePath(key) ? key.toLowerCase() : key;
-    }
-    isCaseInsensitivePath(path) {
-        if (isWindowsPath(path)) {
-            return true;
-        }
-        return path[0] === '/' && this.onIsCaseInsenitiveFileSystem;
-    }
-    get onIsCaseInsenitiveFileSystem() {
-        if (process.platform === 'win32') {
-            return true;
-        }
-        if (process.platform === 'darwin') {
-            return true;
-        }
-        return false;
-    }
-}
-exports.ResourceMap = ResourceMap;
-function isWindowsPath(path) {
-    return /^[a-zA-Z]:\\/.test(path);
-}
-exports.isWindowsPath = isWindowsPath;
-
-
-/***/ }),
-/* 122 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.DiagnosticsManager = exports.DiagnosticKind = exports.DiagnosticSet = void 0;
-const coc_nvim_1 = __webpack_require__(1);
-const resourceMap_1 = __webpack_require__(121);
-class DiagnosticSet {
-    constructor() {
-        this._map = new resourceMap_1.ResourceMap();
-    }
-    set(uri, diagnostics) {
-        this._map.set(uri, diagnostics);
-    }
-    get(uri) {
-        return this._map.get(uri) || [];
-    }
-    clear() {
-        this._map = new resourceMap_1.ResourceMap();
-    }
-}
-exports.DiagnosticSet = DiagnosticSet;
-var DiagnosticKind;
-(function (DiagnosticKind) {
-    DiagnosticKind[DiagnosticKind["Syntax"] = 0] = "Syntax";
-    DiagnosticKind[DiagnosticKind["Semantic"] = 1] = "Semantic";
-    DiagnosticKind[DiagnosticKind["Suggestion"] = 2] = "Suggestion";
-})(DiagnosticKind = exports.DiagnosticKind || (exports.DiagnosticKind = {}));
-const allDiagnosticKinds = [
-    DiagnosticKind.Syntax,
-    DiagnosticKind.Semantic,
-    DiagnosticKind.Suggestion
-];
-class DiagnosticsManager {
-    constructor() {
-        this._diagnostics = new Map();
-        this._pendingUpdates = new resourceMap_1.ResourceMap();
-        this._enableJavascriptSuggestions = true;
-        this._enableTypescriptSuggestions = true;
-        this.updateDelay = 200;
-        for (const kind of allDiagnosticKinds) {
-            this._diagnostics.set(kind, new DiagnosticSet());
-        }
-        this._currentDiagnostics = coc_nvim_1.languages.createDiagnosticCollection('tsserver');
-    }
-    dispose() {
-        this._currentDiagnostics.dispose();
-        for (const value of this._pendingUpdates.values) {
-            clearTimeout(value);
-        }
-        this._pendingUpdates = new resourceMap_1.ResourceMap();
-    }
-    reInitialize() {
-        this._currentDiagnostics.clear();
-        for (const diagnosticSet of this._diagnostics.values()) {
-            diagnosticSet.clear();
-        }
-    }
-    setEnableSuggestions(languageId, value) {
-        let curr = languageId == 'javascript' ? this._enableJavascriptSuggestions : this._enableTypescriptSuggestions;
-        if (curr == value) {
-            return;
-        }
-        if (languageId == 'javascript') {
-            this._enableJavascriptSuggestions = value;
-        }
-        else {
-            this._enableTypescriptSuggestions = value;
-        }
-    }
-    diagnosticsReceived(kind, uri, diagnostics) {
-        const collection = this._diagnostics.get(kind);
-        if (!collection)
-            return;
-        let doc = coc_nvim_1.workspace.getDocument(uri);
-        if (doc)
-            uri = doc.uri;
-        if (diagnostics.length === 0) {
-            const existing = collection.get(uri);
-            if (existing.length === 0) {
-                // No need to update
-                return;
-            }
-        }
-        collection.set(uri, diagnostics);
-        this.scheduleDiagnosticsUpdate(uri);
-    }
-    configFileDiagnosticsReceived(uri, diagnostics) {
-        this._currentDiagnostics.set(uri, diagnostics);
-    }
-    delete(uri) {
-        this._currentDiagnostics.delete(uri);
-    }
-    getDiagnostics(uri) {
-        return this._currentDiagnostics.get(uri) || [];
-        return [];
-    }
-    scheduleDiagnosticsUpdate(uri) {
-        if (!this._pendingUpdates.has(uri)) {
-            this._pendingUpdates.set(uri, setTimeout(() => this.updateCurrentDiagnostics(uri), this.updateDelay));
-        }
-    }
-    updateCurrentDiagnostics(uri) {
-        if (this._pendingUpdates.has(uri)) {
-            clearTimeout(this._pendingUpdates.get(uri));
-            this._pendingUpdates.delete(uri);
-        }
-        const allDiagnostics = [
-            ...this._diagnostics.get(DiagnosticKind.Syntax).get(uri),
-            ...this._diagnostics.get(DiagnosticKind.Semantic).get(uri),
-            ...this.getSuggestionDiagnostics(uri)
-        ];
-        this._currentDiagnostics.set(uri, allDiagnostics);
-    }
-    getSuggestionDiagnostics(uri) {
-        const enabled = this.suggestionsEnabled(uri);
-        return this._diagnostics
-            .get(DiagnosticKind.Suggestion)
-            .get(uri)
-            .filter(x => {
-            if (!enabled) {
-                // Still show unused
-                return x.code == 6133;
-            }
-            return enabled;
-        });
-    }
-    suggestionsEnabled(uri) {
-        let doc = coc_nvim_1.workspace.getDocument(uri);
-        if (!doc)
-            return false;
-        if (doc.filetype.startsWith('javascript')) {
-            return this._enableJavascriptSuggestions;
-        }
-        if (doc.filetype.startsWith('typescript')) {
-            return this._enableTypescriptSuggestions;
-        }
-        return true;
-    }
-}
-exports.DiagnosticsManager = DiagnosticsManager;
-
-
-/***/ }),
-/* 123 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.RequestQueue = exports.RequestQueueingType = void 0;
-var RequestQueueingType;
-(function (RequestQueueingType) {
-    /**
-     * Normal request that is executed in order.
-     */
-    RequestQueueingType[RequestQueueingType["Normal"] = 1] = "Normal";
-    /**
-     * Request that normal requests jump in front of in the queue.
-     */
-    RequestQueueingType[RequestQueueingType["LowPriority"] = 2] = "LowPriority";
-    /**
-     * A fence that blocks request reordering.
-     *
-     * Fences are not reordered. Unlike a normal request, a fence will never jump in front of a low priority request
-     * in the request queue.
-     */
-    RequestQueueingType[RequestQueueingType["Fence"] = 3] = "Fence";
-})(RequestQueueingType = exports.RequestQueueingType || (exports.RequestQueueingType = {}));
-class RequestQueue {
-    constructor() {
-        this.queue = [];
-        this.sequenceNumber = 0;
-    }
-    get length() {
-        return this.queue.length;
-    }
-    enqueue(item) {
-        if (item.queueingType === RequestQueueingType.Normal) {
-            let index = this.queue.length - 1;
-            while (index >= 0) {
-                if (this.queue[index].queueingType !== RequestQueueingType.LowPriority) {
-                    break;
-                }
-                --index;
-            }
-            this.queue.splice(index + 1, 0, item);
-        }
-        else {
-            // Only normal priority requests can be reordered. All other requests just go to the end.
-            this.queue.push(item);
-        }
-    }
-    dequeue() {
-        return this.queue.shift();
-    }
-    tryDeletePendingRequest(seq) {
-        for (let i = 0; i < this.queue.length; i++) {
-            if (this.queue[i].request.seq === seq) {
-                this.queue.splice(i, 1);
-                return true;
-            }
-        }
-        return false;
-    }
-    createRequest(command, args) {
-        return {
-            seq: this.sequenceNumber++,
-            type: 'request',
-            command,
-            arguments: args
-        };
-    }
-}
-exports.RequestQueue = RequestQueue;
-
-
-/***/ }),
-/* 124 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.TypeScriptServiceConfiguration = exports.TsServerLogLevel = void 0;
-const coc_nvim_1 = __webpack_require__(1);
-const which_1 = __importDefault(__webpack_require__(125));
-var TsServerLogLevel;
-(function (TsServerLogLevel) {
-    TsServerLogLevel[TsServerLogLevel["Off"] = 0] = "Off";
-    TsServerLogLevel[TsServerLogLevel["Normal"] = 1] = "Normal";
-    TsServerLogLevel[TsServerLogLevel["Terse"] = 2] = "Terse";
-    TsServerLogLevel[TsServerLogLevel["Verbose"] = 3] = "Verbose";
-})(TsServerLogLevel = exports.TsServerLogLevel || (exports.TsServerLogLevel = {}));
-(function (TsServerLogLevel) {
-    function fromString(value) {
-        switch (value && value.toLowerCase()) {
-            case 'normal':
-                return TsServerLogLevel.Normal;
-            case 'terse':
-                return TsServerLogLevel.Terse;
-            case 'verbose':
-                return TsServerLogLevel.Verbose;
-            case 'off':
-            default:
-                return TsServerLogLevel.Off;
-        }
-    }
-    TsServerLogLevel.fromString = fromString;
-    function toString(value) {
-        switch (value) {
-            case TsServerLogLevel.Normal:
-                return 'normal';
-            case TsServerLogLevel.Terse:
-                return 'terse';
-            case TsServerLogLevel.Verbose:
-                return 'verbose';
-            case TsServerLogLevel.Off:
-            default:
-                return 'off';
-        }
-    }
-    TsServerLogLevel.toString = toString;
-})(TsServerLogLevel = exports.TsServerLogLevel || (exports.TsServerLogLevel = {}));
-class TypeScriptServiceConfiguration {
-    constructor() {
-        this._configuration = coc_nvim_1.workspace.getConfiguration('tsserver');
-        coc_nvim_1.workspace.onDidChangeConfiguration(() => {
-            this._configuration = coc_nvim_1.workspace.getConfiguration('tsserver');
-        });
-    }
-    get locale() {
-        return this._configuration.get('locale', null);
-    }
-    get globalTsdk() {
-        return this._configuration.get('tsdk', null);
-    }
-    get ignoreLocalTsserver() {
-        return this._configuration.get('ignoreLocalTsserver', false);
-    }
-    get tsServerLogLevel() {
-        return TsServerLogLevel.fromString(this._configuration.get('log', null));
-    }
-    // public readonly watchOptions: protocol.WatchOptions | undefined;
-    get watchOptions() {
-        return this._configuration.get('watchOptions');
-    }
-    get typingsCacheLocation() {
-        return this._configuration.get('typingsCacheLocation', '');
-    }
-    get tsServerPluginPaths() {
-        return this._configuration.get('pluginPaths', []);
-    }
-    get checkJs() {
-        return this._configuration.get('implicitProjectConfig.checkJs', false);
-    }
-    get experimentalDecorators() {
-        return this._configuration.get('implicitProjectConfig.experimentalDecorators', false);
-    }
-    get disableAutomaticTypeAcquisition() {
-        return this._configuration.get('disableAutomaticTypeAcquisition', false);
-    }
-    get formatOnType() {
-        return this._configuration.get('formatOnType', false);
-    }
-    get maxTsServerMemory() {
-        return this._configuration.get('maxTsServerMemory', 0);
-    }
-    get debugPort() {
-        return this._configuration.get('debugPort', parseInt(process.env['TSS_DEBUG'], 10));
-    }
-    get npmLocation() {
-        let path = this._configuration.get('npm', '');
-        if (path)
-            return coc_nvim_1.workspace.expand(path);
-        try {
-            path = which_1.default.sync('npm');
-        }
-        catch (e) {
-            return null;
-        }
-        return path;
-    }
-    static loadFromWorkspace() {
-        return new TypeScriptServiceConfiguration();
-    }
-}
-exports.TypeScriptServiceConfiguration = TypeScriptServiceConfiguration;
-
-
-/***/ }),
-/* 125 */
-/***/ (function(module, exports, __webpack_require__) {
-
-const isWindows = process.platform === 'win32' ||
-    process.env.OSTYPE === 'cygwin' ||
-    process.env.OSTYPE === 'msys'
-
-const path = __webpack_require__(13)
-const COLON = isWindows ? ';' : ':'
-const isexe = __webpack_require__(126)
-
-const getNotFoundError = (cmd) =>
-  Object.assign(new Error(`not found: ${cmd}`), { code: 'ENOENT' })
-
-const getPathInfo = (cmd, opt) => {
-  const colon = opt.colon || COLON
-
-  // If it has a slash, then we don't bother searching the pathenv.
-  // just check the file itself, and that's it.
-  const pathEnv = cmd.match(/\//) || isWindows && cmd.match(/\\/) ? ['']
-    : (
-      [
-        // windows always checks the cwd first
-        ...(isWindows ? [process.cwd()] : []),
-        ...(opt.path || process.env.PATH ||
-          /* istanbul ignore next: very unusual */ '').split(colon),
-      ]
-    )
-  const pathExtExe = isWindows
-    ? opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM'
-    : ''
-  const pathExt = isWindows ? pathExtExe.split(colon) : ['']
-
-  if (isWindows) {
-    if (cmd.indexOf('.') !== -1 && pathExt[0] !== '')
-      pathExt.unshift('')
-  }
-
-  return {
-    pathEnv,
-    pathExt,
-    pathExtExe,
-  }
-}
-
-const which = (cmd, opt, cb) => {
-  if (typeof opt === 'function') {
-    cb = opt
-    opt = {}
-  }
-  if (!opt)
-    opt = {}
-
-  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
-  const found = []
-
-  const step = i => new Promise((resolve, reject) => {
-    if (i === pathEnv.length)
-      return opt.all && found.length ? resolve(found)
-        : reject(getNotFoundError(cmd))
-
-    const ppRaw = pathEnv[i]
-    const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw
-
-    const pCmd = path.join(pathPart, cmd)
-    const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
-      : pCmd
-
-    resolve(subStep(p, i, 0))
-  })
-
-  const subStep = (p, i, ii) => new Promise((resolve, reject) => {
-    if (ii === pathExt.length)
-      return resolve(step(i + 1))
-    const ext = pathExt[ii]
-    isexe(p + ext, { pathExt: pathExtExe }, (er, is) => {
-      if (!er && is) {
-        if (opt.all)
-          found.push(p + ext)
-        else
-          return resolve(p + ext)
-      }
-      return resolve(subStep(p, i, ii + 1))
-    })
-  })
-
-  return cb ? step(0).then(res => cb(null, res), cb) : step(0)
-}
-
-const whichSync = (cmd, opt) => {
-  opt = opt || {}
-
-  const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt)
-  const found = []
-
-  for (let i = 0; i < pathEnv.length; i ++) {
-    const ppRaw = pathEnv[i]
-    const pathPart = /^".*"$/.test(ppRaw) ? ppRaw.slice(1, -1) : ppRaw
-
-    const pCmd = path.join(pathPart, cmd)
-    const p = !pathPart && /^\.[\\\/]/.test(cmd) ? cmd.slice(0, 2) + pCmd
-      : pCmd
-
-    for (let j = 0; j < pathExt.length; j ++) {
-      const cur = p + pathExt[j]
-      try {
-        const is = isexe.sync(cur, { pathExt: pathExtExe })
-        if (is) {
-          if (opt.all)
-            found.push(cur)
-          else
-            return cur
-        }
-      } catch (ex) {}
-    }
-  }
-
-  if (opt.all && found.length)
-    return found
-
-  if (opt.nothrow)
-    return null
-
-  throw getNotFoundError(cmd)
-}
-
-module.exports = which
-which.sync = whichSync
-
-
-/***/ }),
-/* 126 */
-/***/ (function(module, exports, __webpack_require__) {
-
-var fs = __webpack_require__(102)
-var core
-if (process.platform === 'win32' || global.TESTING_WINDOWS) {
-  core = __webpack_require__(127)
-} else {
-  core = __webpack_require__(128)
-}
-
-module.exports = isexe
-isexe.sync = sync
-
-function isexe (path, options, cb) {
-  if (typeof options === 'function') {
-    cb = options
-    options = {}
-  }
-
-  if (!cb) {
-    if (typeof Promise !== 'function') {
-      throw new TypeError('callback not provided')
-    }
-
-    return new Promise(function (resolve, reject) {
-      isexe(path, options || {}, function (er, is) {
-        if (er) {
-          reject(er)
-        } else {
-          resolve(is)
-        }
-      })
-    })
-  }
-
-  core(path, options || {}, function (er, is) {
-    // ignore EACCES because that just means we aren't allowed to run it
-    if (er) {
-      if (er.code === 'EACCES' || options && options.ignoreErrors) {
-        er = null
-        is = false
-      }
-    }
-    cb(er, is)
-  })
-}
-
-function sync (path, options) {
-  // my kingdom for a filtered catch
-  try {
-    return core.sync(path, options || {})
-  } catch (er) {
-    if (options && options.ignoreErrors || er.code === 'EACCES') {
-      return false
-    } else {
-      throw er
-    }
-  }
-}
-
-
-/***/ }),
-/* 127 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = isexe
-isexe.sync = sync
-
-var fs = __webpack_require__(102)
-
-function checkPathExt (path, options) {
-  var pathext = options.pathExt !== undefined ?
-    options.pathExt : process.env.PATHEXT
-
-  if (!pathext) {
-    return true
-  }
-
-  pathext = pathext.split(';')
-  if (pathext.indexOf('') !== -1) {
-    return true
-  }
-  for (var i = 0; i < pathext.length; i++) {
-    var p = pathext[i].toLowerCase()
-    if (p && path.substr(-p.length).toLowerCase() === p) {
-      return true
-    }
-  }
-  return false
-}
-
-function checkStat (stat, path, options) {
-  if (!stat.isSymbolicLink() && !stat.isFile()) {
-    return false
-  }
-  return checkPathExt(path, options)
-}
-
-function isexe (path, options, cb) {
-  fs.stat(path, function (er, stat) {
-    cb(er, er ? false : checkStat(stat, path, options))
-  })
-}
-
-function sync (path, options) {
-  return checkStat(fs.statSync(path), path, options)
-}
-
-
-/***/ }),
-/* 128 */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = isexe
-isexe.sync = sync
-
-var fs = __webpack_require__(102)
-
-function isexe (path, options, cb) {
-  fs.stat(path, function (er, stat) {
-    cb(er, er ? false : checkStat(stat, options))
-  })
-}
-
-function sync (path, options) {
-  return checkStat(fs.statSync(path), options)
-}
-
-function checkStat (stat, options) {
-  return stat.isFile() && checkMode(stat, options)
-}
-
-function checkMode (stat, options) {
-  var mod = stat.mode
-  var uid = stat.uid
-  var gid = stat.gid
-
-  var myUid = options.uid !== undefined ?
-    options.uid : process.getuid && process.getuid()
-  var myGid = options.gid !== undefined ?
-    options.gid : process.getgid && process.getgid()
-
-  var u = parseInt('100', 8)
-  var g = parseInt('010', 8)
-  var o = parseInt('001', 8)
-  var ug = u | g
-
-  var ret = (mod & o) ||
-    (mod & g) && gid === myGid ||
-    (mod & u) && uid === myUid ||
-    (mod & ug) && myUid === 0
-
-  return ret
-}
-
-
-/***/ }),
-/* 129 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-const is = __importStar(__webpack_require__(130));
-class Logger {
-    get output() {
-        if (this._channel) {
-            return this._channel;
-        }
-        this._channel = coc_nvim_1.workspace.createOutputChannel('tsserver');
-        return this._channel;
-    }
-    dispose() {
-        if (this._channel) {
-            this._channel.dispose();
-        }
-    }
-    data2String(data) {
-        if (data instanceof Error) {
-            if (is.string(data.stack)) {
-                return data.stack;
-            }
-            return data.message;
-        }
-        if (is.boolean(data.success) && !data.success && is.string(data.message)) {
-            return data.message;
-        }
-        if (is.string(data)) {
-            return data;
-        }
-        return data.toString();
-    }
-    info(message, data) {
-        this.logLevel('Info', message, data);
-    }
-    warn(message, data) {
-        this.logLevel('Warn', message, data);
-    }
-    error(message, data) {
-        // See https://github.com/Microsoft/TypeScript/issues/10496
-        if (data && data.message === 'No content available.') {
-            return;
-        }
-        this.logLevel('Error', message, data);
-    }
-    logLevel(level, message, data) {
-        this.output.appendLine(`[${level}  - ${new Date().toLocaleTimeString()}] ${message}`);
-        if (data) {
-            this.output.appendLine(this.data2String(data));
-        }
-    }
-}
-exports.default = Logger;
-
-
-/***/ }),
-/* 130 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.string = exports.boolean = exports.defined = void 0;
-const toString = Object.prototype.toString;
-function defined(value) {
-    return typeof value !== 'undefined';
-}
-exports.defined = defined;
-function boolean(value) {
-    return value === true || value === false;
-}
-exports.boolean = boolean;
-function string(value) {
-    return toString.call(value) === '[object String]';
-}
-exports.string = string;
-
-
-/***/ }),
-/* 131 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.fork = exports.getTempFile = exports.getTempDirectory = exports.makeRandomHexString = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const child_process_1 = __importDefault(__webpack_require__(101));
-const net_1 = __importDefault(__webpack_require__(16));
-const os_1 = __importDefault(__webpack_require__(14));
-const path_1 = __importDefault(__webpack_require__(13));
-const fs_1 = __importDefault(__webpack_require__(102));
-function makeRandomHexString(length) {
-    let chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
-    let result = '';
-    for (let i = 0; i < length; i++) {
-        const idx = Math.floor(chars.length * Math.random());
-        result += chars[idx];
-    }
-    return result;
-}
-exports.makeRandomHexString = makeRandomHexString;
-function getTempDirectory() {
-    let dir = path_1.default.join(os_1.default.tmpdir(), `coc.nvim-${process.pid}`);
-    if (!fs_1.default.existsSync(dir)) {
-        fs_1.default.mkdirSync(dir);
-    }
-    return dir;
-}
-exports.getTempDirectory = getTempDirectory;
-function generatePipeName() {
-    return getPipeName(makeRandomHexString(40));
-}
-function getPipeName(name) {
-    const fullName = 'coc-tsc-' + name;
-    if (process.platform === 'win32') {
-        return '\\\\.\\pipe\\' + fullName + '-sock';
-    }
-    const tmpdir = getTempDirectory();
-    // Mac/Unix: use socket file
-    return path_1.default.join(tmpdir, fullName + '.sock');
-}
-function getTempFile(name) {
-    const fullName = 'coc-nvim-' + name;
-    return path_1.default.join(getTempDirectory(), fullName + '.sock');
-}
-exports.getTempFile = getTempFile;
-function generatePatchedEnv(env, stdInPipeName, stdOutPipeName, stdErrPipeName) {
-    const newEnv = Object.assign({}, env);
-    // Set the two unique pipe names and the electron flag as process env
-    newEnv['STDIN_PIPE_NAME'] = stdInPipeName; // tslint:disable-line
-    newEnv['STDOUT_PIPE_NAME'] = stdOutPipeName; // tslint:disable-line
-    newEnv['STDERR_PIPE_NAME'] = stdErrPipeName; // tslint:disable-line
-    newEnv['TSS_LOG'] = `-level verbose -file ${path_1.default.join(os_1.default.tmpdir(), 'coc-nvim-tsc.log')}`; // tslint:disable-line
-    // Ensure we always have a PATH set
-    newEnv['PATH'] = newEnv['PATH'] || process.env.PATH; // tslint:disable-line
-    return newEnv;
-}
-function fork(modulePath, args, options, logger, callback) {
-    let callbackCalled = false;
-    const resolve = (result) => {
-        if (callbackCalled) {
-            return;
-        }
-        callbackCalled = true;
-        callback(null, result);
-    };
-    const reject = (err) => {
-        if (callbackCalled) {
-            return;
-        }
-        callbackCalled = true;
-        callback(err, null);
-    };
-    // Generate three unique pipe names
-    const stdInPipeName = generatePipeName();
-    const stdOutPipeName = generatePipeName();
-    const stdErrPipeName = generatePipeName();
-    const newEnv = generatePatchedEnv(process.env, stdInPipeName, stdOutPipeName, stdErrPipeName);
-    newEnv['NODE_PATH'] = path_1.default.join(modulePath, '..', '..', '..'); // tslint:disable-line
-    let childProcess;
-    // Begin listening to stderr pipe
-    let stdErrServer = net_1.default.createServer(stdErrStream => {
-        // From now on the childProcess.stderr is available for reading
-        childProcess.stderr = stdErrStream;
-    });
-    stdErrServer.listen(stdErrPipeName);
-    // Begin listening to stdout pipe
-    let stdOutServer = net_1.default.createServer(stdOutStream => {
-        // The child process will write exactly one chunk with content `ready` when it has installed a listener to the stdin pipe
-        stdOutStream.once('data', (_chunk) => {
-            // The child process is sending me the `ready` chunk, time to connect to the stdin pipe
-            childProcess.stdin = net_1.default.connect(stdInPipeName);
-            // From now on the childProcess.stdout is available for reading
-            childProcess.stdout = stdOutStream;
-            resolve(childProcess);
-        });
-    });
-    stdOutServer.listen(stdOutPipeName);
-    let serverClosed = false;
-    const closeServer = () => {
-        if (serverClosed) {
-            return;
-        }
-        serverClosed = true;
-        stdOutServer.close();
-        stdErrServer.close();
-    };
-    // Create the process
-    logger.info('Forking TSServer', `PATH: ${newEnv['PATH']} `);
-    const bootstrapperPath = path_1.default.resolve(__dirname, '../bin/tsserverForkStart');
-    childProcess = child_process_1.default.fork(bootstrapperPath, [modulePath].concat(args), {
-        silent: true,
-        env: newEnv,
-        execArgv: options.execArgv
-    });
-    childProcess.once('error', (err) => {
-        closeServer();
-        reject(err);
-    });
-    childProcess.once('exit', (err) => {
-        closeServer();
-        reject(err);
-    });
-}
-exports.fork = fork;
-
-
-/***/ }),
-/* 132 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const coc_nvim_1 = __webpack_require__(1);
-var Trace;
-(function (Trace) {
-    Trace[Trace["Off"] = 0] = "Off";
-    Trace[Trace["Messages"] = 1] = "Messages";
-    Trace[Trace["Verbose"] = 2] = "Verbose";
-})(Trace || (Trace = {}));
-(function (Trace) {
-    function fromString(value) {
-        value = value || '';
-        value = value.toLowerCase();
-        switch (value) {
-            case 'off':
-                return Trace.Off;
-            case 'messages':
-                return Trace.Messages;
-            case 'verbose':
-                return Trace.Verbose;
-            default:
-                return Trace.Off;
-        }
-    }
-    Trace.fromString = fromString;
-})(Trace || (Trace = {}));
-class Tracer {
-    constructor(logger) {
-        this.logger = logger;
-        this.trace = Tracer.readTrace();
-    }
-    static readTrace() {
-        let result = Trace.fromString(coc_nvim_1.workspace.getConfiguration('tsserver').get('trace.server', 'off'));
-        if (result === Trace.Off && !!process.env.TSS_TRACE) {
-            result = Trace.Messages;
-        }
-        return result;
-    }
-    traceRequest(request, responseExpected, queueLength) {
-        if (this.trace === Trace.Off)
-            return;
-        let data;
-        if (this.trace === Trace.Verbose && request.arguments) {
-            data = `Arguments: ${JSON.stringify(request.arguments, null, 4)}`;
-        }
-        this.logTrace(`Sending request: ${request.command} (${request.seq}). Response expected: ${responseExpected ? 'yes' : 'no'}. Current queue length: ${queueLength}`, data);
-    }
-    traceResponse(response, startTime) {
-        if (this.trace === Trace.Off) {
-            return;
-        }
-        let data;
-        if (this.trace === Trace.Verbose && response.body) {
-            data = `Result: ${JSON.stringify(response.body, null, 4)}`;
-        }
-        this.logTrace(`Response received: ${response.command} (${response.request_seq}). Request took ${Date.now() - startTime} ms. Success: ${response.success} ${!response.success ? '. Message: ' + response.message : ''}`, data);
-    }
-    traceEvent(event) {
-        if (this.trace === Trace.Off) {
-            return;
-        }
-        let data;
-        if (this.trace === Trace.Verbose && event.body) {
-            data = `Data: ${JSON.stringify(event.body, null, 4)}`;
-        }
-        this.logTrace(`Event received: ${event.event} (${event.seq}).`, data);
-    }
-    logTrace(message, data) {
-        if (this.trace !== Trace.Off) {
-            this.logger.logLevel('Trace', message, data);
-        }
-    }
-    traceRequestCompleted(command, request_seq, startTime) {
-        if (this.trace === Trace.Off) {
-            return;
-        }
-        this.logTrace(`Async response received: ${command} (${request_seq}). Request took ${Date.now() - startTime} ms.`);
-    }
-}
-exports.default = Tracer;
-
-
-/***/ }),
-/* 133 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.inferredProjectConfig = void 0;
-function inferredProjectConfig(config) {
-    const base = {
-        module: 'commonjs',
-        target: 'es2016',
-        jsx: 'preserve'
-    };
-    if (config.checkJs) {
-        base.checkJs = true;
-    }
-    if (config.experimentalDecorators) {
-        base.experimentalDecorators = true;
-    }
-    return base;
-}
-exports.inferredProjectConfig = inferredProjectConfig;
-
-
-/***/ }),
-/* 134 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.TypeScriptVersionProvider = exports.TypeScriptVersion = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const fs_1 = __importDefault(__webpack_require__(102));
-const path_1 = __importDefault(__webpack_require__(13));
-const coc_nvim_1 = __webpack_require__(1);
-const api_1 = __importDefault(__webpack_require__(40));
-const requireFunc =  true ? require : undefined;
-class TypeScriptVersion {
-    constructor(path, _pathLabel) {
-        this.path = path;
-        this._pathLabel = _pathLabel;
-        this._api = null;
-    }
-    get tscPath() {
-        return path_1.default.resolve(this.path, '../bin/tsc');
-    }
-    get tsServerPath() {
-        return path_1.default.resolve(this.path, 'tsserver.js');
-    }
-    get pathLabel() {
-        return typeof this._pathLabel === 'undefined' ? this.path : this._pathLabel;
-    }
-    get isValid() {
-        return this.version != null;
-    }
-    get version() {
-        if (this._api)
-            return this._api;
-        let api = this._api = this.getTypeScriptVersion(this.tsServerPath);
-        return api;
-    }
-    get versionString() {
-        const version = this.version;
-        return version ? version.versionString : null;
-    }
-    getTypeScriptVersion(serverPath) {
-        if (!fs_1.default.existsSync(serverPath)) {
-            return undefined;
-        }
-        const p = serverPath.split(path_1.default.sep);
-        if (p.length <= 2) {
-            return undefined;
-        }
-        const p2 = p.slice(0, -2);
-        const modulePath = p2.join(path_1.default.sep);
-        let fileName = path_1.default.join(modulePath, 'package.json');
-        if (!fs_1.default.existsSync(fileName)) {
-            // Special case for ts dev versions
-            if (path_1.default.basename(modulePath) === 'built') {
-                fileName = path_1.default.join(modulePath, '..', 'package.json');
-            }
-        }
-        if (!fs_1.default.existsSync(fileName)) {
-            return undefined;
-        }
-        const contents = fs_1.default.readFileSync(fileName).toString();
-        let desc = null;
-        try {
-            desc = JSON.parse(contents);
-        }
-        catch (err) {
-            return undefined;
-        }
-        if (!desc || !desc.version) {
-            return undefined;
-        }
-        return desc.version ? api_1.default.fromVersionString(desc.version) : undefined;
-    }
-}
-exports.TypeScriptVersion = TypeScriptVersion;
-const MODULE_FOLDERS = ['node_modules/typescript/lib', '.vscode/pnpify/typescript/lib', '.yarn/sdks/typescript/lib'];
-class TypeScriptVersionProvider {
-    constructor(configuration) {
-        this.configuration = configuration;
-    }
-    updateConfiguration(configuration) {
-        this.configuration = configuration;
-    }
-    getDefaultVersion() {
-        // tsdk from configuration
-        let { globalTsdk } = this.configuration;
-        if (globalTsdk)
-            return new TypeScriptVersion(globalTsdk);
-        return this.bundledVersion;
-    }
-    get globalVersion() {
-        let { globalTsdk } = this.configuration;
-        if (globalTsdk)
-            return new TypeScriptVersion(coc_nvim_1.workspace.expand(globalTsdk));
-        return undefined;
-    }
-    getLocalVersion() {
-        let folders = coc_nvim_1.workspace.workspaceFolders.map(f => coc_nvim_1.Uri.parse(f.uri).fsPath);
-        for (let p of folders) {
-            for (let folder of MODULE_FOLDERS) {
-                let libFolder = path_1.default.join(p, folder);
-                if (fs_1.default.existsSync(libFolder)) {
-                    let version = new TypeScriptVersion(libFolder);
-                    if (version.isValid)
-                        return version;
-                }
-            }
-        }
-        return null;
-    }
-    get bundledVersion() {
-        try {
-            const file = requireFunc.resolve('typescript');
-            const bundledVersion = new TypeScriptVersion(path_1.default.dirname(file), '');
-            return bundledVersion;
-        }
-        catch (e) {
-            coc_nvim_1.workspace.showMessage('Bundled typescript module not found', 'error');
-            return null;
-        }
-    }
-}
-exports.TypeScriptVersionProvider = TypeScriptVersionProvider;
-
-
-/***/ }),
-/* 135 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-class VersionStatus {
-    constructor(_normalizePath, enableJavascript) {
-        this._normalizePath = _normalizePath;
-        this.enableJavascript = enableJavascript;
-        this._versionBarEntry = coc_nvim_1.workspace.createStatusBarItem(99);
-        this._onChangeEditorSub = coc_nvim_1.events.on('BufEnter', this.onBufEnter, this);
-        this._versionBarEntry.show();
-    }
-    dispose() {
-        this._versionBarEntry.dispose();
-        this._onChangeEditorSub.dispose();
-    }
-    onDidChangeTypeScriptVersion(_version) {
-        this._versionBarEntry.text = `TSC`;
-    }
-    set loading(isLoading) {
-        this._versionBarEntry.isProgress = isLoading;
-    }
-    checkFiletype(filetype) {
-        if (filetype.startsWith('javascript') && this.enableJavascript) {
-            return true;
-        }
-        return filetype.startsWith('typescript');
-    }
-    async onBufEnter(bufnr) {
-        let filetype = await coc_nvim_1.workspace.nvim.call('getbufvar', [bufnr, '&filetype', '']);
-        if (this.checkFiletype(filetype)) {
-            this._versionBarEntry.show();
-        }
-        else {
-            this._versionBarEntry.hide();
-        }
-    }
-}
-exports.default = VersionStatus;
-
-
-/***/ }),
-/* 136 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.Reader = void 0;
-const DefaultSize = 8192;
-const ContentLength = 'Content-Length: ';
-const ContentLengthSize = Buffer.byteLength(ContentLength, 'utf8');
-const Blank = Buffer.from(' ', 'utf8')[0];
-const BackslashR = Buffer.from('\r', 'utf8')[0];
-const BackslashN = Buffer.from('\n', 'utf8')[0];
-class ProtocolBuffer {
-    constructor() {
-        this.index = 0;
-        this.buffer = Buffer.allocUnsafe(DefaultSize);
-    }
-    append(data) {
-        let toAppend = null;
-        if (Buffer.isBuffer(data)) {
-            toAppend = data;
-        }
-        else {
-            toAppend = Buffer.from(data, 'utf8');
-        }
-        if (this.buffer.length - this.index >= toAppend.length) {
-            toAppend.copy(this.buffer, this.index, 0, toAppend.length);
-        }
-        else {
-            let newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) *
-                DefaultSize;
-            if (this.index === 0) {
-                this.buffer = Buffer.allocUnsafe(newSize);
-                toAppend.copy(this.buffer, 0, 0, toAppend.length);
-            }
-            else {
-                this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
-            }
-        }
-        this.index += toAppend.length;
-    }
-    tryReadContentLength() {
-        let result = -1;
-        let current = 0;
-        // we are utf8 encoding...
-        while (current < this.index &&
-            (this.buffer[current] === Blank ||
-                this.buffer[current] === BackslashR ||
-                this.buffer[current] === BackslashN)) {
-            current++;
-        }
-        if (this.index < current + ContentLengthSize) {
-            return result;
-        }
-        current += ContentLengthSize;
-        let start = current;
-        while (current < this.index && this.buffer[current] !== BackslashR) {
-            current++;
-        }
-        if (current + 3 >= this.index ||
-            this.buffer[current + 1] !== BackslashN ||
-            this.buffer[current + 2] !== BackslashR ||
-            this.buffer[current + 3] !== BackslashN) {
-            return result;
-        }
-        let data = this.buffer.toString('utf8', start, current);
-        result = parseInt(data, 10);
-        this.buffer = this.buffer.slice(current + 4);
-        this.index = this.index - (current + 4);
-        return result;
-    }
-    tryReadContent(length) {
-        if (this.index < length) {
-            return null;
-        }
-        let result = this.buffer.toString('utf8', 0, length);
-        let sourceStart = length;
-        while (sourceStart < this.index &&
-            (this.buffer[sourceStart] === BackslashR ||
-                this.buffer[sourceStart] === BackslashN)) {
-            sourceStart++;
-        }
-        this.buffer.copy(this.buffer, 0, sourceStart);
-        this.index = this.index - sourceStart;
-        return result;
-    }
-}
-class Reader {
-    constructor(readable, callback, onError) {
-        this.readable = readable;
-        this.callback = callback;
-        this.onError = onError;
-        this.buffer = new ProtocolBuffer();
-        this.nextMessageLength = -1;
-        this.readable.on('data', (data) => {
-            this.onLengthData(data);
-        });
-    }
-    onLengthData(data) {
-        try {
-            this.buffer.append(data);
-            while (true) {
-                if (this.nextMessageLength === -1) {
-                    this.nextMessageLength = this.buffer.tryReadContentLength();
-                    if (this.nextMessageLength === -1) {
-                        return;
-                    }
-                }
-                const msg = this.buffer.tryReadContent(this.nextMessageLength);
-                if (msg === null) {
-                    return;
-                }
-                this.nextMessageLength = -1;
-                const json = JSON.parse(msg);
-                this.callback(json);
-            }
-        }
-        catch (e) {
-            this.onError(e);
-        }
-    }
-}
-exports.Reader = Reader;
-
-
-/***/ }),
-/* 137 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.AtaProgressReporter = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const typingsInstallTimeout = 30 * 1000;
-class TypingsStatus {
-    constructor(client) {
-        this._acquiringTypings = Object.create({});
-        this._subscriptions = [];
-        this._client = client;
-        this._subscriptions.push(this._client.onDidBeginInstallTypings(event => this.onBeginInstallTypings(event.eventId)));
-        this._subscriptions.push(this._client.onDidEndInstallTypings(event => this.onEndInstallTypings(event.eventId)));
-    }
-    dispose() {
-        this._subscriptions.forEach(x => x.dispose());
-        for (const eventId of Object.keys(this._acquiringTypings)) {
-            clearTimeout(this._acquiringTypings[eventId]);
-        }
-    }
-    get isAcquiringTypings() {
-        return Object.keys(this._acquiringTypings).length > 0;
-    }
-    onBeginInstallTypings(eventId) {
-        if (this._acquiringTypings[eventId]) {
-            return;
-        }
-        this._acquiringTypings[eventId] = setTimeout(() => {
-            this.onEndInstallTypings(eventId);
-        }, typingsInstallTimeout);
-    }
-    onEndInstallTypings(eventId) {
-        const timer = this._acquiringTypings[eventId];
-        if (timer) {
-            clearTimeout(timer);
-        }
-        delete this._acquiringTypings[eventId];
-    }
-}
-exports.default = TypingsStatus;
-class AtaProgressReporter {
-    constructor(client) {
-        this._promises = new Map();
-        this._invalid = false;
-        this.statusItem = coc_nvim_1.workspace.createStatusBarItem(10, { progress: true });
-        const disposables = [];
-        disposables.push(client.onDidBeginInstallTypings(e => this._onBegin(e.eventId)));
-        disposables.push(client.onDidEndInstallTypings(e => this._onEndOrTimeout(e.eventId)));
-        disposables.push(client.onTypesInstallerInitializationFailed(_ => this.onTypesInstallerInitializationFailed()));
-        this._disposable = vscode_languageserver_protocol_1.Disposable.create(() => {
-            disposables.forEach(disposable => {
-                disposable.dispose();
-            });
-        });
-    }
-    dispose() {
-        this._disposable.dispose();
-        this._promises.forEach(value => value());
-    }
-    _onBegin(eventId) {
-        const handle = setTimeout(() => this._onEndOrTimeout(eventId), typingsInstallTimeout);
-        new Promise(resolve => {
-            this._promises.set(eventId, () => {
-                clearTimeout(handle);
-                resolve();
-            });
-        });
-        this.statusItem.text = 'Fetching data for better TypeScript IntelliSense';
-        this.statusItem.show();
-    }
-    _onEndOrTimeout(eventId) {
-        this.statusItem.hide();
-        const resolve = this._promises.get(eventId);
-        if (resolve) {
-            this._promises.delete(eventId);
-            resolve();
-        }
-    }
-    onTypesInstallerInitializationFailed() {
-        this.statusItem.hide();
-        if (!this._invalid) {
-            coc_nvim_1.workspace.showMessage('Could not install typings files for JavaScript language features. Please ensure that NPM is installed', 'error');
-        }
-        this._invalid = true;
-    }
-}
-exports.AtaProgressReporter = AtaProgressReporter;
-
-
-/***/ }),
-/* 138 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const coc_nvim_1 = __webpack_require__(1);
-const path_1 = __importDefault(__webpack_require__(13));
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const countRegex = /Found\s+(\d+)\s+error/;
-const errorRegex = /^(.+)\((\d+),(\d+)\):\s(\w+)\sTS(\d+):\s*(.+)$/;
-var TscStatus;
-(function (TscStatus) {
-    TscStatus[TscStatus["INIT"] = 0] = "INIT";
-    TscStatus[TscStatus["COMPILING"] = 1] = "COMPILING";
-    TscStatus[TscStatus["RUNNING"] = 2] = "RUNNING";
-    TscStatus[TscStatus["ERROR"] = 3] = "ERROR";
-})(TscStatus || (TscStatus = {}));
-class WatchProject {
-    constructor(client) {
-        this.client = client;
-        this.disposables = [];
-        this.statusItem = coc_nvim_1.workspace.createStatusBarItem(1, { progress: true });
-        let task = this.task = coc_nvim_1.workspace.createTask('TSC');
-        this.disposables.push(coc_nvim_1.commands.registerCommand(WatchProject.id, async () => {
-            let opts = this.options = await this.getOptions();
-            await this.start(opts);
-        }));
-        task.onExit(code => {
-            if (code != 0) {
-                coc_nvim_1.workspace.showMessage(`TSC exit with code ${code}`, 'warning');
-            }
-            this.onStop();
-        });
-        task.onStdout(lines => {
-            for (let line of lines) {
-                this.onLine(line);
-            }
-        });
-        task.onStderr(lines => {
-            coc_nvim_1.workspace.showMessage(`TSC error: ` + lines.join('\n'), 'error');
-        });
-        this.disposables.push(vscode_languageserver_protocol_1.Disposable.create(() => {
-            task.dispose();
-        }));
-        this.check().catch(_e => {
-            // noop
-        });
-    }
-    async check() {
-        let running = await this.task.running;
-        if (running) {
-            this.options = await this.getOptions();
-            this.statusItem.isProgress = false;
-            this.statusItem.text = '?';
-            this.statusItem.show();
-        }
-        else {
-            this.onStop();
-        }
-    }
-    async start(options) {
-        await this.task.start(options);
-    }
-    onStop() {
-        this.statusItem.hide();
-    }
-    onStart() {
-        this.statusItem.text = 'compiling';
-        this.statusItem.isProgress = true;
-        this.statusItem.show();
-        coc_nvim_1.workspace.nvim.call('setqflist', [[]], true);
-    }
-    onLine(line) {
-        if (countRegex.test(line)) {
-            let ms = line.match(countRegex);
-            this.statusItem.text = ms[1] == '0' ? '✓' : '✗';
-            this.statusItem.isProgress = false;
-        }
-        else if (WatchProject.startTexts.findIndex(s => line.indexOf(s) !== -1) != -1) {
-            this.onStart();
-        }
-        else {
-            let ms = line.match(errorRegex);
-            if (!ms)
-                return;
-            let fullpath = path_1.default.join(this.options.cwd, ms[1]);
-            let uri = coc_nvim_1.Uri.file(fullpath).toString();
-            let doc = coc_nvim_1.workspace.getDocument(uri);
-            let bufnr = doc ? doc.bufnr : null;
-            let item = {
-                filename: fullpath,
-                lnum: Number(ms[2]),
-                col: Number(ms[3]),
-                text: `[tsc ${ms[5]}] ${ms[6]}`,
-                type: /error/i.test(ms[4]) ? 'E' : 'W'
-            };
-            if (bufnr)
-                item.bufnr = bufnr;
-            coc_nvim_1.workspace.nvim.call('setqflist', [[item], 'a']);
-        }
-    }
-    async getOptions() {
-        let { tscPath } = this.client;
-        if (!tscPath) {
-            coc_nvim_1.workspace.showMessage(`Local & global tsc not found`, 'error');
-            return;
-        }
-        let find = await coc_nvim_1.workspace.findUp(['tsconfig.json']);
-        if (!find) {
-            coc_nvim_1.workspace.showMessage('tsconfig.json not found!', 'error');
-            return;
-        }
-        let root = path_1.default.dirname(find);
-        return {
-            cmd: tscPath,
-            args: ['-p', 'tsconfig.json', '--watch', 'true', '--pretty', 'false'],
-            cwd: root
-        };
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-    }
-}
-exports.default = WatchProject;
-WatchProject.id = 'tsserver.watchBuild';
-WatchProject.startTexts = ['Starting compilation in watch mode', 'Starting incremental compilation'];
-
-
-/***/ }),
-/* 139 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const coc_nvim_1 = __webpack_require__(1);
-const typeConverters = __importStar(__webpack_require__(37));
-const api_1 = __importDefault(__webpack_require__(40));
-function getSymbolKind(item) {
-    switch (item.kind) {
-        case 'method':
-            return vscode_languageserver_protocol_1.SymbolKind.Method;
-        case 'enum':
-            return vscode_languageserver_protocol_1.SymbolKind.Enum;
-        case 'function':
-            return vscode_languageserver_protocol_1.SymbolKind.Function;
-        case 'class':
-            return vscode_languageserver_protocol_1.SymbolKind.Class;
-        case 'interface':
-            return vscode_languageserver_protocol_1.SymbolKind.Interface;
-        case 'var':
-            return vscode_languageserver_protocol_1.SymbolKind.Variable;
-        default:
-            return vscode_languageserver_protocol_1.SymbolKind.Variable;
-    }
-}
-class TypeScriptWorkspaceSymbolProvider {
-    constructor(client, languageIds) {
-        this.client = client;
-        this.languageIds = languageIds;
-    }
-    async provideWorkspaceSymbols(search, token) {
-        let filepath;
-        if (this.searchAllOpenProjects) {
-            filepath = undefined;
-        }
-        else {
-            let uri = this.getUri();
-            filepath = uri ? this.client.toPath(uri) : undefined;
-            if (!filepath && this.client.apiVersion.lt(api_1.default.v390)) {
-                return [];
-            }
-        }
-        const args = {
-            file: filepath,
-            searchValue: search,
-            maxResultCount: 256,
-        };
-        const response = await this.client.execute('navto', args, token);
-        if (response.type !== 'response' || response.body == null)
-            return [];
-        const result = [];
-        for (const item of response.body) {
-            if (!item.containerName && item.kind === 'alias') {
-                continue;
-            }
-            const label = TypeScriptWorkspaceSymbolProvider.getLabel(item);
-            const range = {
-                start: typeConverters.Position.fromLocation(item.start),
-                end: typeConverters.Position.fromLocation(item.end),
-            };
-            const symbolInfo = vscode_languageserver_protocol_1.SymbolInformation.create(label, getSymbolKind(item), range, this.client.toResource(item.file));
-            result.push(symbolInfo);
-        }
-        return result;
-    }
-    static getLabel(item) {
-        let label = item.name;
-        if (item.kind === 'method' || item.kind === 'function') {
-            label += '()';
-        }
-        return label;
-    }
-    getUri() {
-        // typescript wants to have a resource even when asking
-        // general questions so we check the active editor. If this
-        // doesn't match we take the first TS document.
-        const documents = coc_nvim_1.workspace.textDocuments;
-        for (const document of documents) {
-            if (this.languageIds.indexOf(document.languageId) >= 0) {
-                return document.uri;
-            }
-        }
-        return undefined;
-    }
-    get searchAllOpenProjects() {
-        return this.client.apiVersion.gte(api_1.default.v390)
-            && coc_nvim_1.workspace.getConfiguration('typescript').get('workspaceSymbols.scope', 'allOpenProjects') === 'allOpenProjects';
-    }
-}
-exports.default = TypeScriptWorkspaceSymbolProvider;
-
-
-/***/ }),
-/* 140 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.standardLanguageDescriptions = void 0;
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-const languageModeIds = __importStar(__webpack_require__(120));
-exports.standardLanguageDescriptions = [
-    {
-        id: 'typescript',
-        diagnosticSource: 'ts',
-        diagnosticOwner: 'typescript',
-        modeIds: [languageModeIds.typescript, languageModeIds.typescriptreact,
-            languageModeIds.typescripttsx, languageModeIds.typescriptjsx],
-        diagnosticLanguage: 1 /* TypeScript */,
-        configFile: 'tsconfig.json',
-        configFilePattern: /^tsconfig(\..*)?\.json$/gi
-    },
-    {
-        id: 'javascript',
-        diagnosticSource: 'ts',
-        diagnosticOwner: 'typescript',
-        modeIds: [languageModeIds.javascript, languageModeIds.javascriptreact, languageModeIds.javascriptjsx],
-        diagnosticLanguage: 0 /* JavaScript */,
-        configFile: 'jsconfig.json',
-        configFilePattern: /^jsconfig(\..*)?\.json$/gi
-    }
-];
-
-
-/***/ }),
-/* 141 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.ConfigurePluginCommand = exports.AutoFixCommand = exports.TypeScriptGoToProjectConfigCommand = exports.OpenTsServerLogCommand = exports.ReloadProjectsCommand = void 0;
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-const typeConverters = __importStar(__webpack_require__(37));
-const vscode_languageserver_types_1 = __webpack_require__(18);
-const modules_1 = __webpack_require__(100);
-const helper_1 = __webpack_require__(98);
-class ReloadProjectsCommand {
-    constructor(service) {
-        this.service = service;
-        this.id = 'tsserver.reloadProjects';
-    }
-    async execute() {
-        let client = await this.service.getClientHost();
-        client.reloadProjects();
-        coc_nvim_1.workspace.showMessage('projects reloaded');
-    }
-}
-exports.ReloadProjectsCommand = ReloadProjectsCommand;
-class OpenTsServerLogCommand {
-    constructor(service) {
-        this.service = service;
-        this.id = 'tsserver.openTsServerLog';
-    }
-    async execute() {
-        let client = await this.service.getClientHost();
-        client.serviceClient.openTsServerLogFile(); // tslint:disable-line
-    }
-}
-exports.OpenTsServerLogCommand = OpenTsServerLogCommand;
-class TypeScriptGoToProjectConfigCommand {
-    constructor(service) {
-        this.service = service;
-        this.id = 'tsserver.goToProjectConfig';
-    }
-    async execute() {
-        let client = await this.service.getClientHost();
-        let doc = await coc_nvim_1.workspace.document;
-        let { languageId } = doc.textDocument;
-        if (client.serviceClient.modeIds.indexOf(languageId) == -1) {
-            throw new Error(`Could not determine TypeScript or JavaScript project. Unsupported file type: ${languageId}`);
-            return;
-        }
-        await goToProjectConfig(client, doc.uri);
-    }
-}
-exports.TypeScriptGoToProjectConfigCommand = TypeScriptGoToProjectConfigCommand;
-async function goToProjectConfig(clientHost, uri) {
-    const client = clientHost.serviceClient;
-    const file = client.toPath(uri);
-    let res;
-    try {
-        res = await client.execute('projectInfo', { file, needFileNameList: false }, vscode_languageserver_protocol_1.CancellationToken.None);
-    }
-    catch (_a) {
-        // noop
-    }
-    if (!res || !res.body) {
-        coc_nvim_1.workspace.showMessage('Could not determine TypeScript or JavaScript project.', 'warning');
-        return;
-    }
-    const { configFileName } = res.body;
-    if (configFileName && !isImplicitProjectConfigFile(configFileName)) {
-        await coc_nvim_1.workspace.openResource(coc_nvim_1.Uri.file(configFileName).toString());
-        return;
-    }
-    coc_nvim_1.workspace.showMessage('Config file not found', 'warning');
-}
-function isImplicitProjectConfigFile(configFileName) {
-    return configFileName.indexOf('/dev/null/') === 0;
-}
-const autoFixableDiagnosticCodes = new Set([
-    2420,
-    2552,
-    2304,
-]);
-class AutoFixCommand {
-    constructor(service) {
-        this.service = service;
-        this.id = 'tsserver.executeAutofix';
-    }
-    async execute() {
-        if (this.service.state != coc_nvim_1.ServiceStat.Running) {
-            throw new Error('service not running');
-            return;
-        }
-        let client = await this.service.getClientHost();
-        let document = await coc_nvim_1.workspace.document;
-        let handles = await client.handles(document.textDocument);
-        if (!handles) {
-            throw new Error(`Document ${document.uri} is not handled by tsserver.`);
-            return;
-        }
-        let file = client.serviceClient.toPath(document.uri);
-        let diagnostics = coc_nvim_1.diagnosticManager.getDiagnostics(document.uri);
-        let missingDiagnostics = diagnostics.filter(o => o.code == 2307);
-        if (missingDiagnostics.length) {
-            let names = missingDiagnostics.map(o => {
-                let ms = o.message.match(/module\s'(.+)'\./);
-                return ms ? ms[1] : null;
-            });
-            names = names.filter(s => s != null);
-            if (names.length) {
-                modules_1.installModules(document.uri, names).catch(e => {
-                    console.error(e.message); // tslint:disable-line
-                });
-            }
-        }
-        diagnostics = diagnostics.filter(x => autoFixableDiagnosticCodes.has(x.code));
-        if (diagnostics.length == 0)
-            return;
-        diagnostics = diagnostics.reduce((arr, curr) => {
-            if (curr.code == 2304 && arr.findIndex(o => o.message == curr.message) != -1)
-                return arr;
-            arr.push(curr);
-            return arr;
-        }, []);
-        let edits = [];
-        let command;
-        let names = [];
-        for (let diagnostic of diagnostics) {
-            const args = Object.assign(Object.assign({}, typeConverters.Range.toFileRangeRequestArgs(file, diagnostic.range)), { errorCodes: [+(diagnostic.code)] });
-            const response = await client.serviceClient.execute('getCodeFixes', args, vscode_languageserver_protocol_1.CancellationToken.None);
-            if (response.type !== 'response' || !response.body || response.body.length < 1) {
-                if (diagnostic.code == 2304) {
-                    let { range } = diagnostic;
-                    let line = document.getline(range.start.line);
-                    let name = line.slice(range.start.character, range.end.character);
-                    if (helper_1.nodeModules.indexOf(name) !== -1 && names.indexOf(name) == -1) {
-                        names.push(name);
-                        edits.push({
-                            range: vscode_languageserver_types_1.Range.create(0, 0, 0, 0),
-                            newText: `import ${name} from '${name}'\n`
-                        });
-                        command = 'tsserver.organizeImports';
-                    }
-                }
-                continue;
-            }
-            const fix = response.body[0];
-            for (let change of fix.changes) {
-                if (change.fileName != file)
-                    continue;
-                // change.fileName
-                for (let ch of change.textChanges) {
-                    edits.push({
-                        range: typeConverters.Range.fromTextSpan(ch),
-                        newText: ch.newText
-                    });
-                }
-            }
-        }
-        if (edits.length)
-            await document.applyEdits(edits);
-        if (command)
-            coc_nvim_1.commands.executeCommand(command);
-    }
-}
-exports.AutoFixCommand = AutoFixCommand;
-class ConfigurePluginCommand {
-    constructor(pluginManager) {
-        this.pluginManager = pluginManager;
-        this.id = '_typescript.configurePlugin';
-    }
-    execute(pluginId, configuration) {
-        this.pluginManager.setConfiguration(pluginId, configuration);
-    }
-}
-exports.ConfigurePluginCommand = ConfigurePluginCommand;
-
-
-/***/ }),
-/* 142 */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-exports.PluginManager = void 0;
-const coc_nvim_1 = __webpack_require__(1);
-const arrays = __importStar(__webpack_require__(91));
-const vscode_languageserver_protocol_1 = __webpack_require__(3);
-var TypeScriptServerPlugin;
-(function (TypeScriptServerPlugin) {
-    function equals(a, b) {
-        return a.path === b.path
-            && a.name === b.name
-            && a.enableForWorkspaceTypeScriptVersions === b.enableForWorkspaceTypeScriptVersions
-            && arrays.equals(a.languages, b.languages);
-    }
-    TypeScriptServerPlugin.equals = equals;
-})(TypeScriptServerPlugin || (TypeScriptServerPlugin = {}));
-class PluginManager {
-    constructor() {
-        this._pluginConfigurations = new Map();
-        this._disposables = [];
-        this._onDidUpdatePlugins = this._register(new vscode_languageserver_protocol_1.Emitter());
-        this.onDidChangePlugins = this._onDidUpdatePlugins.event;
-        this._onDidUpdateConfig = this._register(new vscode_languageserver_protocol_1.Emitter());
-        this.onDidUpdateConfig = this._onDidUpdateConfig.event;
-        let loadPlugins = () => {
-            if (!this._plugins) {
-                return;
-            }
-            const newPlugins = this.readPlugins();
-            if (!arrays.equals(arrays.flatten(Array.from(this._plugins.values())), arrays.flatten(Array.from(newPlugins.values())), TypeScriptServerPlugin.equals)) {
-                this._plugins = newPlugins;
-                this._onDidUpdatePlugins.fire(this);
-            }
-        };
-        coc_nvim_1.extensions.onDidActiveExtension(loadPlugins, undefined, this._disposables);
-        coc_nvim_1.extensions.onDidUnloadExtension(loadPlugins, undefined, this._disposables);
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this._disposables);
-    }
-    get plugins() {
-        if (!this._plugins) {
-            this._plugins = this.readPlugins();
-        }
-        return arrays.flatten(Array.from(this._plugins.values()));
-    }
-    _register(value) {
-        this._disposables.push(value);
-        return value;
-    }
-    setConfiguration(pluginId, config) {
-        this._pluginConfigurations.set(pluginId, config);
-        this._onDidUpdateConfig.fire({ pluginId, config });
-    }
-    configurations() {
-        return this._pluginConfigurations.entries();
-    }
-    readPlugins() {
-        const pluginMap = new Map();
-        for (const extension of coc_nvim_1.extensions.all) {
-            const pack = extension.packageJSON;
-            if (pack.contributes && Array.isArray(pack.contributes.typescriptServerPlugins)) {
-                const plugins = [];
-                for (const plugin of pack.contributes.typescriptServerPlugins) {
-                    plugins.push({
-                        name: plugin.name,
-                        enableForWorkspaceTypeScriptVersions: !!plugin.enableForWorkspaceTypeScriptVersions,
-                        path: extension.extensionPath,
-                        languages: Array.isArray(plugin.languages) ? plugin.languages : [],
-                    });
-                }
-                if (plugins.length) {
-                    pluginMap.set(extension.id, plugins);
-                }
-            }
-        }
-        return pluginMap;
-    }
-}
-exports.PluginManager = PluginManager;
-
-
-/***/ })
-/******/ ])));
\ No newline at end of file