some deletions
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-snippets / lib / index.js
diff --git a/.config/coc/extensions/node_modules/coc-snippets/lib/index.js b/.config/coc/extensions/node_modules/coc-snippets/lib/index.js
deleted file mode 100644 (file)
index 4170dae..0000000
+++ /dev/null
@@ -1,9367 +0,0 @@
-(function(e, a) { for(var i in a) e[i] = a[i]; if(a.__esModule) Object.defineProperty(e, "__esModule", { value: true }); }(exports,
-/******/ (() => { // webpackBootstrap
-/******/       "use strict";
-/******/       var __webpack_modules__ = ([
-/* 0 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.activate = void 0;
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(2));
-const os_1 = __importDefault(__webpack_require__(3));
-const path_1 = __importDefault(__webpack_require__(4));
-const util_1 = __importDefault(__webpack_require__(5));
-const vscode_languageserver_types_1 = __webpack_require__(6);
-const languages_1 = __importDefault(__webpack_require__(7));
-const snippet_1 = __importDefault(__webpack_require__(37));
-const provider_1 = __webpack_require__(38);
-const snipmateProvider_1 = __webpack_require__(40);
-const textmateProvider_1 = __webpack_require__(44);
-const ultisnipsProvider_1 = __webpack_require__(50);
-const documentation = `# A valid snippet should starts with:
-#
-#              snippet trigger_word [ "description" [ options ] ]
-#
-# and end with:
-#
-#              endsnippet
-#
-# Snippet options:
-#
-#              b - Beginning of line.
-#              i - In-word expansion.
-#              w - Word boundary.
-#              r - Regular expression
-#              e - Custom context snippet
-#              A - Snippet will be triggered automatically, when condition matches.
-#
-# Basic example:
-#
-#              snippet emitter "emitter properties" b
-#              private readonly $\{1} = new Emitter<$2>()
-#              public readonly $\{1/^_(.*)/$1/}: Event<$2> = this.$1.event
-#              endsnippet
-#
-# Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt
-`;
-async function activate(context) {
-    let { subscriptions } = context;
-    const { nvim } = coc_nvim_1.workspace;
-    const configuration = coc_nvim_1.workspace.getConfiguration('snippets');
-    const filetypeExtends = configuration.get('extends', {});
-    const manager = new provider_1.ProviderManager();
-    const trace = configuration.get('trace', 'error');
-    let mru = coc_nvim_1.workspace.createMru('snippets-mru');
-    const channel = coc_nvim_1.workspace.createOutputChannel('snippets');
-    let snippetsDir = configuration.get('userSnippetsDirectory');
-    if (snippetsDir) {
-        snippetsDir = snippetsDir.replace(/^~/, os_1.default.homedir());
-        if (snippetsDir.indexOf('$') !== -1) {
-            snippetsDir = snippetsDir.replace(/\$(\w+)/g, (match, p1) => {
-                var _a;
-                return (_a = process.env[p1]) !== null && _a !== void 0 ? _a : match;
-            });
-        }
-        if (!path_1.default.isAbsolute(snippetsDir)) {
-            coc_nvim_1.workspace.showMessage(`snippets.userSnippetsDirectory => ${snippetsDir} should be absolute path`, 'warning');
-            snippetsDir = null;
-        }
-    }
-    if (!snippetsDir)
-        snippetsDir = path_1.default.join(path_1.default.dirname(coc_nvim_1.workspace.env.extensionRoot), 'ultisnips');
-    if (!fs_1.default.existsSync(snippetsDir)) {
-        await util_1.default.promisify(fs_1.default.mkdir)(snippetsDir);
-    }
-    coc_nvim_1.events.on('CompleteDone', async (item) => {
-        if (typeof item.user_data === 'string' && item.user_data.indexOf('snippets') !== -1) {
-            await mru.add(item.word);
-        }
-    }, null, subscriptions);
-    coc_nvim_1.workspace.onDidOpenTextDocument(async (document) => {
-        if (document.uri.endsWith('.snippets')) {
-            let doc = coc_nvim_1.workspace.getDocument(document.uri);
-            if (!doc)
-                return;
-            let { buffer } = doc;
-            await buffer.setOption('filetype', 'snippets');
-        }
-    }, null, subscriptions);
-    if (configuration.get('ultisnips.enable', true)) {
-        let config = configuration.get('ultisnips', {});
-        let c = Object.assign({}, config, {
-            extends: Object.assign({}, filetypeExtends)
-        });
-        c.directories = c.directories ? c.directories.slice() : [];
-        if (c.directories.indexOf(snippetsDir) == -1) {
-            c.directories.push(snippetsDir);
-        }
-        let provider = new ultisnipsProvider_1.UltiSnippetsProvider(channel, trace, c, context);
-        manager.regist(provider, 'ultisnips');
-        subscriptions.push(provider);
-        // add rtp if ultisnips not found
-        nvim.getOption('runtimepath').then(async (rtp) => {
-            let paths = rtp.split(',');
-            let idx = paths.findIndex(s => /^ultisnips$/i.test(path_1.default.basename(s)));
-            if (idx !== -1)
-                return;
-            let directory = path_1.default.resolve(__dirname, '..');
-            nvim.command('autocmd BufNewFile,BufRead *.snippets setf snippets', true);
-            nvim.command(`execute 'noa set rtp+='.fnameescape('${directory.replace(/'/g, "''")}')`, true);
-            coc_nvim_1.workspace.documents.forEach(doc => {
-                if (doc.uri.endsWith('.snippets')) {
-                    doc.buffer.setOption('filetype', 'snippets', true);
-                }
-            });
-        }, _e => {
-            // noop
-        });
-    }
-    let config = {
-        loadFromExtensions: configuration.get('loadFromExtensions', true),
-        snippetsRoots: configuration.get('textmateSnippetsRoots', []),
-        extends: Object.assign({}, filetypeExtends)
-    };
-    let provider = new textmateProvider_1.TextmateProvider(channel, trace, config);
-    manager.regist(provider, 'snippets');
-    if (configuration.get('snipmate.enable', true)) {
-        let config = {
-            author: configuration.get('snipmate.author', ''),
-            extends: Object.assign({}, filetypeExtends)
-        };
-        let provider = new snipmateProvider_1.SnipmateProvider(channel, trace, config);
-        manager.regist(provider, 'snipmate');
-    }
-    if (configuration.get('autoTrigger', true)) {
-        let insertTs;
-        let insertLeaveTs;
-        let lastInsert;
-        coc_nvim_1.events.on('InsertCharPre', character => {
-            insertTs = Date.now();
-            lastInsert = character;
-        }, null, subscriptions);
-        coc_nvim_1.events.on('InsertLeave', () => {
-            insertLeaveTs = Date.now();
-        }, null, subscriptions);
-        let inserting = false;
-        const handleTextChange = async (bufnr, pre) => {
-            let lastInsertTs = insertTs;
-            insertTs = undefined;
-            if (inserting)
-                return;
-            let doc = coc_nvim_1.workspace.getDocument(bufnr);
-            if (!doc || doc.isCommandLine || !doc.attached)
-                return;
-            let now = Date.now();
-            if (!lastInsertTs || now - lastInsertTs > 100 || !pre.endsWith(lastInsert))
-                return;
-            let edits = await manager.getTriggerSnippets(true);
-            if (edits.length == 0)
-                return;
-            if (edits.length > 1) {
-                channel.appendLine(`Multiple snippet found for auto trigger: ${edits.map(s => s.prefix).join(', ')}`);
-                coc_nvim_1.workspace.showMessage('Multiple snippet found for auto trigger, check output by :CocCommand workspace.showOutput', 'warning');
-            }
-            if (insertLeaveTs > now || inserting)
-                return;
-            inserting = true;
-            try {
-                await coc_nvim_1.commands.executeCommand('editor.action.insertSnippet', edits[0]);
-                await mru.add(edits[0].prefix);
-            }
-            catch (e) {
-                console.error(e);
-            }
-            inserting = false;
-        };
-        coc_nvim_1.events.on('TextChangedI', async (bufnr, info) => {
-            await handleTextChange(bufnr, info.pre);
-        }, null, subscriptions);
-        coc_nvim_1.events.on('TextChangedP', async (bufnr, info) => {
-            await handleTextChange(bufnr, info.pre);
-        }, null, subscriptions);
-    }
-    let statusItem;
-    if (configuration.get('enableStatusItem', true)) {
-        statusItem = coc_nvim_1.workspace.createStatusBarItem(90, { progress: true });
-        statusItem.text = 'loading snippets';
-        statusItem.show();
-    }
-    manager.init().then(() => {
-        statusItem === null || statusItem === void 0 ? void 0 : statusItem.hide();
-    }, e => {
-        statusItem === null || statusItem === void 0 ? void 0 : statusItem.hide();
-        coc_nvim_1.workspace.showMessage(`Error on load snippets: ${e.message}`, 'error');
-    });
-    if (manager.hasProvider) {
-        let disposable = coc_nvim_1.languages.registerCompletionItemProvider('snippets', 'S', null, manager, configuration.get('triggerCharacters', []), configuration.get('priority', 90));
-        subscriptions.push(disposable);
-    }
-    async function fallback() {
-        await nvim.call('coc#start', [{ source: 'snippets' }]);
-    }
-    async function doExpand() {
-        let edits = await manager.getTriggerSnippets();
-        if (edits.length == 0)
-            return false;
-        if (edits.length == 1) {
-            await coc_nvim_1.commands.executeCommand('editor.action.insertSnippet', edits[0]);
-            await mru.add(edits[0].prefix);
-        }
-        else {
-            let idx = await coc_nvim_1.workspace.showQuickpick(edits.map(e => e.description || e.prefix), 'choose snippet:');
-            if (idx == -1)
-                return;
-            await coc_nvim_1.commands.executeCommand('editor.action.insertSnippet', edits[idx]);
-            await mru.add(edits[idx].prefix);
-        }
-        return true;
-    }
-    subscriptions.push(coc_nvim_1.workspace.registerKeymap(['x'], 'convert-snippet', async () => {
-        let mode = await coc_nvim_1.workspace.nvim.call('visualmode');
-        if (!mode)
-            return;
-        let doc = await coc_nvim_1.workspace.document;
-        if (!doc)
-            return;
-        doc.forceSync();
-        let range = await coc_nvim_1.workspace.getSelectedRange(mode, doc);
-        let text = doc.textDocument.getText(range);
-        if (text)
-            await coc_nvim_1.commands.executeCommand('snippets.editSnippets', text);
-    }, { sync: false }));
-    subscriptions.push(coc_nvim_1.commands.registerCommand('snippets.editSnippets', async (text) => {
-        let buf = await nvim.buffer;
-        let doc = coc_nvim_1.workspace.getDocument(buf.id);
-        if (!doc) {
-            coc_nvim_1.workspace.showMessage('Document not found', 'error');
-            return;
-        }
-        let file = path_1.default.join(snippetsDir, `${doc.filetype}.snippets`);
-        if (!fs_1.default.existsSync(file)) {
-            await util_1.default.promisify(fs_1.default.writeFile)(file, documentation, 'utf8');
-        }
-        let uri = coc_nvim_1.Uri.file(file).toString();
-        await coc_nvim_1.workspace.jumpTo(uri, null, configuration.get('editSnippetsCommand'));
-        if (text) {
-            await nvim.command('normal! G');
-            await nvim.command('normal! 2o');
-            let position = await coc_nvim_1.workspace.getCursorPosition();
-            let indent = text.match(/^\s*/)[0];
-            text = text.split(/\r?\n/).map(s => s.startsWith(indent) ? s.slice(indent.length) : s).join('\n');
-            let escaped = text.replace(/([$}\]])/g, '\\$1');
-            // tslint:disable-next-line: no-invalid-template-strings
-            let snippet = 'snippet ${1:Tab_trigger} "${2:Description}" ${3:b}\n' + escaped + '\nendsnippet';
-            let edit = vscode_languageserver_types_1.TextEdit.insert(position, snippet);
-            await coc_nvim_1.commands.executeCommand('editor.action.insertSnippet', edit);
-        }
-    }));
-    subscriptions.push(coc_nvim_1.commands.registerCommand('snippets.openSnippetFiles', async () => {
-        let buf = await nvim.buffer;
-        let doc = coc_nvim_1.workspace.getDocument(buf.id);
-        if (!doc) {
-            coc_nvim_1.workspace.showMessage('Document not found', 'error');
-            return;
-        }
-        let files = await manager.getSnippetFiles(doc.filetype);
-        if (!files.length) {
-            coc_nvim_1.workspace.showMessage('No related snippet file found', 'warning');
-            return;
-        }
-        let idx = await coc_nvim_1.workspace.showQuickpick(files, 'choose snippet file:');
-        if (idx == -1)
-            return;
-        let uri = coc_nvim_1.Uri.file(files[idx]).toString();
-        await coc_nvim_1.workspace.jumpTo(uri, null, configuration.get('editSnippetsCommand'));
-    }));
-    subscriptions.push(coc_nvim_1.workspace.registerKeymap(['i'], 'snippets-expand', async () => {
-        let expanded = await doExpand();
-        if (!expanded)
-            await fallback();
-    }, { silent: true, sync: false, cancel: true }));
-    subscriptions.push(coc_nvim_1.workspace.registerKeymap(['i'], 'snippets-expand-jump', async () => {
-        let expanded = await doExpand();
-        if (!expanded) {
-            let bufnr = await nvim.call('bufnr', '%');
-            let session = coc_nvim_1.snippetManager.getSession(bufnr);
-            if (session && session.isActive) {
-                await nvim.call('coc#_cancel', []);
-                await coc_nvim_1.snippetManager.nextPlaceholder();
-                return;
-            }
-            await fallback();
-        }
-    }, { silent: true, sync: false, cancel: true }));
-    subscriptions.push(coc_nvim_1.workspace.registerKeymap(['v'], 'snippets-select', async () => {
-        let doc = await coc_nvim_1.workspace.document;
-        if (!doc)
-            return;
-        let mode = await nvim.call('visualmode');
-        if (['v', 'V'].indexOf(mode) == -1) {
-            coc_nvim_1.workspace.showMessage(`visual mode ${mode} not supported`, 'warning');
-            return;
-        }
-        await nvim.command('normal! `<');
-        let start = await coc_nvim_1.workspace.getCursorPosition();
-        await nvim.command('normal! `>');
-        let end = await coc_nvim_1.workspace.getCursorPosition();
-        end = vscode_languageserver_types_1.Position.create(end.line, end.character + 1);
-        let range = vscode_languageserver_types_1.Range.create(start, end);
-        let text = doc.textDocument.getText(range);
-        await nvim.call('feedkeys', ['i', 'in']);
-        if (mode == 'v') {
-            await doc.applyEdits([{ range, newText: '' }]);
-        }
-        else {
-            // keep indent
-            let currline = doc.getline(start.line);
-            let indent = currline.match(/^\s*/)[0];
-            let lines = text.split(/\r?\n/);
-            lines = lines.map(s => s.startsWith(indent) ? s.slice(indent.length) : s);
-            text = lines.join('\n');
-            range = vscode_languageserver_types_1.Range.create(vscode_languageserver_types_1.Position.create(start.line, indent.length), end);
-            await doc.applyEdits([{ range, newText: '' }]);
-        }
-        await nvim.setVar('coc_selected_text', text);
-        await coc_nvim_1.workspace.moveTo(range.start);
-    }, { silent: true, sync: false, cancel: true }));
-    let languageProvider = new languages_1.default(channel, trace);
-    subscriptions.push(coc_nvim_1.languages.registerCompletionItemProvider('snippets-source', 'S', ['snippets'], languageProvider, ['$'], configuration.get('priority', 90)));
-    subscriptions.push(statusItem);
-    subscriptions.push(channel);
-    subscriptions.push(coc_nvim_1.listManager.registerList(new snippet_1.default(coc_nvim_1.workspace.nvim, manager, mru)));
-    return {
-        expandable: async () => {
-            let edits;
-            try {
-                edits = await manager.getTriggerSnippets();
-            }
-            catch (e) {
-                channel.appendLine(`[Error ${(new Date()).toLocaleTimeString()}] Error on getTriggerSnippets: ${e}`);
-            }
-            return edits && edits.length > 0;
-        }
-    };
-}
-exports.activate = activate;
-
-
-/***/ }),
-/* 1 */
-/***/ ((module) => {
-
-module.exports = require("coc.nvim");;
-
-/***/ }),
-/* 2 */
-/***/ ((module) => {
-
-module.exports = require("fs");;
-
-/***/ }),
-/* 3 */
-/***/ ((module) => {
-
-module.exports = require("os");;
-
-/***/ }),
-/* 4 */
-/***/ ((module) => {
-
-module.exports = require("path");;
-
-/***/ }),
-/* 5 */
-/***/ ((module) => {
-
-module.exports = require("util");;
-
-/***/ }),
-/* 6 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Position": () => /* binding */ Position,
-/* harmony export */   "Range": () => /* binding */ Range,
-/* harmony export */   "Location": () => /* binding */ Location,
-/* harmony export */   "LocationLink": () => /* binding */ LocationLink,
-/* harmony export */   "Color": () => /* binding */ Color,
-/* harmony export */   "ColorInformation": () => /* binding */ ColorInformation,
-/* harmony export */   "ColorPresentation": () => /* binding */ ColorPresentation,
-/* harmony export */   "FoldingRangeKind": () => /* binding */ FoldingRangeKind,
-/* harmony export */   "FoldingRange": () => /* binding */ FoldingRange,
-/* harmony export */   "DiagnosticRelatedInformation": () => /* binding */ DiagnosticRelatedInformation,
-/* harmony export */   "DiagnosticSeverity": () => /* binding */ DiagnosticSeverity,
-/* harmony export */   "DiagnosticTag": () => /* binding */ DiagnosticTag,
-/* harmony export */   "Diagnostic": () => /* binding */ Diagnostic,
-/* harmony export */   "Command": () => /* binding */ Command,
-/* harmony export */   "TextEdit": () => /* binding */ TextEdit,
-/* harmony export */   "TextDocumentEdit": () => /* binding */ TextDocumentEdit,
-/* harmony export */   "CreateFile": () => /* binding */ CreateFile,
-/* harmony export */   "RenameFile": () => /* binding */ RenameFile,
-/* harmony export */   "DeleteFile": () => /* binding */ DeleteFile,
-/* harmony export */   "WorkspaceEdit": () => /* binding */ WorkspaceEdit,
-/* harmony export */   "WorkspaceChange": () => /* binding */ WorkspaceChange,
-/* harmony export */   "TextDocumentIdentifier": () => /* binding */ TextDocumentIdentifier,
-/* harmony export */   "VersionedTextDocumentIdentifier": () => /* binding */ VersionedTextDocumentIdentifier,
-/* harmony export */   "TextDocumentItem": () => /* binding */ TextDocumentItem,
-/* harmony export */   "MarkupKind": () => /* binding */ MarkupKind,
-/* harmony export */   "MarkupContent": () => /* binding */ MarkupContent,
-/* harmony export */   "CompletionItemKind": () => /* binding */ CompletionItemKind,
-/* harmony export */   "InsertTextFormat": () => /* binding */ InsertTextFormat,
-/* harmony export */   "CompletionItemTag": () => /* binding */ CompletionItemTag,
-/* harmony export */   "CompletionItem": () => /* binding */ CompletionItem,
-/* harmony export */   "CompletionList": () => /* binding */ CompletionList,
-/* harmony export */   "MarkedString": () => /* binding */ MarkedString,
-/* harmony export */   "Hover": () => /* binding */ Hover,
-/* harmony export */   "ParameterInformation": () => /* binding */ ParameterInformation,
-/* harmony export */   "SignatureInformation": () => /* binding */ SignatureInformation,
-/* harmony export */   "DocumentHighlightKind": () => /* binding */ DocumentHighlightKind,
-/* harmony export */   "DocumentHighlight": () => /* binding */ DocumentHighlight,
-/* harmony export */   "SymbolKind": () => /* binding */ SymbolKind,
-/* harmony export */   "SymbolTag": () => /* binding */ SymbolTag,
-/* harmony export */   "SymbolInformation": () => /* binding */ SymbolInformation,
-/* harmony export */   "DocumentSymbol": () => /* binding */ DocumentSymbol,
-/* harmony export */   "CodeActionKind": () => /* binding */ CodeActionKind,
-/* harmony export */   "CodeActionContext": () => /* binding */ CodeActionContext,
-/* harmony export */   "CodeAction": () => /* binding */ CodeAction,
-/* harmony export */   "CodeLens": () => /* binding */ CodeLens,
-/* harmony export */   "FormattingOptions": () => /* binding */ FormattingOptions,
-/* harmony export */   "DocumentLink": () => /* binding */ DocumentLink,
-/* harmony export */   "SelectionRange": () => /* binding */ SelectionRange,
-/* harmony export */   "EOL": () => /* binding */ EOL,
-/* harmony export */   "TextDocument": () => /* binding */ TextDocument
-/* harmony export */ });
-/* --------------------------------------------------------------------------------------------\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
-
-
-/***/ }),
-/* 7 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(8);
-const util_1 = __webpack_require__(35);
-const codesMap = new Map();
-codesMap.set(1, 'invalid snippet line, trigger requried.');
-codesMap.set(2, 'invalid snippet option, option "$1" not supported.');
-codesMap.set(3, 'invalid python expression, $1');
-codesMap.set(4, 'invalid code interpolation, #! not supported.');
-const validOptions = ['b', 'i', 'w', 'r', 'e', 'A'];
-class LanguageProvider {
-    constructor(channel, trace = 'error') {
-        this.channel = channel;
-        this.trace = trace;
-        this.disposables = [];
-        this.collection = coc_nvim_1.languages.createDiagnosticCollection('snippets');
-        for (let doc of coc_nvim_1.workspace.documents) {
-            if (this.shouldValidate(doc.uri)) {
-                this.validate(doc.uri, doc.getDocumentContent()).catch(e => {
-                    channel.appendLine(`[Error ${(new Date()).toLocaleTimeString()}]: ${e.message}`);
-                });
-            }
-        }
-        coc_nvim_1.workspace.onDidOpenTextDocument(async (textDocument) => {
-            let doc = coc_nvim_1.workspace.getDocument(textDocument.uri);
-            if (!this.shouldValidate(doc.uri))
-                return;
-            await this.validate(doc.uri, doc.getDocumentContent());
-        }, null, this.disposables);
-        coc_nvim_1.workspace.onDidChangeTextDocument(async (ev) => {
-            let doc = coc_nvim_1.workspace.getDocument(ev.textDocument.uri);
-            if (!doc || !this.shouldValidate(doc.uri))
-                return;
-            await this.validate(doc.uri, doc.getDocumentContent());
-        }, null, this.disposables);
-        coc_nvim_1.workspace.onDidCloseTextDocument(e => {
-            this.collection.delete(e.uri);
-        }, null, this.disposables);
-    }
-    shouldValidate(uri) {
-        return uri.endsWith('.snippets');
-    }
-    async validate(uri, content) {
-        let lines = content.split('\n');
-        let diagnostics = [];
-        let curr = 0;
-        for (let line of lines) {
-            if (/^snippet\s*$/.test(line)) {
-                let range = vscode_languageserver_protocol_1.Range.create(curr, 0, curr, line.length);
-                diagnostics.push(vscode_languageserver_protocol_1.Diagnostic.create(range, codesMap.get(1), vscode_languageserver_protocol_1.DiagnosticSeverity.Error, 1));
-                continue;
-            }
-            if (line.startsWith('snippet ')) {
-                let content = util_1.headTail(line)[1];
-                let ms = content.match(/^(.+?)(?:\s+(?:"(.*?)")?(?:\s+"(.*?)")?(?:\s+(\w+))?)?$/);
-                let prefix = ms[1];
-                if (prefix.length > 2 && prefix[0] == prefix[prefix.length - 1] && !/\w/.test(prefix[0])) {
-                    prefix = prefix.slice(1, prefix.length - 1);
-                }
-                let option = ms[4] || '';
-                let isExpression = option.indexOf('r') !== -1;
-                let startCharacter = line.length - option.length;
-                for (let ch of option) {
-                    if (validOptions.indexOf(ch) == -1) {
-                        let range = vscode_languageserver_protocol_1.Range.create(curr, startCharacter, curr, startCharacter + 1);
-                        let message = codesMap.get(2).replace('$1', ch);
-                        diagnostics.push(vscode_languageserver_protocol_1.Diagnostic.create(range, message, vscode_languageserver_protocol_1.DiagnosticSeverity.Error, 2));
-                    }
-                    startCharacter = startCharacter + 1;
-                }
-                if (isExpression) {
-                    try {
-                        util_1.convertRegex(prefix);
-                    }
-                    catch (e) {
-                        let start = line.indexOf(prefix);
-                        let range = vscode_languageserver_protocol_1.Range.create(curr, start, curr, start + prefix.length);
-                        let message = codesMap.get(3).replace('$1', e.message);
-                        diagnostics.push(vscode_languageserver_protocol_1.Diagnostic.create(range, message, vscode_languageserver_protocol_1.DiagnosticSeverity.Error, 3));
-                    }
-                }
-            }
-            else {
-                let idx = line.indexOf('`#!');
-                if (idx !== -1) {
-                    let range = vscode_languageserver_protocol_1.Range.create(curr, idx, curr, idx + 3);
-                    let message = codesMap.get(4);
-                    diagnostics.push(vscode_languageserver_protocol_1.Diagnostic.create(range, message, vscode_languageserver_protocol_1.DiagnosticSeverity.Error, 4));
-                }
-            }
-            curr++;
-        }
-        if (this.trace == 'verbose') {
-            this.channel.appendLine(`[Debug ${(new Date()).toLocaleTimeString()}] diagnostics of ${uri} -> ${JSON.stringify(diagnostics)}`);
-        }
-        this.collection.set(uri, diagnostics);
-    }
-    provideCompletionItems(_document, position, _token, context) {
-        let { input, col } = context.option;
-        if (context.triggerCharacter == '$') {
-            return [{
-                    label: '$VISUAL',
-                    kind: vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
-                    // tslint:disable-next-line: no-invalid-template-strings
-                    detail: '${VISUAL}',
-                    insertTextFormat: vscode_languageserver_protocol_1.InsertTextFormat.Snippet,
-                    textEdit: {
-                        range: vscode_languageserver_protocol_1.Range.create(position.line, position.character - 1, position.line, position.character),
-                        // tslint:disable-next-line: no-invalid-template-strings
-                        newText: '\\${VISUAL${1::default}\\}'
-                    }
-                }];
-        }
-        if (col == 0 && 'snippet'.startsWith(input)) {
-            return [{
-                    label: 'snippet',
-                    kind: vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
-                    detail: 'Snippet definition',
-                    insertTextFormat: vscode_languageserver_protocol_1.InsertTextFormat.Snippet,
-                    // tslint:disable-next-line: no-invalid-template-strings
-                    insertText: 'snippet ${1:Tab_trigger} "${2:Description}" ${3:b}\n$0\nendsnippet'
-                }];
-        }
-        return [];
-    }
-    async resolveCompletionItem(item) {
-        // tslint:disable-next-line: deprecation
-        let text = item.insertText || item.textEdit.newText;
-        // tslint:disable-next-line: deprecation
-        let snip = await Promise.resolve(coc_nvim_1.snippetManager.resolveSnippet(text));
-        item.documentation = {
-            kind: 'markdown',
-            value: util_1.markdownBlock(snip.toString(), 'snippets')
-        };
-        return item;
-    }
-}
-exports.default = LanguageProvider;
-
-
-/***/ }),
-/* 8 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\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__(6));\r
-__export(__webpack_require__(21));\r
-const callHierarchy = __webpack_require__(33);\r
-const st = __webpack_require__(34);\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
-
-
-/***/ }),
-/* 9 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(10);\r
-const messages_1 = __webpack_require__(11);\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__(12);\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__(14);\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__(13);\r
-exports.Disposable = events_1.Disposable;\r
-exports.Event = events_1.Event;\r
-exports.Emitter = events_1.Emitter;\r
-const cancellation_1 = __webpack_require__(15);\r
-exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;\r
-exports.CancellationToken = cancellation_1.CancellationToken;\r
-const linkedMap_1 = __webpack_require__(16);\r
-__export(__webpack_require__(17));\r
-__export(__webpack_require__(20));\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
-
-
-/***/ }),
-/* 10 */
-/***/ ((__unused_webpack_module, exports) => {
-
-/* --------------------------------------------------------------------------------------------\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
-
-
-/***/ }),
-/* 11 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(10);\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
-
-
-/***/ }),
-/* 12 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(13);\r
-const Is = __webpack_require__(10);\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
-
-
-/***/ }),
-/* 13 */
-/***/ ((__unused_webpack_module, exports) => {
-
-/* --------------------------------------------------------------------------------------------\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
-
-
-/***/ }),
-/* 14 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(13);\r
-const Is = __webpack_require__(10);\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
-
-
-/***/ }),
-/* 15 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/*---------------------------------------------------------------------------------------------\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__(13);\r
-const Is = __webpack_require__(10);\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
-
-
-/***/ }),
-/* 16 */
-/***/ ((__unused_webpack_module, exports) => {
-
-\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
-
-
-/***/ }),
-/* 17 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(4);\r
-const os_1 = __webpack_require__(3);\r
-const crypto_1 = __webpack_require__(18);\r
-const net_1 = __webpack_require__(19);\r
-const messageReader_1 = __webpack_require__(12);\r
-const messageWriter_1 = __webpack_require__(14);\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
-
-
-/***/ }),
-/* 18 */
-/***/ ((module) => {
-
-module.exports = require("crypto");;
-
-/***/ }),
-/* 19 */
-/***/ ((module) => {
-
-module.exports = require("net");;
-
-/***/ }),
-/* 20 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(19);\r
-const messageReader_1 = __webpack_require__(12);\r
-const messageWriter_1 = __webpack_require__(14);\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
-
-
-/***/ }),
-/* 21 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(22);\r
-const vscode_jsonrpc_1 = __webpack_require__(9);\r
-const messages_1 = __webpack_require__(23);\r
-const protocol_implementation_1 = __webpack_require__(24);\r
-exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;\r
-const protocol_typeDefinition_1 = __webpack_require__(25);\r
-exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;\r
-const protocol_workspaceFolders_1 = __webpack_require__(26);\r
-exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;\r
-exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;\r
-const protocol_configuration_1 = __webpack_require__(27);\r
-exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;\r
-const protocol_colorProvider_1 = __webpack_require__(28);\r
-exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;\r
-exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;\r
-const protocol_foldingRange_1 = __webpack_require__(29);\r
-exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;\r
-const protocol_declaration_1 = __webpack_require__(30);\r
-exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;\r
-const protocol_selectionRange_1 = __webpack_require__(31);\r
-exports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;\r
-const protocol_progress_1 = __webpack_require__(32);\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
-
-
-/***/ }),
-/* 22 */
-/***/ ((__unused_webpack_module, exports) => {
-
-/* --------------------------------------------------------------------------------------------\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
-
-
-/***/ }),
-/* 23 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\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
-
-
-/***/ }),
-/* 24 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 25 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 26 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(23);\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
-
-
-/***/ }),
-/* 27 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(23);\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
-
-
-/***/ }),
-/* 28 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 29 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 30 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 31 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 32 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(9);\r
-const messages_1 = __webpack_require__(23);\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
-
-
-/***/ }),
-/* 33 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(23);\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
-
-
-/***/ }),
-/* 34 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* --------------------------------------------------------------------------------------------\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__(23);\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
-
-
-/***/ }),
-/* 35 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.markdownBlock = exports.getRegexText = exports.wait = exports.convertRegex = exports.distinct = exports.trimQuote = exports.memorize = exports.headTail = exports.readdirAsync = exports.readFileAsync = exports.writeFileAsync = exports.statAsync = exports.flatten = exports.replaceText = exports.uid = void 0;
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const pify_1 = __importDefault(__webpack_require__(36));
-const fs_1 = __importDefault(__webpack_require__(2));
-const crypto_1 = __importDefault(__webpack_require__(18));
-const BASE64 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_';
-function tostr(bytes) {
-    let r = [];
-    let i;
-    for (i = 0; i < bytes.length; i++) {
-        r.push(BASE64[bytes[i] % 64]);
-    }
-    return r.join('');
-}
-function uid() {
-    return tostr(crypto_1.default.randomBytes(10));
-}
-exports.uid = uid;
-function replaceText(content, items) {
-    let res = '';
-    items.sort((a, b) => a.index - b.index);
-    let item = items.shift();
-    for (let i = 0; i < content.length; i++) {
-        let idx = item ? item.index : null;
-        if (idx == null || i != idx) {
-            res = res + content[i];
-            continue;
-        }
-        res = res + item.newText;
-        i = i + item.length;
-    }
-    return res;
-}
-exports.replaceText = replaceText;
-function flatten(arr) {
-    return arr.reduce((p, curr) => p.concat(curr), []);
-}
-exports.flatten = flatten;
-async function statAsync(filepath) {
-    try {
-        return await pify_1.default(fs_1.default.stat)(filepath);
-    }
-    catch (e) {
-        return null;
-    }
-}
-exports.statAsync = statAsync;
-async function writeFileAsync(fullpath, content) {
-    await pify_1.default(fs_1.default.writeFile)(fullpath, content, 'utf8');
-}
-exports.writeFileAsync = writeFileAsync;
-async function readFileAsync(fullpath, encoding = 'utf8') {
-    return await pify_1.default(fs_1.default.readFile)(fullpath, encoding);
-}
-exports.readFileAsync = readFileAsync;
-async function readdirAsync(filepath) {
-    try {
-        return await pify_1.default(fs_1.default.readdir)(filepath);
-    }
-    catch (e) {
-        return null;
-    }
-}
-exports.readdirAsync = readdirAsync;
-function headTail(line) {
-    line = line.trim();
-    let ms = line.match(/^(\S+)\s+(.*)/);
-    if (!ms)
-        return [line, ''];
-    return [ms[1], ms[2]];
-}
-exports.headTail = headTail;
-function memorize(_target, key, descriptor) {
-    let fn = descriptor.get;
-    if (typeof fn !== 'function')
-        return;
-    let memoKey = '$' + key;
-    descriptor.get = function (...args) {
-        if (this.hasOwnProperty(memoKey))
-            return Promise.resolve(this[memoKey]);
-        return new Promise((resolve, reject) => {
-            Promise.resolve(fn.apply(this, args)).then(res => {
-                this[memoKey] = res;
-                resolve(res);
-            }, e => {
-                reject(e);
-            });
-        });
-    };
-}
-exports.memorize = memorize;
-function trimQuote(str) {
-    if (str.startsWith('"') || str.startsWith("'"))
-        return str.slice(1, -1);
-    return str;
-}
-exports.trimQuote = trimQuote;
-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;
-const conditionRe = /\(\?\(\?:\w+\).+\|/;
-const bellRe = /\\a/;
-const commentRe = /\(\?#.*?\)/;
-const stringStartRe = /\\A/;
-const namedCaptureRe = /\(\?P<\w+>.*?\)/;
-const namedReferenceRe = /\(\?P=(\w+)\)/;
-const braceRe = /\^\]/;
-const regex = new RegExp(`${bellRe.source}|${commentRe.source}|${stringStartRe.source}|${namedCaptureRe.source}|${namedReferenceRe.source}|${braceRe}`, 'g');
-/**
- * Convert python regex to javascript regex,
- * throw error when unsupported pattern found
- *
- * @public
- * @param {string} str
- * @returns {string}
- */
-function convertRegex(str) {
-    if (str.indexOf('\\z') !== -1) {
-        throw new Error('pattern \\z not supported');
-    }
-    if (str.indexOf('(?s)') !== -1) {
-        throw new Error('pattern (?s) not supported');
-    }
-    if (str.indexOf('(?x)') !== -1) {
-        throw new Error('pattern (?x) not supported');
-    }
-    if (str.indexOf('\n') !== -1) {
-        throw new Error('multiple line pattern not supported');
-    }
-    if (conditionRe.test(str)) {
-        throw new Error('condition pattern not supported');
-    }
-    return str.replace(regex, (match, p1) => {
-        if (match == '^]')
-            return '^\\]';
-        if (match == '\\a')
-            return '';
-        if (match.startsWith('(?#'))
-            return '';
-        if (match == '\\A')
-            return '^';
-        if (match.startsWith('(?P<'))
-            return '(?' + match.slice(3);
-        if (match.startsWith('(?P='))
-            return `\\k<${p1}>`;
-        return '';
-    });
-}
-exports.convertRegex = convertRegex;
-function wait(ms) {
-    return new Promise(resolve => {
-        setTimeout(() => {
-            resolve();
-        }, ms);
-    });
-}
-exports.wait = wait;
-function getRegexText(prefix) {
-    if (prefix.startsWith('^'))
-        prefix = prefix.slice(1);
-    if (prefix.endsWith('$'))
-        prefix = prefix.slice(0, -1);
-    let content = prefix.replace(/\(.*\)\??/g, '');
-    content = content.replace(/\\/g, '');
-    return content;
-}
-exports.getRegexText = getRegexText;
-function markdownBlock(code, filetype) {
-    filetype = filetype == 'javascriptreact' ? 'javascript' : filetype;
-    filetype = filetype == 'typescriptreact' ? 'typescript' : filetype;
-    return '``` ' + filetype + '\n' + code + '\n```';
-}
-exports.markdownBlock = markdownBlock;
-
-
-/***/ }),
-/* 36 */
-/***/ ((module) => {
-
-
-
-const processFn = (fn, options, proxy, unwrapped) => function (...arguments_) {
-       const P = options.promiseModule;
-
-       return new P((resolve, reject) => {
-               if (options.multiArgs) {
-                       arguments_.push((...result) => {
-                               if (options.errorFirst) {
-                                       if (result[0]) {
-                                               reject(result);
-                                       } else {
-                                               result.shift();
-                                               resolve(result);
-                                       }
-                               } else {
-                                       resolve(result);
-                               }
-                       });
-               } else if (options.errorFirst) {
-                       arguments_.push((error, result) => {
-                               if (error) {
-                                       reject(error);
-                               } else {
-                                       resolve(result);
-                               }
-                       });
-               } else {
-                       arguments_.push(resolve);
-               }
-
-               const self = this === proxy ? unwrapped : this;
-               Reflect.apply(fn, self, arguments_);
-       });
-};
-
-const filterCache = new WeakMap();
-
-module.exports = (input, options) => {
-       options = {
-               exclude: [/.+(?:Sync|Stream)$/],
-               errorFirst: true,
-               promiseModule: Promise,
-               ...options
-       };
-
-       const objectType = typeof input;
-       if (!(input !== null && (objectType === 'object' || objectType === 'function'))) {
-               throw new TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${input === null ? 'null' : objectType}\``);
-       }
-
-       const filter = (target, key) => {
-               let cached = filterCache.get(target);
-
-               if (!cached) {
-                       cached = {};
-                       filterCache.set(target, cached);
-               }
-
-               if (key in cached) {
-                       return cached[key];
-               }
-
-               const match = pattern => (typeof pattern === 'string' || typeof key === 'symbol') ? key === pattern : pattern.test(key);
-               const desc = Reflect.getOwnPropertyDescriptor(target, key);
-               const writableOrConfigurableOwn = (desc === undefined || desc.writable || desc.configurable);
-               const included = options.include ? options.include.some(match) : !options.exclude.some(match);
-               const shouldFilter = included && writableOrConfigurableOwn;
-               cached[key] = shouldFilter;
-               return shouldFilter;
-       };
-
-       const cache = new WeakMap();
-
-       const proxy = new Proxy(input, {
-               apply(target, thisArg, args) {
-                       const cached = cache.get(target);
-
-                       if (cached) {
-                               return Reflect.apply(cached, thisArg, args);
-                       }
-
-                       const pified = options.excludeMain ? target : processFn(target, options, proxy, target);
-                       cache.set(target, pified);
-                       return Reflect.apply(pified, thisArg, args);
-               },
-
-               get(target, key) {
-                       const property = target[key];
-
-                       // eslint-disable-next-line no-use-extend-native/no-use-extend-native
-                       if (!filter(target, key) || property === Function.prototype[key]) {
-                               return property;
-                       }
-
-                       const cached = cache.get(property);
-
-                       if (cached) {
-                               return cached;
-                       }
-
-                       if (typeof property === 'function') {
-                               const pified = processFn(property, options, proxy, target);
-                               cache.set(property, pified);
-                               return pified;
-                       }
-
-                       return property;
-               }
-       });
-
-       return proxy;
-};
-
-
-/***/ }),
-/* 37 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const coc_nvim_1 = __webpack_require__(1);
-const vscode_languageserver_protocol_1 = __webpack_require__(8);
-const os_1 = __importDefault(__webpack_require__(3));
-class SnippetsList extends coc_nvim_1.BasicList {
-    constructor(nvim, manager, mru) {
-        super(nvim);
-        this.manager = manager;
-        this.mru = mru;
-        this.name = 'snippets';
-        this.description = 'snippets list';
-        this.addLocationActions();
-    }
-    async loadItems(context) {
-        let { window } = context;
-        let valid = await window.valid;
-        if (!valid)
-            return;
-        let buf = await window.buffer;
-        let doc = coc_nvim_1.workspace.getDocument(buf.id);
-        if (!doc)
-            return [];
-        let snippets = await this.manager.getSnippets(doc.filetype);
-        let res = [];
-        let recents = await this.mru.load();
-        for (let snip of snippets) {
-            let pos = vscode_languageserver_protocol_1.Position.create(snip.lnum, 0);
-            let location = vscode_languageserver_protocol_1.Location.create(coc_nvim_1.Uri.file(snip.filepath).toString(), vscode_languageserver_protocol_1.Range.create(pos, pos));
-            let prefix = snip.prefix;
-            if (prefix.length < 20) {
-                prefix = `${prefix}${' '.repeat(20 - prefix.length)}`;
-            }
-            let idx = recents.indexOf(snip.prefix);
-            res.push({
-                label: `${prefix}\t${snip.description}\t${snip.filepath.replace(os_1.default.homedir(), '~')}`,
-                filterText: `${snip.prefix} ${snip.description}`,
-                location,
-                recentScore: idx == -1 ? -1 : recents.length - idx
-            });
-        }
-        return res;
-    }
-    async doHighlight() {
-        let { nvim } = coc_nvim_1.workspace;
-        nvim.pauseNotification();
-        nvim.command('syntax match CocSnippetsPrefix /\\v^\\S+/ contained containedin=CocSnippetsLine', true);
-        nvim.command('syntax match CocSnippetsFile /\\v\\t\\S+$/ contained containedin=CocSnippetsLine', true);
-        nvim.command('highlight default link CocSnippetsPrefix Identifier', true);
-        nvim.command('highlight default link CocSnippetsFile Comment', true);
-        await nvim.resumeNotification();
-    }
-}
-exports.default = SnippetsList;
-
-
-/***/ }),
-/* 38 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.characterIndex = exports.ProviderManager = void 0;
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const coc_nvim_1 = __webpack_require__(1);
-const path_1 = __importDefault(__webpack_require__(4));
-const vscode_languageserver_protocol_1 = __webpack_require__(8);
-const types_1 = __webpack_require__(39);
-const util_1 = __webpack_require__(35);
-class ProviderManager {
-    constructor() {
-        this.providers = new Map();
-    }
-    regist(provider, name) {
-        this.providers.set(name, provider);
-        return vscode_languageserver_protocol_1.Disposable.create(() => {
-            this.providers.delete(name);
-        });
-    }
-    get hasProvider() {
-        return this.providers.size > 0;
-    }
-    async init() {
-        let providers = Array.from(this.providers.values());
-        await Promise.all(providers.map(provider => {
-            return provider.init();
-        }));
-    }
-    async getSnippets(filetype) {
-        let names = Array.from(this.providers.keys());
-        let list = [];
-        for (let name of names) {
-            let provider = this.providers.get(name);
-            let snippets = await provider.getSnippets(filetype);
-            snippets.map(s => s.provider = name);
-            list.push(...snippets);
-        }
-        return list;
-    }
-    async getSnippetFiles(filetype) {
-        let files = [];
-        for (let provider of this.providers.values()) {
-            let res = await provider.getSnippetFiles(filetype);
-            files = files.concat(res);
-        }
-        return files;
-    }
-    async getTriggerSnippets(autoTrigger = false) {
-        let bufnr = await coc_nvim_1.workspace.nvim.call('bufnr', '%');
-        let doc = coc_nvim_1.workspace.getDocument(bufnr);
-        if (!doc)
-            return [];
-        await doc.patchChange();
-        let position = await coc_nvim_1.workspace.getCursorPosition();
-        let names = Array.from(this.providers.keys());
-        let list = [];
-        for (let name of names) {
-            let provider = this.providers.get(name);
-            let items = await provider.getTriggerSnippets(doc, position, autoTrigger);
-            for (let item of items) {
-                if (list.findIndex(o => o.prefix == item.prefix) == -1) {
-                    list.push(item);
-                }
-            }
-        }
-        list.sort((a, b) => b.priority - a.priority);
-        if (list.length > 1 && list[0].priority > 0) {
-            list = list.filter(o => o.priority > 0);
-        }
-        return list;
-    }
-    async provideCompletionItems(document, position, _token, context) {
-        let doc = coc_nvim_1.workspace.getDocument(document.uri);
-        if (!doc)
-            return [];
-        let snippets = await this.getSnippets(doc.filetype);
-        let currline = doc.getline(position.line, true);
-        let { input, col } = context.option;
-        let character = characterIndex(currline, col);
-        let before_content = currline.slice(0, character);
-        let res = [];
-        let contextPrefixes = [];
-        for (let snip of snippets) {
-            let contentBehind = before_content;
-            if (contextPrefixes.indexOf(snip.prefix) !== -1)
-                continue;
-            if (snip.regex != null && snip.prefix == '')
-                continue;
-            if (snip.context) {
-                let provider = this.providers.get(snip.provider);
-                let valid = await provider.checkContext(snip.context);
-                if (!valid)
-                    continue;
-                contextPrefixes.push(snip.prefix);
-            }
-            let head = this.getPrefixHead(doc, snip.prefix);
-            if (input.length == 0 && !before_content.endsWith(snip.prefix))
-                continue;
-            let item = {
-                label: snip.prefix,
-                kind: vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
-                filterText: snip.prefix,
-                detail: snip.description,
-                insertTextFormat: vscode_languageserver_protocol_1.InsertTextFormat.Snippet
-            };
-            item.data = {
-                snip,
-                provider: snip.provider,
-                filepath: `${path_1.default.basename(snip.filepath)}:${snip.lnum}`
-            };
-            if (snip.regex) {
-                if (!input.length || snip.prefix && input[0] != snip.prefix[0])
-                    continue;
-                let content = before_content + snip.prefix;
-                let ms = content.match(snip.regex);
-                if (!ms)
-                    continue;
-            }
-            else if (head && before_content.endsWith(head)) {
-                contentBehind = before_content.slice(0, -head.length);
-                let prefix = snip.prefix.slice(head.length);
-                Object.assign(item, {
-                    textEdit: {
-                        range: vscode_languageserver_protocol_1.Range.create({ line: position.line, character: character - head.length }, position),
-                        newText: prefix
-                    }
-                });
-            }
-            else if (input.length == 0) {
-                let { prefix } = snip;
-                contentBehind = before_content.slice(0, -prefix.length);
-                Object.assign(item, {
-                    preselect: true,
-                    textEdit: {
-                        range: vscode_languageserver_protocol_1.Range.create({ line: position.line, character: character - prefix.length }, position),
-                        newText: prefix
-                    }
-                });
-            }
-            if (snip.triggerKind == types_1.TriggerKind.LineBegin && contentBehind.trim().length)
-                continue;
-            if (snip.triggerKind == types_1.TriggerKind.SpaceBefore) {
-                if (contentBehind.length && !/\s/.test(contentBehind[contentBehind.length - 1])) {
-                    continue;
-                }
-            }
-            if (!item.textEdit) {
-                item.textEdit = {
-                    range: vscode_languageserver_protocol_1.Range.create({ line: position.line, character }, position),
-                    newText: item.label
-                };
-            }
-            item.data.location = `${snip.filepath}:${snip.lnum}`;
-            item.data.line = contentBehind + snip.prefix;
-            res.push(item);
-        }
-        return res;
-    }
-    async resolveCompletionItem(item) {
-        let provider = this.providers.get(item.data.provider);
-        if (provider) {
-            let filetype = await coc_nvim_1.workspace.nvim.eval('&filetype');
-            let insertSnippet = await provider.resolveSnippetBody(item.data.snip, item.textEdit.range, item.data.line);
-            item.textEdit.newText = insertSnippet;
-            if (coc_nvim_1.snippetManager) {
-                let snip = await Promise.resolve(coc_nvim_1.snippetManager.resolveSnippet(insertSnippet));
-                item.documentation = {
-                    kind: 'markdown',
-                    value: util_1.markdownBlock(snip.toString(), filetype)
-                };
-            }
-        }
-        return item;
-    }
-    getPrefixHead(doc, prefix) {
-        let res = 0;
-        for (let idx = prefix.length - 1; idx >= 0; idx--) {
-            if (!doc.isWord(prefix[idx])) {
-                res = idx;
-                break;
-            }
-        }
-        return res == 0 ? '' : prefix.slice(0, res + 1);
-    }
-}
-exports.ProviderManager = ProviderManager;
-function characterIndex(content, byteIndex) {
-    let buf = Buffer.from(content, 'utf8');
-    return buf.slice(0, byteIndex).toString('utf8').length;
-}
-exports.characterIndex = characterIndex;
-
-
-/***/ }),
-/* 39 */
-/***/ ((__unused_webpack_module, exports) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.TriggerKind = void 0;
-var TriggerKind;
-(function (TriggerKind) {
-    TriggerKind[TriggerKind["SpaceBefore"] = 0] = "SpaceBefore";
-    TriggerKind[TriggerKind["LineBegin"] = 1] = "LineBegin";
-    TriggerKind[TriggerKind["WordBoundary"] = 2] = "WordBoundary";
-    TriggerKind[TriggerKind["InWord"] = 3] = "InWord";
-})(TriggerKind = exports.TriggerKind || (exports.TriggerKind = {}));
-
-
-/***/ }),
-/* 40 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.SnipmateProvider = void 0;
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(2));
-const path_1 = __importDefault(__webpack_require__(4));
-const readline_1 = __importDefault(__webpack_require__(41));
-const vscode_languageserver_types_1 = __webpack_require__(6);
-const baseProvider_1 = __importDefault(__webpack_require__(42));
-const types_1 = __webpack_require__(39);
-const util_1 = __webpack_require__(35);
-const parser_1 = __importDefault(__webpack_require__(43));
-class SnipmateProvider extends baseProvider_1.default {
-    constructor(channel, trace, config) {
-        super(config);
-        this.channel = channel;
-        this.trace = trace;
-        this.snippetFiles = [];
-        this.disposables = [];
-        coc_nvim_1.workspace.onDidSaveTextDocument(async (doc) => {
-            let uri = coc_nvim_1.Uri.parse(doc.uri);
-            if (uri.scheme != 'file')
-                return;
-            let filepath = uri.fsPath;
-            if (!fs_1.default.existsSync(filepath))
-                return;
-            let snippetFile = this.snippetFiles.find(s => s.filepath == filepath);
-            if (snippetFile)
-                await this.loadSnippetsFromFile(snippetFile.filetype, snippetFile.directory, filepath);
-        }, null, this.disposables);
-    }
-    async init() {
-        let arr = await this.getAllSnippetFiles();
-        let { nvim } = coc_nvim_1.workspace;
-        let author = await nvim.getVar('snips_author');
-        if (!author)
-            await nvim.setVar('snips_author', this.config.author);
-        await Promise.all(arr.map(({ filepath, directory, filetype }) => {
-            return this.loadSnippetsFromFile(filetype, directory, filepath);
-        }));
-    }
-    async loadSnippetsFromFile(filetype, directory, filepath) {
-        let snippets = await this.parseSnippetsFile(filepath);
-        let idx = this.snippetFiles.findIndex(o => o.filepath == filepath);
-        if (idx !== -1)
-            this.snippetFiles.splice(idx, 1);
-        this.snippetFiles.push({
-            directory,
-            filepath,
-            filetype,
-            snippets
-        });
-        this.channel.appendLine(`[Info ${(new Date()).toISOString()}] Loaded ${snippets.length} snipmate snippets from: ${filepath}`);
-    }
-    /**
-     * Resolve snippet body to inserted text.
-     *
-     * @public
-     * @param {Snippet} snippet
-     * @param {Range} _range
-     * @param {string} _line
-     * @returns {Promise<string>}
-     */
-    async resolveSnippetBody(snippet, _range, _line) {
-        let parser = new parser_1.default(snippet.body);
-        let resolved = '';
-        let { nvim } = coc_nvim_1.workspace;
-        while (!parser.eof()) {
-            if (parser.curr == '`') {
-                let idx = parser.nextIndex('`', true, false);
-                if (idx == -1) {
-                    resolved = resolved + parser.eatTo(parser.len);
-                    break;
-                }
-                let code = parser.eatTo(idx + 1);
-                code = code.slice(1, -1);
-                if (code.startsWith('Filename')) {
-                    resolved = resolved + await nvim.call('expand', '%:p:t');
-                }
-                else {
-                    try {
-                        resolved = resolved + await nvim.eval(code);
-                    }
-                    catch (e) {
-                        this.channel.appendLine(`[Error ${(new Date()).toLocaleTimeString()}] Error on eval: ${code}`);
-                    }
-                }
-                continue;
-            }
-            parser.iterate(ch => {
-                if (ch == '`') {
-                    return false;
-                }
-                else {
-                    resolved = resolved + ch;
-                }
-                return true;
-            });
-        }
-        return resolved;
-    }
-    /**
-     * Parse snippets from snippets file.
-     *
-     * @public
-     * @param {string} filepath
-     * @returns {Promise<Snippet[]>}
-     */
-    parseSnippetsFile(filepath) {
-        let res = [];
-        const rl = readline_1.default.createInterface({
-            input: fs_1.default.createReadStream(filepath, 'utf8'),
-            crlfDelay: Infinity
-        });
-        let lnum = 0;
-        let lines = [];
-        let prefix = '';
-        let description = '';
-        rl.on('line', line => {
-            lnum += 1;
-            if (line.startsWith('#'))
-                return;
-            if (line.startsWith('snippet')) {
-                line = line.replace(/\s*$/, '');
-                if (lines.length && prefix) {
-                    res.push({
-                        filepath,
-                        lnum: lnum - lines.length - 1,
-                        body: lines.join('\n').replace(/\s+$/, ''),
-                        prefix,
-                        description,
-                        triggerKind: types_1.TriggerKind.SpaceBefore
-                    });
-                    lines = [];
-                }
-                let ms = line.match(/^snippet\s+(\S+)(?:\s(.+))?$/);
-                if (!ms) {
-                    prefix = '';
-                    this.channel.appendLine(`[Error ${(new Date()).toLocaleTimeString()}] Broken line on ${filepath}:${lnum}`);
-                    return;
-                }
-                prefix = ms[1];
-                description = ms[2] || '';
-                return;
-            }
-            if (prefix) {
-                if (line.indexOf('VISUAL') !== -1) {
-                    line = line.replace(/\$(\{?)VISUAL\b(:[^\}])?(\}?)/g, '$$$1TM_SELECTED_TEXT$2$3');
-                }
-                if (line.startsWith('\t')) {
-                    lines.push(line.slice(1));
-                }
-                else {
-                    lines.push(line);
-                }
-            }
-        });
-        return new Promise(resolve => {
-            rl.on('close', async () => {
-                if (lines.length) {
-                    res.push({
-                        filepath,
-                        lnum: lnum - lines.length - 1,
-                        body: lines.join('\n'),
-                        prefix,
-                        description,
-                        triggerKind: types_1.TriggerKind.SpaceBefore
-                    });
-                }
-                resolve(res);
-            });
-        });
-    }
-    async getTriggerSnippets(document, position, autoTrigger) {
-        if (autoTrigger)
-            return [];
-        let snippets = await this.getSnippets(document.filetype);
-        let line = document.getline(position.line);
-        line = line.slice(0, position.character);
-        if (!line || line[line.length - 1] == ' ')
-            return [];
-        snippets = snippets.filter(s => {
-            let { prefix } = s;
-            if (!line.endsWith(prefix))
-                return false;
-            let pre = line.slice(0, line.length - prefix.length);
-            return pre.length == 0 || /\s/.test(pre[pre.length - 1]);
-        });
-        let edits = [];
-        for (let s of snippets) {
-            let character = position.character - s.prefix.length;
-            let range = vscode_languageserver_types_1.Range.create(position.line, character, position.line, position.character);
-            let newText = await this.resolveSnippetBody(s, range, line);
-            edits.push({
-                prefix: s.prefix,
-                description: s.description,
-                location: s.filepath,
-                range,
-                newText,
-                priority: -1
-            });
-        }
-        return edits;
-    }
-    async getSnippetFiles(filetype) {
-        let filetypes = this.getFiletypes(filetype);
-        let res = [];
-        for (let s of this.snippetFiles) {
-            if (filetypes.indexOf(s.filetype) !== -1) {
-                res.push(s.filepath);
-            }
-        }
-        return res;
-    }
-    async getSnippets(filetype) {
-        let filetypes = this.getFiletypes(filetype);
-        filetypes.push('_');
-        let snippetFiles = this.snippetFiles.filter(o => filetypes.indexOf(o.filetype) !== -1);
-        let result = [];
-        snippetFiles.sort((a, b) => {
-            if (a.filetype == b.filetype)
-                return 1;
-            if (a.filetype == filetype)
-                return -1;
-            return 1;
-        });
-        for (let file of snippetFiles) {
-            let { snippets } = file;
-            for (let snip of snippets) {
-                result.push(snip);
-            }
-        }
-        return result;
-    }
-    async getAllSnippetFiles() {
-        let { nvim } = coc_nvim_1.workspace;
-        let opt = await nvim.eval('&rtp');
-        let rtps = opt.split(',');
-        let res = [];
-        for (let rtp of rtps) {
-            let items = await this.getSnippetFileItems(path_1.default.join(rtp, 'snippets'));
-            res.push(...items);
-        }
-        return res;
-    }
-    async getSnippetFileItems(directory) {
-        let res = [];
-        let stat = await util_1.statAsync(directory);
-        if (stat && stat.isDirectory()) {
-            let files = await util_1.readdirAsync(directory);
-            if (files.length) {
-                for (let f of files) {
-                    let file = path_1.default.join(directory, f);
-                    if (file.endsWith('.snippets')) {
-                        let basename = path_1.default.basename(f, '.snippets');
-                        let filetype = basename.split('-', 2)[0];
-                        res.push({ filepath: file, directory, filetype });
-                    }
-                    else {
-                        let stat = await util_1.statAsync(file);
-                        if (stat && stat.isDirectory()) {
-                            let files = await util_1.readdirAsync(file);
-                            for (let filename of files) {
-                                if (filename.endsWith('.snippets')) {
-                                    res.push({ filepath: path_1.default.join(file, filename), directory, filetype: f });
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return res;
-    }
-}
-exports.SnipmateProvider = SnipmateProvider;
-
-
-/***/ }),
-/* 41 */
-/***/ ((module) => {
-
-module.exports = require("readline");;
-
-/***/ }),
-/* 42 */
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const coc_nvim_1 = __webpack_require__(1);
-const util_1 = __webpack_require__(35);
-class BaseProvider {
-    constructor(config) {
-        this.config = config;
-    }
-    async checkContext(_context) {
-        return true;
-    }
-    getExtendsFiletypes(filetype, exists = new Set()) {
-        if (exists.has(filetype))
-            return [];
-        let extend = this.config.extends ? this.config.extends[filetype] : null;
-        exists.add(filetype);
-        if (!extend || extend.length == 0)
-            return [];
-        return extend.reduce((arr, curr) => {
-            return arr.concat([curr], this.getExtendsFiletypes(curr, exists));
-        }, []);
-    }
-    getFiletypes(filetype) {
-        let filetypes = [filetype];
-        if (filetype.indexOf('.') !== -1) {
-            filetypes.push(...filetype.split('.'));
-        }
-        if (filetype == 'javascript.jsx')
-            filetypes.push('javascriptreact');
-        if (filetype == 'typescript.jsx' || filetype == 'typescript.tsx')
-            filetypes.push('typescriptreact');
-        let map = coc_nvim_1.workspace.env.filetypeMap;
-        if (map && map[filetype]) {
-            filetypes.push(map[filetype]);
-        }
-        let extendFiletypes = filetypes.reduce((arr, curr) => {
-            return arr.concat(this.getExtendsFiletypes(curr));
-        }, []);
-        filetypes.push(...extendFiletypes);
-        filetypes.reverse();
-        return util_1.distinct(filetypes);
-    }
-}
-exports.default = BaseProvider;
-
-
-/***/ }),
-/* 43 */
-/***/ ((__unused_webpack_module, exports) => {
-
-
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-/**
- * A very basic parser
- *
- * @public
- */
-class Parser {
-    constructor(_content) {
-        this._content = _content;
-        this._curr = 0;
-    }
-    eof() {
-        return this._curr >= this._content.length;
-    }
-    skipSpaces() {
-        for (let i = this._curr; i <= this._content.length; i++) {
-            let ch = this._content[i];
-            if (!ch || /\S/.test(ch)) {
-                this._curr = i;
-                break;
-            }
-        }
-    }
-    get index() {
-        return this._curr;
-    }
-    get curr() {
-        return this._content[this._curr] || '';
-    }
-    get len() {
-        return this._content.length;
-    }
-    next(count = 1) {
-        return this._content.slice(this._curr + 1, this._curr + 1 + count);
-    }
-    nextIndex(character, checkEscape = true, allowEnd = true) {
-        if (this._curr >= this.len - 1)
-            return allowEnd ? this.len - 1 : -1;
-        let i = this._curr + 1;
-        let pre = this.curr || '';
-        while (i != this.len - 1) {
-            let ch = this._content[i];
-            if (ch == character && (!checkEscape || pre !== '\\')) {
-                break;
-            }
-            pre = ch;
-            i = i + 1;
-        }
-        if (!allowEnd && i == this.len - 1 && character != this._content[i]) {
-            return -1;
-        }
-        return i;
-    }
-    prev() {
-        return this._content[this._curr - 1] || '';
-    }
-    iterate(fn) {
-        while (this._curr < this._content.length) {
-            let fine = fn(this.curr, this._curr);
-            if (fine === false) {
-                break;
-            }
-            this._curr = this._curr + 1;
-        }
-    }
-    eat(count) {
-        let end = this._curr + count;
-        end = Math.min(end, this.len);
-        let str = this._content.slice(this._curr, end);
-        this._curr = end;
-        return str;
-    }
-    // make curr to index, return contnet between curr (inclusive) and index (exclusive)
-    eatTo(index) {
-        if (index == this._curr)
-            return '';
-        let str = this._content.slice(this._curr, index);
-        this._curr = index;
-        return str;
-    }
-}
-exports.default = Parser;
-
-
-/***/ }),
-/* 44 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.TextmateProvider = void 0;
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(2));
-const jsonc_parser_1 = __webpack_require__(45);
-const os_1 = __importDefault(__webpack_require__(3));
-const path_1 = __importDefault(__webpack_require__(4));
-const util_1 = __importDefault(__webpack_require__(5));
-const vscode_languageserver_types_1 = __webpack_require__(6);
-const baseProvider_1 = __importDefault(__webpack_require__(42));
-const types_1 = __webpack_require__(39);
-const util_2 = __webpack_require__(35);
-class TextmateProvider extends baseProvider_1.default {
-    constructor(channel, trace, config) {
-        super(config);
-        this.channel = channel;
-        this.trace = trace;
-        this._snippetCache = {};
-        this._userSnippets = {};
-        if (config.loadFromExtensions) {
-            coc_nvim_1.extensions.onDidLoadExtension(extension => {
-                this.loadSnippetsFromExtension(extension).catch(e => {
-                    channel.appendLine(`[Error] ${e.message}`);
-                });
-            });
-            coc_nvim_1.extensions.onDidUnloadExtension(id => {
-                delete this._snippetCache[id];
-            });
-        }
-    }
-    async init() {
-        if (this.config.loadFromExtensions) {
-            for (let extension of coc_nvim_1.extensions.all) {
-                await this.loadSnippetsFromExtension(extension);
-            }
-        }
-        let paths = this.config.snippetsRoots;
-        if (paths && paths.length) {
-            for (let dir of paths) {
-                await this.loadSnippetsFromRoot(dir);
-            }
-        }
-    }
-    async getSnippetFiles(filetype) {
-        let filetypes = this.getFiletypes(filetype);
-        let filepaths = [];
-        if (this.config.loadFromExtensions) {
-            for (let key of Object.keys(this._snippetCache)) {
-                let cache = this._snippetCache[key];
-                for (let filetype of filetypes) {
-                    let snippets = cache[filetype];
-                    if (snippets && snippets.length) {
-                        filepaths.push(snippets[0].filepath);
-                    }
-                }
-            }
-        }
-        for (let filetype of filetypes) {
-            let snippets = this._userSnippets[filetype];
-            if (snippets && snippets.length) {
-                for (let snip of snippets) {
-                    let { filepath } = snip;
-                    if (filepaths.indexOf(filepath) == -1) {
-                        filepaths.push(filepath);
-                    }
-                }
-            }
-        }
-        return util_2.distinct(filepaths);
-    }
-    async getTriggerSnippets(document, position, autoTrigger) {
-        if (autoTrigger)
-            return [];
-        let line = document.getline(position.line);
-        line = line.slice(0, position.character);
-        let snippets = await this.getSnippets(document.filetype);
-        if (!snippets || !snippets.length)
-            return [];
-        let edits = [];
-        for (let snip of snippets) {
-            let { prefix } = snip;
-            if (!line.endsWith(prefix))
-                continue;
-            let pre = line.slice(0, line.length - prefix.length);
-            // not allowed after word
-            if (pre.length && /\w/.test(pre[pre.length - 1]))
-                continue;
-            edits.push({
-                prefix,
-                range: vscode_languageserver_types_1.Range.create(position.line, position.character - prefix.length, position.line, position.character),
-                newText: snip.body,
-                location: snip.filepath,
-                description: snip.description,
-                priority: -1
-            });
-        }
-        return edits;
-    }
-    async getSnippets(filetype) {
-        let res = [];
-        let filetypes = this.getFiletypes(filetype);
-        let added = new Set();
-        for (let key of Object.keys(this._snippetCache)) {
-            let cache = this._snippetCache[key];
-            for (let filetype of filetypes) {
-                let snippets = cache[filetype];
-                if (snippets) {
-                    for (let snip of snippets) {
-                        if (!added.has(snip.prefix)) {
-                            added.add(snip.prefix);
-                            res.push(snip);
-                        }
-                    }
-                }
-            }
-        }
-        for (let filetype of filetypes) {
-            let snippets = this._userSnippets[filetype];
-            if (snippets && snippets.length) {
-                for (let snip of snippets) {
-                    if (!added.has(snip.prefix)) {
-                        added.add(snip.prefix);
-                        res.push(snip);
-                    }
-                }
-            }
-        }
-        return res;
-    }
-    async resolveSnippetBody(snip, _range) {
-        return snip.body;
-    }
-    async loadSnippetsFromExtension(extension) {
-        let { packageJSON } = extension;
-        if (packageJSON.contributes && packageJSON.contributes.snippets) {
-            let { snippets } = packageJSON.contributes;
-            let def = {
-                extensionId: extension.id,
-                snippets: []
-            };
-            for (let item of snippets) {
-                let p = path_1.default.join(extension.extensionPath, item.path);
-                let { language } = item;
-                def.snippets.push({
-                    languageId: language,
-                    filepath: p
-                });
-            }
-            if (snippets && snippets.length) {
-                await this.loadSnippetsFromDefinition(def);
-            }
-        }
-    }
-    async loadSnippetsFromRoot(root) {
-        let { _userSnippets } = this;
-        if (root.startsWith('~'))
-            root = root.replace(/^~/, os_1.default.homedir());
-        let files = await util_1.default.promisify(fs_1.default.readdir)(root, 'utf8');
-        files = files.filter(f => f.endsWith('.json') || f.endsWith('.code-snippets'));
-        await Promise.all(files.map(file => {
-            file = path_1.default.join(root, file);
-            let basename = path_1.default.basename(file, '.json');
-            basename = basename.replace(/\.code-snippets$/, '');
-            return this.loadSnippetsFromFile(file).then(snippets => {
-                _userSnippets[basename] = snippets;
-            });
-        }));
-    }
-    async loadSnippetsFromDefinition(def) {
-        let { extensionId, snippets } = def;
-        let cache = this._snippetCache[extensionId] = {};
-        for (let item of snippets) {
-            let { languageId } = item;
-            if (!fs_1.default.existsSync(item.filepath))
-                continue;
-            let arr = await this.loadSnippetsFromFile(item.filepath);
-            let exists = cache[languageId] || [];
-            cache[languageId] = [...exists, ...arr];
-        }
-    }
-    async loadSnippetsFromFile(snippetFilePath) {
-        const contents = await new Promise((resolve, reject) => {
-            fs_1.default.readFile(snippetFilePath, "utf8", (err, data) => {
-                if (err)
-                    return reject(err);
-                resolve(data);
-            });
-        });
-        const snippets = this.loadSnippetsFromText(snippetFilePath, contents);
-        this.channel.appendLine(`[Info ${(new Date()).toISOString()}] Loaded ${snippets.length} textmate snippets from ${snippetFilePath}`);
-        return snippets;
-    }
-    loadSnippetsFromText(filepath, contents) {
-        let snippets = [];
-        try {
-            let errors = [];
-            let snippetObject = jsonc_parser_1.parse(contents, errors, { allowTrailingComma: true });
-            if (errors.length) {
-                this.channel.appendLine(`[Error ${(new Date()).toLocaleDateString()}] parser error of ${filepath}: ${JSON.stringify(errors, null, 2)}`);
-            }
-            if (snippetObject) {
-                for (let key of Object.keys(snippetObject)) {
-                    snippets.push(snippetObject[key]);
-                }
-            }
-        }
-        catch (ex) {
-            this.channel.appendLine(`[Error ${(new Date()).toLocaleDateString()}] ${ex.stack}`);
-            snippets = [];
-        }
-        const normalizedSnippets = snippets.map((snip) => {
-            let prefix = Array.isArray(snip.prefix) ? snip.prefix[0] : snip.prefix;
-            return {
-                filepath,
-                lnum: 0,
-                body: typeof snip.body === 'string' ? snip.body : snip.body.join('\n'),
-                prefix,
-                description: typeof snip.description === 'string' ? snip.description : typeof snip.description !== 'undefined' ? snip.description.join('\n') : '',
-                triggerKind: types_1.TriggerKind.WordBoundary
-            };
-        });
-        return normalizedSnippets;
-    }
-}
-exports.TextmateProvider = TextmateProvider;
-
-
-/***/ }),
-/* 45 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "createScanner": () => /* binding */ createScanner,
-/* harmony export */   "getLocation": () => /* binding */ getLocation,
-/* harmony export */   "parse": () => /* binding */ parse,
-/* harmony export */   "parseTree": () => /* binding */ parseTree,
-/* harmony export */   "findNodeAtLocation": () => /* binding */ findNodeAtLocation,
-/* harmony export */   "findNodeAtOffset": () => /* binding */ findNodeAtOffset,
-/* harmony export */   "getNodePath": () => /* binding */ getNodePath,
-/* harmony export */   "getNodeValue": () => /* binding */ getNodeValue,
-/* harmony export */   "visit": () => /* binding */ visit,
-/* harmony export */   "stripComments": () => /* binding */ stripComments,
-/* harmony export */   "printParseErrorCode": () => /* binding */ printParseErrorCode,
-/* harmony export */   "format": () => /* binding */ format,
-/* harmony export */   "modify": () => /* binding */ modify,
-/* harmony export */   "applyEdits": () => /* binding */ applyEdits
-/* harmony export */ });
-/* harmony import */ var _impl_format__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46);
-/* harmony import */ var _impl_edit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(48);
-/* harmony import */ var _impl_scanner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(47);
-/* harmony import */ var _impl_parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49);
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-
-
-
-
-/**
- * Creates a JSON scanner on the given text.
- * If ignoreTrivia is set, whitespaces or comments are ignored.
- */
-var createScanner = _impl_scanner__WEBPACK_IMPORTED_MODULE_3__.createScanner;
-/**
- * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.
- */
-var getLocation = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.getLocation;
-/**
- * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
- * Therefore, always check the errors list to find out if the input was valid.
- */
-var parse = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.parse;
-/**
- * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
- */
-var parseTree = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.parseTree;
-/**
- * Finds the node at the given path in a JSON DOM.
- */
-var findNodeAtLocation = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.findNodeAtLocation;
-/**
- * Finds the innermost node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.
- */
-var findNodeAtOffset = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.findNodeAtOffset;
-/**
- * Gets the JSON path of the given JSON DOM node
- */
-var getNodePath = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.getNodePath;
-/**
- * Evaluates the JavaScript object of the given JSON DOM node
- */
-var getNodeValue = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.getNodeValue;
-/**
- * Parses the given text and invokes the visitor functions for each object, array and literal reached.
- */
-var visit = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.visit;
-/**
- * Takes JSON with JavaScript-style comments and remove
- * them. Optionally replaces every none-newline character
- * of comments with a replaceCharacter
- */
-var stripComments = _impl_parser__WEBPACK_IMPORTED_MODULE_2__.stripComments;
-function printParseErrorCode(code) {
-    switch (code) {
-        case 1 /* InvalidSymbol */: return 'InvalidSymbol';
-        case 2 /* InvalidNumberFormat */: return 'InvalidNumberFormat';
-        case 3 /* PropertyNameExpected */: return 'PropertyNameExpected';
-        case 4 /* ValueExpected */: return 'ValueExpected';
-        case 5 /* ColonExpected */: return 'ColonExpected';
-        case 6 /* CommaExpected */: return 'CommaExpected';
-        case 7 /* CloseBraceExpected */: return 'CloseBraceExpected';
-        case 8 /* CloseBracketExpected */: return 'CloseBracketExpected';
-        case 9 /* EndOfFileExpected */: return 'EndOfFileExpected';
-        case 10 /* InvalidCommentToken */: return 'InvalidCommentToken';
-        case 11 /* UnexpectedEndOfComment */: return 'UnexpectedEndOfComment';
-        case 12 /* UnexpectedEndOfString */: return 'UnexpectedEndOfString';
-        case 13 /* UnexpectedEndOfNumber */: return 'UnexpectedEndOfNumber';
-        case 14 /* InvalidUnicode */: return 'InvalidUnicode';
-        case 15 /* InvalidEscapeCharacter */: return 'InvalidEscapeCharacter';
-        case 16 /* InvalidCharacter */: return 'InvalidCharacter';
-    }
-    return '<unknown ParseErrorCode>';
-}
-/**
- * Computes the edits needed to format a JSON document.
- *
- * @param documentText The input text
- * @param range The range to format or `undefined` to format the full content
- * @param options The formatting options
- * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or
- * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of
- * text in the original document. However, multiple edits can have
- * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.
- * To apply edits to an input, you can use `applyEdits`.
- */
-function format(documentText, range, options) {
-    return _impl_format__WEBPACK_IMPORTED_MODULE_0__.format(documentText, range, options);
-}
-/**
- * Computes the edits needed to modify a value in the JSON document.
- *
- * @param documentText The input text
- * @param path The path of the value to change. The path represents either to the document root, a property or an array item.
- * If the path points to an non-existing property or item, it will be created.
- * @param value The new value for the specified property or item. If the value is undefined,
- * the property or item will be removed.
- * @param options Options
- * @returns A list of edit operations describing the formatting changes to the original document. Edits can be either inserts, replacements or
- * removals of text segments. All offsets refer to the original state of the document. No two edits must change or remove the same range of
- * text in the original document. However, multiple edits can have
- * the same offset, for example multiple inserts, or an insert followed by a remove or replace. The order in the array defines which edit is applied first.
- * To apply edits to an input, you can use `applyEdits`.
- */
-function modify(text, path, value, options) {
-    return _impl_edit__WEBPACK_IMPORTED_MODULE_1__.setProperty(text, path, value, options);
-}
-/**
- * Applies edits to a input string.
- */
-function applyEdits(text, edits) {
-    for (var i = edits.length - 1; i >= 0; i--) {
-        text = _impl_edit__WEBPACK_IMPORTED_MODULE_1__.applyEdit(text, edits[i]);
-    }
-    return text;
-}
-
-
-/***/ }),
-/* 46 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "format": () => /* binding */ format,
-/* harmony export */   "isEOL": () => /* binding */ isEOL
-/* harmony export */ });
-/* harmony import */ var _scanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47);
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-
-function format(documentText, range, options) {
-    var initialIndentLevel;
-    var formatText;
-    var formatTextStart;
-    var rangeStart;
-    var rangeEnd;
-    if (range) {
-        rangeStart = range.offset;
-        rangeEnd = rangeStart + range.length;
-        formatTextStart = rangeStart;
-        while (formatTextStart > 0 && !isEOL(documentText, formatTextStart - 1)) {
-            formatTextStart--;
-        }
-        var endOffset = rangeEnd;
-        while (endOffset < documentText.length && !isEOL(documentText, endOffset)) {
-            endOffset++;
-        }
-        formatText = documentText.substring(formatTextStart, endOffset);
-        initialIndentLevel = computeIndentLevel(formatText, options);
-    }
-    else {
-        formatText = documentText;
-        initialIndentLevel = 0;
-        formatTextStart = 0;
-        rangeStart = 0;
-        rangeEnd = documentText.length;
-    }
-    var eol = getEOL(options, documentText);
-    var lineBreak = false;
-    var indentLevel = 0;
-    var indentValue;
-    if (options.insertSpaces) {
-        indentValue = repeat(' ', options.tabSize || 4);
-    }
-    else {
-        indentValue = '\t';
-    }
-    var scanner = (0,_scanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(formatText, false);
-    var hasError = false;
-    function newLineAndIndent() {
-        return eol + repeat(indentValue, initialIndentLevel + indentLevel);
-    }
-    function scanNext() {
-        var token = scanner.scan();
-        lineBreak = false;
-        while (token === 15 /* Trivia */ || token === 14 /* LineBreakTrivia */) {
-            lineBreak = lineBreak || (token === 14 /* LineBreakTrivia */);
-            token = scanner.scan();
-        }
-        hasError = token === 16 /* Unknown */ || scanner.getTokenError() !== 0 /* None */;
-        return token;
-    }
-    var editOperations = [];
-    function addEdit(text, startOffset, endOffset) {
-        if (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {
-            editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });
-        }
-    }
-    var firstToken = scanNext();
-    if (firstToken !== 17 /* EOF */) {
-        var firstTokenStart = scanner.getTokenOffset() + formatTextStart;
-        var initialIndent = repeat(indentValue, initialIndentLevel);
-        addEdit(initialIndent, formatTextStart, firstTokenStart);
-    }
-    while (firstToken !== 17 /* EOF */) {
-        var firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
-        var secondToken = scanNext();
-        var replaceContent = '';
-        while (!lineBreak && (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */)) {
-            // comments on the same line: keep them on the same line, but ignore them otherwise
-            var commentTokenStart = scanner.getTokenOffset() + formatTextStart;
-            addEdit(' ', firstTokenEnd, commentTokenStart);
-            firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
-            replaceContent = secondToken === 12 /* LineCommentTrivia */ ? newLineAndIndent() : '';
-            secondToken = scanNext();
-        }
-        if (secondToken === 2 /* CloseBraceToken */) {
-            if (firstToken !== 1 /* OpenBraceToken */) {
-                indentLevel--;
-                replaceContent = newLineAndIndent();
-            }
-        }
-        else if (secondToken === 4 /* CloseBracketToken */) {
-            if (firstToken !== 3 /* OpenBracketToken */) {
-                indentLevel--;
-                replaceContent = newLineAndIndent();
-            }
-        }
-        else {
-            switch (firstToken) {
-                case 3 /* OpenBracketToken */:
-                case 1 /* OpenBraceToken */:
-                    indentLevel++;
-                    replaceContent = newLineAndIndent();
-                    break;
-                case 5 /* CommaToken */:
-                case 12 /* LineCommentTrivia */:
-                    replaceContent = newLineAndIndent();
-                    break;
-                case 13 /* BlockCommentTrivia */:
-                    if (lineBreak) {
-                        replaceContent = newLineAndIndent();
-                    }
-                    else {
-                        // symbol following comment on the same line: keep on same line, separate with ' '
-                        replaceContent = ' ';
-                    }
-                    break;
-                case 6 /* ColonToken */:
-                    replaceContent = ' ';
-                    break;
-                case 10 /* StringLiteral */:
-                    if (secondToken === 6 /* ColonToken */) {
-                        replaceContent = '';
-                        break;
-                    }
-                // fall through
-                case 7 /* NullKeyword */:
-                case 8 /* TrueKeyword */:
-                case 9 /* FalseKeyword */:
-                case 11 /* NumericLiteral */:
-                case 2 /* CloseBraceToken */:
-                case 4 /* CloseBracketToken */:
-                    if (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */) {
-                        replaceContent = ' ';
-                    }
-                    else if (secondToken !== 5 /* CommaToken */ && secondToken !== 17 /* EOF */) {
-                        hasError = true;
-                    }
-                    break;
-                case 16 /* Unknown */:
-                    hasError = true;
-                    break;
-            }
-            if (lineBreak && (secondToken === 12 /* LineCommentTrivia */ || secondToken === 13 /* BlockCommentTrivia */)) {
-                replaceContent = newLineAndIndent();
-            }
-        }
-        var secondTokenStart = scanner.getTokenOffset() + formatTextStart;
-        addEdit(replaceContent, firstTokenEnd, secondTokenStart);
-        firstToken = secondToken;
-    }
-    return editOperations;
-}
-function repeat(s, count) {
-    var result = '';
-    for (var i = 0; i < count; i++) {
-        result += s;
-    }
-    return result;
-}
-function computeIndentLevel(content, options) {
-    var i = 0;
-    var nChars = 0;
-    var tabSize = options.tabSize || 4;
-    while (i < content.length) {
-        var ch = content.charAt(i);
-        if (ch === ' ') {
-            nChars++;
-        }
-        else if (ch === '\t') {
-            nChars += tabSize;
-        }
-        else {
-            break;
-        }
-        i++;
-    }
-    return Math.floor(nChars / tabSize);
-}
-function getEOL(options, text) {
-    for (var i = 0; i < text.length; i++) {
-        var ch = text.charAt(i);
-        if (ch === '\r') {
-            if (i + 1 < text.length && text.charAt(i + 1) === '\n') {
-                return '\r\n';
-            }
-            return '\r';
-        }
-        else if (ch === '\n') {
-            return '\n';
-        }
-    }
-    return (options && options.eol) || '\n';
-}
-function isEOL(text, offset) {
-    return '\r\n'.indexOf(text.charAt(offset)) !== -1;
-}
-
-
-/***/ }),
-/* 47 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "createScanner": () => /* binding */ createScanner
-/* harmony export */ });
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-/**
- * Creates a JSON scanner on the given text.
- * If ignoreTrivia is set, whitespaces or comments are ignored.
- */
-function createScanner(text, ignoreTrivia) {
-    if (ignoreTrivia === void 0) { ignoreTrivia = false; }
-    var len = text.length;
-    var pos = 0, value = '', tokenOffset = 0, token = 16 /* Unknown */, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0 /* None */;
-    function scanHexDigits(count, exact) {
-        var digits = 0;
-        var value = 0;
-        while (digits < count || !exact) {
-            var ch = text.charCodeAt(pos);
-            if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) {
-                value = value * 16 + ch - 48 /* _0 */;
-            }
-            else if (ch >= 65 /* A */ && ch <= 70 /* F */) {
-                value = value * 16 + ch - 65 /* A */ + 10;
-            }
-            else if (ch >= 97 /* a */ && ch <= 102 /* f */) {
-                value = value * 16 + ch - 97 /* a */ + 10;
-            }
-            else {
-                break;
-            }
-            pos++;
-            digits++;
-        }
-        if (digits < count) {
-            value = -1;
-        }
-        return value;
-    }
-    function setPosition(newPosition) {
-        pos = newPosition;
-        value = '';
-        tokenOffset = 0;
-        token = 16 /* Unknown */;
-        scanError = 0 /* None */;
-    }
-    function scanNumber() {
-        var start = pos;
-        if (text.charCodeAt(pos) === 48 /* _0 */) {
-            pos++;
-        }
-        else {
-            pos++;
-            while (pos < text.length && isDigit(text.charCodeAt(pos))) {
-                pos++;
-            }
-        }
-        if (pos < text.length && text.charCodeAt(pos) === 46 /* dot */) {
-            pos++;
-            if (pos < text.length && isDigit(text.charCodeAt(pos))) {
-                pos++;
-                while (pos < text.length && isDigit(text.charCodeAt(pos))) {
-                    pos++;
-                }
-            }
-            else {
-                scanError = 3 /* UnexpectedEndOfNumber */;
-                return text.substring(start, pos);
-            }
-        }
-        var end = pos;
-        if (pos < text.length && (text.charCodeAt(pos) === 69 /* E */ || text.charCodeAt(pos) === 101 /* e */)) {
-            pos++;
-            if (pos < text.length && text.charCodeAt(pos) === 43 /* plus */ || text.charCodeAt(pos) === 45 /* minus */) {
-                pos++;
-            }
-            if (pos < text.length && isDigit(text.charCodeAt(pos))) {
-                pos++;
-                while (pos < text.length && isDigit(text.charCodeAt(pos))) {
-                    pos++;
-                }
-                end = pos;
-            }
-            else {
-                scanError = 3 /* UnexpectedEndOfNumber */;
-            }
-        }
-        return text.substring(start, end);
-    }
-    function scanString() {
-        var result = '', start = pos;
-        while (true) {
-            if (pos >= len) {
-                result += text.substring(start, pos);
-                scanError = 2 /* UnexpectedEndOfString */;
-                break;
-            }
-            var ch = text.charCodeAt(pos);
-            if (ch === 34 /* doubleQuote */) {
-                result += text.substring(start, pos);
-                pos++;
-                break;
-            }
-            if (ch === 92 /* backslash */) {
-                result += text.substring(start, pos);
-                pos++;
-                if (pos >= len) {
-                    scanError = 2 /* UnexpectedEndOfString */;
-                    break;
-                }
-                var ch2 = text.charCodeAt(pos++);
-                switch (ch2) {
-                    case 34 /* doubleQuote */:
-                        result += '\"';
-                        break;
-                    case 92 /* backslash */:
-                        result += '\\';
-                        break;
-                    case 47 /* slash */:
-                        result += '/';
-                        break;
-                    case 98 /* b */:
-                        result += '\b';
-                        break;
-                    case 102 /* f */:
-                        result += '\f';
-                        break;
-                    case 110 /* n */:
-                        result += '\n';
-                        break;
-                    case 114 /* r */:
-                        result += '\r';
-                        break;
-                    case 116 /* t */:
-                        result += '\t';
-                        break;
-                    case 117 /* u */:
-                        var ch3 = scanHexDigits(4, true);
-                        if (ch3 >= 0) {
-                            result += String.fromCharCode(ch3);
-                        }
-                        else {
-                            scanError = 4 /* InvalidUnicode */;
-                        }
-                        break;
-                    default:
-                        scanError = 5 /* InvalidEscapeCharacter */;
-                }
-                start = pos;
-                continue;
-            }
-            if (ch >= 0 && ch <= 0x1f) {
-                if (isLineBreak(ch)) {
-                    result += text.substring(start, pos);
-                    scanError = 2 /* UnexpectedEndOfString */;
-                    break;
-                }
-                else {
-                    scanError = 6 /* InvalidCharacter */;
-                    // mark as error but continue with string
-                }
-            }
-            pos++;
-        }
-        return result;
-    }
-    function scanNext() {
-        value = '';
-        scanError = 0 /* None */;
-        tokenOffset = pos;
-        lineStartOffset = lineNumber;
-        prevTokenLineStartOffset = tokenLineStartOffset;
-        if (pos >= len) {
-            // at the end
-            tokenOffset = len;
-            return token = 17 /* EOF */;
-        }
-        var code = text.charCodeAt(pos);
-        // trivia: whitespace
-        if (isWhiteSpace(code)) {
-            do {
-                pos++;
-                value += String.fromCharCode(code);
-                code = text.charCodeAt(pos);
-            } while (isWhiteSpace(code));
-            return token = 15 /* Trivia */;
-        }
-        // trivia: newlines
-        if (isLineBreak(code)) {
-            pos++;
-            value += String.fromCharCode(code);
-            if (code === 13 /* carriageReturn */ && text.charCodeAt(pos) === 10 /* lineFeed */) {
-                pos++;
-                value += '\n';
-            }
-            lineNumber++;
-            tokenLineStartOffset = pos;
-            return token = 14 /* LineBreakTrivia */;
-        }
-        switch (code) {
-            // tokens: []{}:,
-            case 123 /* openBrace */:
-                pos++;
-                return token = 1 /* OpenBraceToken */;
-            case 125 /* closeBrace */:
-                pos++;
-                return token = 2 /* CloseBraceToken */;
-            case 91 /* openBracket */:
-                pos++;
-                return token = 3 /* OpenBracketToken */;
-            case 93 /* closeBracket */:
-                pos++;
-                return token = 4 /* CloseBracketToken */;
-            case 58 /* colon */:
-                pos++;
-                return token = 6 /* ColonToken */;
-            case 44 /* comma */:
-                pos++;
-                return token = 5 /* CommaToken */;
-            // strings
-            case 34 /* doubleQuote */:
-                pos++;
-                value = scanString();
-                return token = 10 /* StringLiteral */;
-            // comments
-            case 47 /* slash */:
-                var start = pos - 1;
-                // Single-line comment
-                if (text.charCodeAt(pos + 1) === 47 /* slash */) {
-                    pos += 2;
-                    while (pos < len) {
-                        if (isLineBreak(text.charCodeAt(pos))) {
-                            break;
-                        }
-                        pos++;
-                    }
-                    value = text.substring(start, pos);
-                    return token = 12 /* LineCommentTrivia */;
-                }
-                // Multi-line comment
-                if (text.charCodeAt(pos + 1) === 42 /* asterisk */) {
-                    pos += 2;
-                    var safeLength = len - 1; // For lookahead.
-                    var commentClosed = false;
-                    while (pos < safeLength) {
-                        var ch = text.charCodeAt(pos);
-                        if (ch === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) {
-                            pos += 2;
-                            commentClosed = true;
-                            break;
-                        }
-                        pos++;
-                        if (isLineBreak(ch)) {
-                            if (ch === 13 /* carriageReturn */ && text.charCodeAt(pos) === 10 /* lineFeed */) {
-                                pos++;
-                            }
-                            lineNumber++;
-                            tokenLineStartOffset = pos;
-                        }
-                    }
-                    if (!commentClosed) {
-                        pos++;
-                        scanError = 1 /* UnexpectedEndOfComment */;
-                    }
-                    value = text.substring(start, pos);
-                    return token = 13 /* BlockCommentTrivia */;
-                }
-                // just a single slash
-                value += String.fromCharCode(code);
-                pos++;
-                return token = 16 /* Unknown */;
-            // numbers
-            case 45 /* minus */:
-                value += String.fromCharCode(code);
-                pos++;
-                if (pos === len || !isDigit(text.charCodeAt(pos))) {
-                    return token = 16 /* Unknown */;
-                }
-            // found a minus, followed by a number so
-            // we fall through to proceed with scanning
-            // numbers
-            case 48 /* _0 */:
-            case 49 /* _1 */:
-            case 50 /* _2 */:
-            case 51 /* _3 */:
-            case 52 /* _4 */:
-            case 53 /* _5 */:
-            case 54 /* _6 */:
-            case 55 /* _7 */:
-            case 56 /* _8 */:
-            case 57 /* _9 */:
-                value += scanNumber();
-                return token = 11 /* NumericLiteral */;
-            // literals and unknown symbols
-            default:
-                // is a literal? Read the full word.
-                while (pos < len && isUnknownContentCharacter(code)) {
-                    pos++;
-                    code = text.charCodeAt(pos);
-                }
-                if (tokenOffset !== pos) {
-                    value = text.substring(tokenOffset, pos);
-                    // keywords: true, false, null
-                    switch (value) {
-                        case 'true': return token = 8 /* TrueKeyword */;
-                        case 'false': return token = 9 /* FalseKeyword */;
-                        case 'null': return token = 7 /* NullKeyword */;
-                    }
-                    return token = 16 /* Unknown */;
-                }
-                // some
-                value += String.fromCharCode(code);
-                pos++;
-                return token = 16 /* Unknown */;
-        }
-    }
-    function isUnknownContentCharacter(code) {
-        if (isWhiteSpace(code) || isLineBreak(code)) {
-            return false;
-        }
-        switch (code) {
-            case 125 /* closeBrace */:
-            case 93 /* closeBracket */:
-            case 123 /* openBrace */:
-            case 91 /* openBracket */:
-            case 34 /* doubleQuote */:
-            case 58 /* colon */:
-            case 44 /* comma */:
-            case 47 /* slash */:
-                return false;
-        }
-        return true;
-    }
-    function scanNextNonTrivia() {
-        var result;
-        do {
-            result = scanNext();
-        } while (result >= 12 /* LineCommentTrivia */ && result <= 15 /* Trivia */);
-        return result;
-    }
-    return {
-        setPosition: setPosition,
-        getPosition: function () { return pos; },
-        scan: ignoreTrivia ? scanNextNonTrivia : scanNext,
-        getToken: function () { return token; },
-        getTokenValue: function () { return value; },
-        getTokenOffset: function () { return tokenOffset; },
-        getTokenLength: function () { return pos - tokenOffset; },
-        getTokenStartLine: function () { return lineStartOffset; },
-        getTokenStartCharacter: function () { return tokenOffset - prevTokenLineStartOffset; },
-        getTokenError: function () { return scanError; },
-    };
-}
-function isWhiteSpace(ch) {
-    return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ ||
-        ch === 160 /* nonBreakingSpace */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ ||
-        ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */;
-}
-function isLineBreak(ch) {
-    return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */;
-}
-function isDigit(ch) {
-    return ch >= 48 /* _0 */ && ch <= 57 /* _9 */;
-}
-
-
-/***/ }),
-/* 48 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "removeProperty": () => /* binding */ removeProperty,
-/* harmony export */   "setProperty": () => /* binding */ setProperty,
-/* harmony export */   "applyEdit": () => /* binding */ applyEdit,
-/* harmony export */   "isWS": () => /* binding */ isWS
-/* harmony export */ });
-/* harmony import */ var _format__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46);
-/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49);
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-
-
-function removeProperty(text, path, options) {
-    return setProperty(text, path, void 0, options);
-}
-function setProperty(text, originalPath, value, options) {
-    var _a;
-    var path = originalPath.slice();
-    var errors = [];
-    var root = (0,_parser__WEBPACK_IMPORTED_MODULE_1__.parseTree)(text, errors);
-    var parent = void 0;
-    var lastSegment = void 0;
-    while (path.length > 0) {
-        lastSegment = path.pop();
-        parent = (0,_parser__WEBPACK_IMPORTED_MODULE_1__.findNodeAtLocation)(root, path);
-        if (parent === void 0 && value !== void 0) {
-            if (typeof lastSegment === 'string') {
-                value = (_a = {}, _a[lastSegment] = value, _a);
-            }
-            else {
-                value = [value];
-            }
-        }
-        else {
-            break;
-        }
-    }
-    if (!parent) {
-        // empty document
-        if (value === void 0) { // delete
-            throw new Error('Can not delete in empty document');
-        }
-        return withFormatting(text, { offset: root ? root.offset : 0, length: root ? root.length : 0, content: JSON.stringify(value) }, options);
-    }
-    else if (parent.type === 'object' && typeof lastSegment === 'string' && Array.isArray(parent.children)) {
-        var existing = (0,_parser__WEBPACK_IMPORTED_MODULE_1__.findNodeAtLocation)(parent, [lastSegment]);
-        if (existing !== void 0) {
-            if (value === void 0) { // delete
-                if (!existing.parent) {
-                    throw new Error('Malformed AST');
-                }
-                var propertyIndex = parent.children.indexOf(existing.parent);
-                var removeBegin = void 0;
-                var removeEnd = existing.parent.offset + existing.parent.length;
-                if (propertyIndex > 0) {
-                    // remove the comma of the previous node
-                    var previous = parent.children[propertyIndex - 1];
-                    removeBegin = previous.offset + previous.length;
-                }
-                else {
-                    removeBegin = parent.offset + 1;
-                    if (parent.children.length > 1) {
-                        // remove the comma of the next node
-                        var next = parent.children[1];
-                        removeEnd = next.offset;
-                    }
-                }
-                return withFormatting(text, { offset: removeBegin, length: removeEnd - removeBegin, content: '' }, options);
-            }
-            else {
-                // set value of existing property
-                return withFormatting(text, { offset: existing.offset, length: existing.length, content: JSON.stringify(value) }, options);
-            }
-        }
-        else {
-            if (value === void 0) { // delete
-                return []; // property does not exist, nothing to do
-            }
-            var newProperty = JSON.stringify(lastSegment) + ": " + JSON.stringify(value);
-            var index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map(function (p) { return p.children[0].value; })) : parent.children.length;
-            var edit = void 0;
-            if (index > 0) {
-                var previous = parent.children[index - 1];
-                edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };
-            }
-            else if (parent.children.length === 0) {
-                edit = { offset: parent.offset + 1, length: 0, content: newProperty };
-            }
-            else {
-                edit = { offset: parent.offset + 1, length: 0, content: newProperty + ',' };
-            }
-            return withFormatting(text, edit, options);
-        }
-    }
-    else if (parent.type === 'array' && typeof lastSegment === 'number' && Array.isArray(parent.children)) {
-        var insertIndex = lastSegment;
-        if (insertIndex === -1) {
-            // Insert
-            var newProperty = "" + JSON.stringify(value);
-            var edit = void 0;
-            if (parent.children.length === 0) {
-                edit = { offset: parent.offset + 1, length: 0, content: newProperty };
-            }
-            else {
-                var previous = parent.children[parent.children.length - 1];
-                edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };
-            }
-            return withFormatting(text, edit, options);
-        }
-        else if (value === void 0 && parent.children.length >= 0) {
-            // Removal
-            var removalIndex = lastSegment;
-            var toRemove = parent.children[removalIndex];
-            var edit = void 0;
-            if (parent.children.length === 1) {
-                // only item
-                edit = { offset: parent.offset + 1, length: parent.length - 2, content: '' };
-            }
-            else if (parent.children.length - 1 === removalIndex) {
-                // last item
-                var previous = parent.children[removalIndex - 1];
-                var offset = previous.offset + previous.length;
-                var parentEndOffset = parent.offset + parent.length;
-                edit = { offset: offset, length: parentEndOffset - 2 - offset, content: '' };
-            }
-            else {
-                edit = { offset: toRemove.offset, length: parent.children[removalIndex + 1].offset - toRemove.offset, content: '' };
-            }
-            return withFormatting(text, edit, options);
-        }
-        else if (value !== void 0) {
-            var edit = void 0;
-            var newProperty = "" + JSON.stringify(value);
-            if (!options.isArrayInsertion && parent.children.length > lastSegment) {
-                var toModify = parent.children[lastSegment];
-                edit = { offset: toModify.offset, length: toModify.length, content: newProperty };
-            }
-            else if (parent.children.length === 0 || lastSegment === 0) {
-                edit = { offset: parent.offset + 1, length: 0, content: parent.children.length === 0 ? newProperty : newProperty + ',' };
-            }
-            else {
-                var index = lastSegment > parent.children.length ? parent.children.length : lastSegment;
-                var previous = parent.children[index - 1];
-                edit = { offset: previous.offset + previous.length, length: 0, content: ',' + newProperty };
-            }
-            return withFormatting(text, edit, options);
-        }
-        else {
-            throw new Error("Can not " + (value === void 0 ? 'remove' : (options.isArrayInsertion ? 'insert' : 'modify')) + " Array index " + insertIndex + " as length is not sufficient");
-        }
-    }
-    else {
-        throw new Error("Can not add " + (typeof lastSegment !== 'number' ? 'index' : 'property') + " to parent of type " + parent.type);
-    }
-}
-function withFormatting(text, edit, options) {
-    if (!options.formattingOptions) {
-        return [edit];
-    }
-    // apply the edit
-    var newText = applyEdit(text, edit);
-    // format the new text
-    var begin = edit.offset;
-    var end = edit.offset + edit.content.length;
-    if (edit.length === 0 || edit.content.length === 0) { // insert or remove
-        while (begin > 0 && !(0,_format__WEBPACK_IMPORTED_MODULE_0__.isEOL)(newText, begin - 1)) {
-            begin--;
-        }
-        while (end < newText.length && !(0,_format__WEBPACK_IMPORTED_MODULE_0__.isEOL)(newText, end)) {
-            end++;
-        }
-    }
-    var edits = (0,_format__WEBPACK_IMPORTED_MODULE_0__.format)(newText, { offset: begin, length: end - begin }, options.formattingOptions);
-    // apply the formatting edits and track the begin and end offsets of the changes
-    for (var i = edits.length - 1; i >= 0; i--) {
-        var edit_1 = edits[i];
-        newText = applyEdit(newText, edit_1);
-        begin = Math.min(begin, edit_1.offset);
-        end = Math.max(end, edit_1.offset + edit_1.length);
-        end += edit_1.content.length - edit_1.length;
-    }
-    // create a single edit with all changes
-    var editLength = text.length - (newText.length - end) - begin;
-    return [{ offset: begin, length: editLength, content: newText.substring(begin, end) }];
-}
-function applyEdit(text, edit) {
-    return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);
-}
-function isWS(text, offset) {
-    return '\r\n \t'.indexOf(text.charAt(offset)) !== -1;
-}
-
-
-/***/ }),
-/* 49 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "getLocation": () => /* binding */ getLocation,
-/* harmony export */   "parse": () => /* binding */ parse,
-/* harmony export */   "parseTree": () => /* binding */ parseTree,
-/* harmony export */   "findNodeAtLocation": () => /* binding */ findNodeAtLocation,
-/* harmony export */   "getNodePath": () => /* binding */ getNodePath,
-/* harmony export */   "getNodeValue": () => /* binding */ getNodeValue,
-/* harmony export */   "contains": () => /* binding */ contains,
-/* harmony export */   "findNodeAtOffset": () => /* binding */ findNodeAtOffset,
-/* harmony export */   "visit": () => /* binding */ visit,
-/* harmony export */   "stripComments": () => /* binding */ stripComments,
-/* harmony export */   "getNodeType": () => /* binding */ getNodeType
-/* harmony export */ });
-/* harmony import */ var _scanner__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(47);
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-
-var ParseOptions;
-(function (ParseOptions) {
-    ParseOptions.DEFAULT = {
-        allowTrailingComma: false
-    };
-})(ParseOptions || (ParseOptions = {}));
-/**
- * For a given offset, evaluate the location in the JSON document. Each segment in the location path is either a property name or an array index.
- */
-function getLocation(text, position) {
-    var segments = []; // strings or numbers
-    var earlyReturnException = new Object();
-    var previousNode = undefined;
-    var previousNodeInst = {
-        value: {},
-        offset: 0,
-        length: 0,
-        type: 'object',
-        parent: undefined
-    };
-    var isAtPropertyKey = false;
-    function setPreviousNode(value, offset, length, type) {
-        previousNodeInst.value = value;
-        previousNodeInst.offset = offset;
-        previousNodeInst.length = length;
-        previousNodeInst.type = type;
-        previousNodeInst.colonOffset = undefined;
-        previousNode = previousNodeInst;
-    }
-    try {
-        visit(text, {
-            onObjectBegin: function (offset, length) {
-                if (position <= offset) {
-                    throw earlyReturnException;
-                }
-                previousNode = undefined;
-                isAtPropertyKey = position > offset;
-                segments.push(''); // push a placeholder (will be replaced)
-            },
-            onObjectProperty: function (name, offset, length) {
-                if (position < offset) {
-                    throw earlyReturnException;
-                }
-                setPreviousNode(name, offset, length, 'property');
-                segments[segments.length - 1] = name;
-                if (position <= offset + length) {
-                    throw earlyReturnException;
-                }
-            },
-            onObjectEnd: function (offset, length) {
-                if (position <= offset) {
-                    throw earlyReturnException;
-                }
-                previousNode = undefined;
-                segments.pop();
-            },
-            onArrayBegin: function (offset, length) {
-                if (position <= offset) {
-                    throw earlyReturnException;
-                }
-                previousNode = undefined;
-                segments.push(0);
-            },
-            onArrayEnd: function (offset, length) {
-                if (position <= offset) {
-                    throw earlyReturnException;
-                }
-                previousNode = undefined;
-                segments.pop();
-            },
-            onLiteralValue: function (value, offset, length) {
-                if (position < offset) {
-                    throw earlyReturnException;
-                }
-                setPreviousNode(value, offset, length, getNodeType(value));
-                if (position <= offset + length) {
-                    throw earlyReturnException;
-                }
-            },
-            onSeparator: function (sep, offset, length) {
-                if (position <= offset) {
-                    throw earlyReturnException;
-                }
-                if (sep === ':' && previousNode && previousNode.type === 'property') {
-                    previousNode.colonOffset = offset;
-                    isAtPropertyKey = false;
-                    previousNode = undefined;
-                }
-                else if (sep === ',') {
-                    var last = segments[segments.length - 1];
-                    if (typeof last === 'number') {
-                        segments[segments.length - 1] = last + 1;
-                    }
-                    else {
-                        isAtPropertyKey = true;
-                        segments[segments.length - 1] = '';
-                    }
-                    previousNode = undefined;
-                }
-            }
-        });
-    }
-    catch (e) {
-        if (e !== earlyReturnException) {
-            throw e;
-        }
-    }
-    return {
-        path: segments,
-        previousNode: previousNode,
-        isAtPropertyKey: isAtPropertyKey,
-        matches: function (pattern) {
-            var k = 0;
-            for (var i = 0; k < pattern.length && i < segments.length; i++) {
-                if (pattern[k] === segments[i] || pattern[k] === '*') {
-                    k++;
-                }
-                else if (pattern[k] !== '**') {
-                    return false;
-                }
-            }
-            return k === pattern.length;
-        }
-    };
-}
-/**
- * Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
- * Therefore always check the errors list to find out if the input was valid.
- */
-function parse(text, errors, options) {
-    if (errors === void 0) { errors = []; }
-    if (options === void 0) { options = ParseOptions.DEFAULT; }
-    var currentProperty = null;
-    var currentParent = [];
-    var previousParents = [];
-    function onValue(value) {
-        if (Array.isArray(currentParent)) {
-            currentParent.push(value);
-        }
-        else if (currentProperty !== null) {
-            currentParent[currentProperty] = value;
-        }
-    }
-    var visitor = {
-        onObjectBegin: function () {
-            var object = {};
-            onValue(object);
-            previousParents.push(currentParent);
-            currentParent = object;
-            currentProperty = null;
-        },
-        onObjectProperty: function (name) {
-            currentProperty = name;
-        },
-        onObjectEnd: function () {
-            currentParent = previousParents.pop();
-        },
-        onArrayBegin: function () {
-            var array = [];
-            onValue(array);
-            previousParents.push(currentParent);
-            currentParent = array;
-            currentProperty = null;
-        },
-        onArrayEnd: function () {
-            currentParent = previousParents.pop();
-        },
-        onLiteralValue: onValue,
-        onError: function (error, offset, length) {
-            errors.push({ error: error, offset: offset, length: length });
-        }
-    };
-    visit(text, visitor, options);
-    return currentParent[0];
-}
-/**
- * Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
- */
-function parseTree(text, errors, options) {
-    if (errors === void 0) { errors = []; }
-    if (options === void 0) { options = ParseOptions.DEFAULT; }
-    var currentParent = { type: 'array', offset: -1, length: -1, children: [], parent: undefined }; // artificial root
-    function ensurePropertyComplete(endOffset) {
-        if (currentParent.type === 'property') {
-            currentParent.length = endOffset - currentParent.offset;
-            currentParent = currentParent.parent;
-        }
-    }
-    function onValue(valueNode) {
-        currentParent.children.push(valueNode);
-        return valueNode;
-    }
-    var visitor = {
-        onObjectBegin: function (offset) {
-            currentParent = onValue({ type: 'object', offset: offset, length: -1, parent: currentParent, children: [] });
-        },
-        onObjectProperty: function (name, offset, length) {
-            currentParent = onValue({ type: 'property', offset: offset, length: -1, parent: currentParent, children: [] });
-            currentParent.children.push({ type: 'string', value: name, offset: offset, length: length, parent: currentParent });
-        },
-        onObjectEnd: function (offset, length) {
-            ensurePropertyComplete(offset + length); // in case of a missing value for a property: make sure property is complete
-            currentParent.length = offset + length - currentParent.offset;
-            currentParent = currentParent.parent;
-            ensurePropertyComplete(offset + length);
-        },
-        onArrayBegin: function (offset, length) {
-            currentParent = onValue({ type: 'array', offset: offset, length: -1, parent: currentParent, children: [] });
-        },
-        onArrayEnd: function (offset, length) {
-            currentParent.length = offset + length - currentParent.offset;
-            currentParent = currentParent.parent;
-            ensurePropertyComplete(offset + length);
-        },
-        onLiteralValue: function (value, offset, length) {
-            onValue({ type: getNodeType(value), offset: offset, length: length, parent: currentParent, value: value });
-            ensurePropertyComplete(offset + length);
-        },
-        onSeparator: function (sep, offset, length) {
-            if (currentParent.type === 'property') {
-                if (sep === ':') {
-                    currentParent.colonOffset = offset;
-                }
-                else if (sep === ',') {
-                    ensurePropertyComplete(offset);
-                }
-            }
-        },
-        onError: function (error, offset, length) {
-            errors.push({ error: error, offset: offset, length: length });
-        }
-    };
-    visit(text, visitor, options);
-    var result = currentParent.children[0];
-    if (result) {
-        delete result.parent;
-    }
-    return result;
-}
-/**
- * Finds the node at the given path in a JSON DOM.
- */
-function findNodeAtLocation(root, path) {
-    if (!root) {
-        return undefined;
-    }
-    var node = root;
-    for (var _i = 0, path_1 = path; _i < path_1.length; _i++) {
-        var segment = path_1[_i];
-        if (typeof segment === 'string') {
-            if (node.type !== 'object' || !Array.isArray(node.children)) {
-                return undefined;
-            }
-            var found = false;
-            for (var _a = 0, _b = node.children; _a < _b.length; _a++) {
-                var propertyNode = _b[_a];
-                if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment) {
-                    node = propertyNode.children[1];
-                    found = true;
-                    break;
-                }
-            }
-            if (!found) {
-                return undefined;
-            }
-        }
-        else {
-            var index = segment;
-            if (node.type !== 'array' || index < 0 || !Array.isArray(node.children) || index >= node.children.length) {
-                return undefined;
-            }
-            node = node.children[index];
-        }
-    }
-    return node;
-}
-/**
- * Gets the JSON path of the given JSON DOM node
- */
-function getNodePath(node) {
-    if (!node.parent || !node.parent.children) {
-        return [];
-    }
-    var path = getNodePath(node.parent);
-    if (node.parent.type === 'property') {
-        var key = node.parent.children[0].value;
-        path.push(key);
-    }
-    else if (node.parent.type === 'array') {
-        var index = node.parent.children.indexOf(node);
-        if (index !== -1) {
-            path.push(index);
-        }
-    }
-    return path;
-}
-/**
- * Evaluates the JavaScript object of the given JSON DOM node
- */
-function getNodeValue(node) {
-    switch (node.type) {
-        case 'array':
-            return node.children.map(getNodeValue);
-        case 'object':
-            var obj = Object.create(null);
-            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {
-                var prop = _a[_i];
-                var valueNode = prop.children[1];
-                if (valueNode) {
-                    obj[prop.children[0].value] = getNodeValue(valueNode);
-                }
-            }
-            return obj;
-        case 'null':
-        case 'string':
-        case 'number':
-        case 'boolean':
-            return node.value;
-        default:
-            return undefined;
-    }
-}
-function contains(node, offset, includeRightBound) {
-    if (includeRightBound === void 0) { includeRightBound = false; }
-    return (offset >= node.offset && offset < (node.offset + node.length)) || includeRightBound && (offset === (node.offset + node.length));
-}
-/**
- * Finds the most inner node at the given offset. If includeRightBound is set, also finds nodes that end at the given offset.
- */
-function findNodeAtOffset(node, offset, includeRightBound) {
-    if (includeRightBound === void 0) { includeRightBound = false; }
-    if (contains(node, offset, includeRightBound)) {
-        var children = node.children;
-        if (Array.isArray(children)) {
-            for (var i = 0; i < children.length && children[i].offset <= offset; i++) {
-                var item = findNodeAtOffset(children[i], offset, includeRightBound);
-                if (item) {
-                    return item;
-                }
-            }
-        }
-        return node;
-    }
-    return undefined;
-}
-/**
- * Parses the given text and invokes the visitor functions for each object, array and literal reached.
- */
-function visit(text, visitor, options) {
-    if (options === void 0) { options = ParseOptions.DEFAULT; }
-    var _scanner = (0,_scanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(text, false);
-    function toNoArgVisit(visitFunction) {
-        return visitFunction ? function () { return visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()); } : function () { return true; };
-    }
-    function toOneArgVisit(visitFunction) {
-        return visitFunction ? function (arg) { return visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()); } : function () { return true; };
-    }
-    var onObjectBegin = toNoArgVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisit(visitor.onObjectProperty), onObjectEnd = toNoArgVisit(visitor.onObjectEnd), onArrayBegin = toNoArgVisit(visitor.onArrayBegin), onArrayEnd = toNoArgVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisit(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);
-    var disallowComments = options && options.disallowComments;
-    var allowTrailingComma = options && options.allowTrailingComma;
-    function scanNext() {
-        while (true) {
-            var token = _scanner.scan();
-            switch (_scanner.getTokenError()) {
-                case 4 /* InvalidUnicode */:
-                    handleError(14 /* InvalidUnicode */);
-                    break;
-                case 5 /* InvalidEscapeCharacter */:
-                    handleError(15 /* InvalidEscapeCharacter */);
-                    break;
-                case 3 /* UnexpectedEndOfNumber */:
-                    handleError(13 /* UnexpectedEndOfNumber */);
-                    break;
-                case 1 /* UnexpectedEndOfComment */:
-                    if (!disallowComments) {
-                        handleError(11 /* UnexpectedEndOfComment */);
-                    }
-                    break;
-                case 2 /* UnexpectedEndOfString */:
-                    handleError(12 /* UnexpectedEndOfString */);
-                    break;
-                case 6 /* InvalidCharacter */:
-                    handleError(16 /* InvalidCharacter */);
-                    break;
-            }
-            switch (token) {
-                case 12 /* LineCommentTrivia */:
-                case 13 /* BlockCommentTrivia */:
-                    if (disallowComments) {
-                        handleError(10 /* InvalidCommentToken */);
-                    }
-                    else {
-                        onComment();
-                    }
-                    break;
-                case 16 /* Unknown */:
-                    handleError(1 /* InvalidSymbol */);
-                    break;
-                case 15 /* Trivia */:
-                case 14 /* LineBreakTrivia */:
-                    break;
-                default:
-                    return token;
-            }
-        }
-    }
-    function handleError(error, skipUntilAfter, skipUntil) {
-        if (skipUntilAfter === void 0) { skipUntilAfter = []; }
-        if (skipUntil === void 0) { skipUntil = []; }
-        onError(error);
-        if (skipUntilAfter.length + skipUntil.length > 0) {
-            var token = _scanner.getToken();
-            while (token !== 17 /* EOF */) {
-                if (skipUntilAfter.indexOf(token) !== -1) {
-                    scanNext();
-                    break;
-                }
-                else if (skipUntil.indexOf(token) !== -1) {
-                    break;
-                }
-                token = scanNext();
-            }
-        }
-    }
-    function parseString(isValue) {
-        var value = _scanner.getTokenValue();
-        if (isValue) {
-            onLiteralValue(value);
-        }
-        else {
-            onObjectProperty(value);
-        }
-        scanNext();
-        return true;
-    }
-    function parseLiteral() {
-        switch (_scanner.getToken()) {
-            case 11 /* NumericLiteral */:
-                var tokenValue = _scanner.getTokenValue();
-                var value = Number(tokenValue);
-                if (isNaN(value)) {
-                    handleError(2 /* InvalidNumberFormat */);
-                    value = 0;
-                }
-                onLiteralValue(value);
-                break;
-            case 7 /* NullKeyword */:
-                onLiteralValue(null);
-                break;
-            case 8 /* TrueKeyword */:
-                onLiteralValue(true);
-                break;
-            case 9 /* FalseKeyword */:
-                onLiteralValue(false);
-                break;
-            default:
-                return false;
-        }
-        scanNext();
-        return true;
-    }
-    function parseProperty() {
-        if (_scanner.getToken() !== 10 /* StringLiteral */) {
-            handleError(3 /* PropertyNameExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);
-            return false;
-        }
-        parseString(false);
-        if (_scanner.getToken() === 6 /* ColonToken */) {
-            onSeparator(':');
-            scanNext(); // consume colon
-            if (!parseValue()) {
-                handleError(4 /* ValueExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);
-            }
-        }
-        else {
-            handleError(5 /* ColonExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);
-        }
-        return true;
-    }
-    function parseObject() {
-        onObjectBegin();
-        scanNext(); // consume open brace
-        var needsComma = false;
-        while (_scanner.getToken() !== 2 /* CloseBraceToken */ && _scanner.getToken() !== 17 /* EOF */) {
-            if (_scanner.getToken() === 5 /* CommaToken */) {
-                if (!needsComma) {
-                    handleError(4 /* ValueExpected */, [], []);
-                }
-                onSeparator(',');
-                scanNext(); // consume comma
-                if (_scanner.getToken() === 2 /* CloseBraceToken */ && allowTrailingComma) {
-                    break;
-                }
-            }
-            else if (needsComma) {
-                handleError(6 /* CommaExpected */, [], []);
-            }
-            if (!parseProperty()) {
-                handleError(4 /* ValueExpected */, [], [2 /* CloseBraceToken */, 5 /* CommaToken */]);
-            }
-            needsComma = true;
-        }
-        onObjectEnd();
-        if (_scanner.getToken() !== 2 /* CloseBraceToken */) {
-            handleError(7 /* CloseBraceExpected */, [2 /* CloseBraceToken */], []);
-        }
-        else {
-            scanNext(); // consume close brace
-        }
-        return true;
-    }
-    function parseArray() {
-        onArrayBegin();
-        scanNext(); // consume open bracket
-        var needsComma = false;
-        while (_scanner.getToken() !== 4 /* CloseBracketToken */ && _scanner.getToken() !== 17 /* EOF */) {
-            if (_scanner.getToken() === 5 /* CommaToken */) {
-                if (!needsComma) {
-                    handleError(4 /* ValueExpected */, [], []);
-                }
-                onSeparator(',');
-                scanNext(); // consume comma
-                if (_scanner.getToken() === 4 /* CloseBracketToken */ && allowTrailingComma) {
-                    break;
-                }
-            }
-            else if (needsComma) {
-                handleError(6 /* CommaExpected */, [], []);
-            }
-            if (!parseValue()) {
-                handleError(4 /* ValueExpected */, [], [4 /* CloseBracketToken */, 5 /* CommaToken */]);
-            }
-            needsComma = true;
-        }
-        onArrayEnd();
-        if (_scanner.getToken() !== 4 /* CloseBracketToken */) {
-            handleError(8 /* CloseBracketExpected */, [4 /* CloseBracketToken */], []);
-        }
-        else {
-            scanNext(); // consume close bracket
-        }
-        return true;
-    }
-    function parseValue() {
-        switch (_scanner.getToken()) {
-            case 3 /* OpenBracketToken */:
-                return parseArray();
-            case 1 /* OpenBraceToken */:
-                return parseObject();
-            case 10 /* StringLiteral */:
-                return parseString(true);
-            default:
-                return parseLiteral();
-        }
-    }
-    scanNext();
-    if (_scanner.getToken() === 17 /* EOF */) {
-        if (options.allowEmptyContent) {
-            return true;
-        }
-        handleError(4 /* ValueExpected */, [], []);
-        return false;
-    }
-    if (!parseValue()) {
-        handleError(4 /* ValueExpected */, [], []);
-        return false;
-    }
-    if (_scanner.getToken() !== 17 /* EOF */) {
-        handleError(9 /* EndOfFileExpected */, [], []);
-    }
-    return true;
-}
-/**
- * Takes JSON with JavaScript-style comments and remove
- * them. Optionally replaces every none-newline character
- * of comments with a replaceCharacter
- */
-function stripComments(text, replaceCh) {
-    var _scanner = (0,_scanner__WEBPACK_IMPORTED_MODULE_0__.createScanner)(text), parts = [], kind, offset = 0, pos;
-    do {
-        pos = _scanner.getPosition();
-        kind = _scanner.scan();
-        switch (kind) {
-            case 12 /* LineCommentTrivia */:
-            case 13 /* BlockCommentTrivia */:
-            case 17 /* EOF */:
-                if (offset !== pos) {
-                    parts.push(text.substring(offset, pos));
-                }
-                if (replaceCh !== undefined) {
-                    parts.push(_scanner.getTokenValue().replace(/[^\r\n]/g, replaceCh));
-                }
-                offset = _scanner.getPosition();
-                break;
-        }
-    } while (kind !== 17 /* EOF */);
-    return parts.join('');
-}
-function getNodeType(value) {
-    switch (typeof value) {
-        case 'boolean': return 'boolean';
-        case 'number': return 'number';
-        case 'string': return 'string';
-        case 'object': {
-            if (!value) {
-                return 'null';
-            }
-            else if (Array.isArray(value)) {
-                return 'array';
-            }
-            return 'object';
-        }
-        default: return 'null';
-    }
-}
-
-
-/***/ }),
-/* 50 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.UltiSnippetsProvider = void 0;
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(2));
-const os_1 = __importDefault(__webpack_require__(3));
-const path_1 = __importDefault(__webpack_require__(4));
-const vscode_languageserver_types_1 = __webpack_require__(6);
-const baseProvider_1 = __importDefault(__webpack_require__(42));
-const types_1 = __webpack_require__(39);
-const ultisnipsParser_1 = __importDefault(__webpack_require__(51));
-const util_1 = __webpack_require__(35);
-const pythonCodes = new Map();
-class UltiSnippetsProvider extends baseProvider_1.default {
-    constructor(channel, trace, config, context) {
-        super(config);
-        this.channel = channel;
-        this.trace = trace;
-        this.config = config;
-        this.context = context;
-        this.snippetFiles = [];
-        this.disposables = [];
-        this.directories = [];
-        this.runtimeDirs = [];
-        this.runtimeDirs = coc_nvim_1.workspace.env.runtimepath.split(',');
-        coc_nvim_1.workspace.watchOption('runtimepath', async (_, newValue) => {
-            let parts = newValue.split(',');
-            let subFolders = await this.getSubFolders();
-            let items = [];
-            for (let dir of parts) {
-                if (this.runtimeDirs.indexOf(dir) == -1) {
-                    this.runtimeDirs.push(dir);
-                    let res = await this.getSnippetsFromPlugin(dir, subFolders);
-                    items.push(...res);
-                }
-            }
-            if (items.length) {
-                await Promise.all(items.map(({ filepath, directory, filetype }) => {
-                    return this.loadSnippetsFromFile(filetype, directory, filepath);
-                }));
-                let files = items.map(o => o.filepath);
-                let pythonCode = '';
-                for (let file of files) {
-                    let code = pythonCodes.get(file);
-                    if (code) {
-                        pythonCode += `# ${file}\n` + code + '\n';
-                    }
-                }
-                if (pythonCode) {
-                    pythonCodes.clear();
-                    await this.executePythonCode(pythonCode);
-                }
-            }
-        }, this.disposables);
-    }
-    checkLoaded(filepath) {
-        return this.snippetFiles.findIndex(o => o.filepath == filepath) !== -1;
-    }
-    async init() {
-        let { nvim, env } = coc_nvim_1.workspace;
-        let { runtimepath } = env;
-        let { config } = this;
-        for (let dir of config.directories) {
-            if (dir.startsWith('~') || dir.indexOf('$') !== -1) {
-                let res = await coc_nvim_1.workspace.nvim.call('expand', [dir]);
-                this.directories.push(res);
-            }
-            else {
-                this.directories.push(dir);
-            }
-        }
-        this.channel.appendLine(`[Info ${(new Date()).toISOString()}] Using ultisnips directories: ${this.directories.join(' ')}`);
-        let hasPythonx = await nvim.call('has', ['pythonx']);
-        let pythonCode = await util_1.readFileAsync(this.context.asAbsolutePath('python/ultisnips.py'), 'utf8');
-        if (hasPythonx && config.usePythonx) {
-            this.pyMethod = 'pyx';
-        }
-        else {
-            this.pyMethod = config.pythonVersion == 3 ? 'py3' : 'py';
-        }
-        this.channel.appendLine(`[Info ${(new Date()).toLocaleTimeString()}] Using ultisnips python command: ${this.pyMethod}`);
-        this.parser = new ultisnipsParser_1.default(this.pyMethod, this.channel, this.trace);
-        let arr = await this.getAllSnippetFiles(runtimepath);
-        let files = arr.map(o => o.filepath);
-        await Promise.all(arr.map(({ filepath, directory, filetype }) => {
-            return this.loadSnippetsFromFile(filetype, directory, filepath);
-        }));
-        for (let file of files) {
-            let code = pythonCodes.get(file);
-            if (code) {
-                pythonCode += `\n# ${file}\n` + code + '\n';
-            }
-        }
-        await this.executePythonCode(pythonCode);
-        coc_nvim_1.workspace.onDidSaveTextDocument(async (doc) => {
-            let uri = coc_nvim_1.Uri.parse(doc.uri);
-            if (uri.scheme != 'file' || !doc.uri.endsWith('.snippets'))
-                return;
-            let filepath = uri.fsPath;
-            if (!fs_1.default.existsSync(filepath))
-                return;
-            let snippetFile = this.snippetFiles.find(s => s.filepath == filepath);
-            if (snippetFile) {
-                await this.loadSnippetsFromFile(snippetFile.filetype, snippetFile.directory, filepath);
-            }
-            else {
-                let filetype = path_1.default.basename(filepath, '.snippets');
-                await this.loadSnippetsFromFile(filetype, path_1.default.dirname(filepath), filepath);
-            }
-        }, null, this.disposables);
-    }
-    async loadSnippetsFromFile(filetype, directory, filepath) {
-        let { snippets, pythonCode, extendFiletypes, clearsnippets } = await this.parser.parseUltisnipsFile(filepath);
-        let idx = this.snippetFiles.findIndex(o => o.filepath == filepath);
-        if (idx !== -1)
-            this.snippetFiles.splice(idx, 1);
-        this.snippetFiles.push({
-            extendFiletypes,
-            clearsnippets,
-            directory,
-            filepath,
-            filetype,
-            snippets
-        });
-        if (extendFiletypes) {
-            let filetypes = this.config.extends[filetype] || [];
-            filetypes = filetypes.concat(extendFiletypes);
-            this.config.extends[filetype] = util_1.distinct(filetypes);
-        }
-        this.channel.appendLine(`[Info ${(new Date()).toISOString()}] Loaded ${snippets.length} UltiSnip snippets from: ${filepath}`);
-        pythonCodes.set(filepath, pythonCode);
-    }
-    async resolveSnippetBody(snippet, range, line) {
-        let { nvim } = coc_nvim_1.workspace;
-        let { body, context, originRegex } = snippet;
-        let buf = await nvim.buffer;
-        let filepath = await buf.name;
-        let indentCount = await nvim.call('indent', '.');
-        let ind = ' '.repeat(indentCount);
-        if (body.indexOf('`!p') !== -1) {
-            let values = new Map();
-            let re = /\$\{(\d+)(?::([^}]+))?\}/g;
-            let r;
-            // tslint:disable-next-line: no-conditional-assignment
-            while (r = re.exec(body)) {
-                let idx = parseInt(r[1], 10);
-                let val = r[2] || '';
-                let exists = values.get(idx);
-                if (exists == null || (val && exists == "''")) {
-                    if (/^`!\w/.test(val) && val.endsWith('`')) {
-                        let code = val.slice(1).slice(0, -1);
-                        // not execute python code since we don't have snip yet.
-                        if (code.startsWith('!p')) {
-                            val = '';
-                        }
-                        else {
-                            val = await this.parser.execute(code, this.pyMethod, ind);
-                        }
-                    }
-                    val = val.replace(/'/g, "\\'").replace(/\n/g, '\\n');
-                    values.set(idx, "'" + val + "'");
-                }
-            }
-            re = /\$(\d+)/g;
-            // tslint:disable-next-line: no-conditional-assignment
-            while (r = re.exec(body)) {
-                let idx = parseInt(r[1], 10);
-                if (!values.has(idx)) {
-                    values.set(idx, "''");
-                }
-            }
-            let len = values.size == 0 ? 0 : Math.max.apply(null, Array.from(values.keys()));
-            let vals = (new Array(len)).fill('""');
-            for (let [idx, val] of values.entries()) {
-                vals[idx] = val;
-            }
-            let pyCodes = [];
-            pyCodes.push('import re, os, vim, string, random');
-            pyCodes.push(`t = ('', ${vals.join(',')})`);
-            pyCodes.push(`fn = '${path_1.default.basename(filepath)}'`);
-            pyCodes.push(`path = '${filepath}'`);
-            if (context) {
-                pyCodes.push(`snip = ContextSnippet()`);
-                pyCodes.push(`context = ${context}`);
-            }
-            else {
-                pyCodes.push(`context = {}`);
-            }
-            let start = `(${range.start.line},${Buffer.byteLength(line.slice(0, range.start.character))})`;
-            let end = `(${range.end.line},${Buffer.byteLength(line.slice(0, range.end.character))})`;
-            pyCodes.push(`snip = SnippetUtil('${ind}', ${start}, ${end}, context)`);
-            if (originRegex) {
-                pyCodes.push(`pattern = re.compile(r"${originRegex.replace(/"/g, '\\"')}")`);
-                pyCodes.push(`match = pattern.search("${line.replace(/"/g, '\\"')}")`);
-            }
-            try {
-                await nvim.command(`${this.pyMethod} ${pyCodes.join('\n')}`);
-            }
-            catch (e) {
-                this.channel.appendLine(`[Error ${(new Date()).toLocaleTimeString()}]: ${e.message}`);
-                this.channel.appendLine(`code: ${pyCodes.join('\n')}`);
-            }
-        }
-        return this.parser.resolveUltisnipsBody(body);
-    }
-    async checkContext(context) {
-        let { nvim } = coc_nvim_1.workspace;
-        let pyCodes = [];
-        pyCodes.push('import re, os, vim, string, random');
-        pyCodes.push(`snip = ContextSnippet()`);
-        pyCodes.push(`context = ${context}`);
-        await nvim.command(`${this.pyMethod} ${pyCodes.join('\n')}`);
-        let res = await nvim.call(`${this.pyMethod}eval`, 'True if context else False');
-        return res;
-    }
-    async getTriggerSnippets(document, position, autoTrigger) {
-        let snippets = await this.getSnippets(document.filetype);
-        let line = document.getline(position.line);
-        line = line.slice(0, position.character);
-        if (!line || line[line.length - 1] == ' ')
-            return [];
-        snippets = snippets.filter(s => {
-            let { prefix, regex } = s;
-            if (autoTrigger && !s.autoTrigger)
-                return false;
-            if (regex) {
-                let ms = line.match(regex);
-                if (!ms)
-                    return false;
-                prefix = ms[0];
-            }
-            if (!line.endsWith(prefix))
-                return false;
-            if (s.triggerKind == types_1.TriggerKind.InWord)
-                return true;
-            let pre = line.slice(0, line.length - prefix.length);
-            if (s.triggerKind == types_1.TriggerKind.LineBegin)
-                return pre.trim() == '';
-            if (s.triggerKind == types_1.TriggerKind.SpaceBefore)
-                return pre.length == 0 || /\s/.test(pre[pre.length - 1]);
-            if (s.triggerKind == types_1.TriggerKind.WordBoundary)
-                return pre.length == 0 || !document.isWord(pre[pre.length - 1]);
-            return false;
-        });
-        snippets.sort((a, b) => {
-            if (a.context && !b.context)
-                return -1;
-            if (b.context && !a.context)
-                return 1;
-            return 0;
-        });
-        let edits = [];
-        let contextPrefixes = [];
-        for (let s of snippets) {
-            let character;
-            if (s.context) {
-                let valid = await this.checkContext(s.context);
-                if (!valid)
-                    continue;
-                contextPrefixes.push(s.context);
-            }
-            else if (contextPrefixes.indexOf(s.prefix) !== -1) {
-                continue;
-            }
-            if (s.regex == null) {
-                character = position.character - s.prefix.length;
-            }
-            else {
-                let len = line.match(s.regex)[0].length;
-                character = position.character - len;
-            }
-            let range = vscode_languageserver_types_1.Range.create(position.line, character, position.line, position.character);
-            let newText = await this.resolveSnippetBody(s, range, line);
-            edits.push({
-                prefix: s.prefix,
-                description: s.description,
-                location: s.filepath,
-                priority: s.priority,
-                range,
-                newText,
-            });
-        }
-        return edits;
-    }
-    async getSnippetFiles(filetype) {
-        let filetypes = this.getFiletypes(filetype);
-        let res = [];
-        for (let s of this.snippetFiles) {
-            if (filetypes.indexOf(s.filetype) !== -1) {
-                res.push(s.filepath);
-            }
-        }
-        return res;
-    }
-    async getSnippets(filetype) {
-        let filetypes = this.getFiletypes(filetype);
-        filetypes.push('all');
-        let snippetFiles = this.snippetFiles.filter(o => filetypes.indexOf(o.filetype) !== -1);
-        let min = null;
-        let result = [];
-        snippetFiles.sort((a, b) => {
-            if (a.filetype == b.filetype)
-                return 1;
-            if (a.filetype == filetype)
-                return -1;
-            return 1;
-        });
-        for (let file of snippetFiles) {
-            let { snippets, clearsnippets } = file;
-            if (typeof clearsnippets == 'number') {
-                min = min ? Math.max(min, clearsnippets) : clearsnippets;
-            }
-            for (let snip of snippets) {
-                if (snip.regex || snip.context) {
-                    result.push(snip);
-                }
-                else {
-                    let idx = result.findIndex(o => o.prefix == snip.prefix && o.triggerKind == snip.triggerKind);
-                    if (idx == -1) {
-                        result.push(snip);
-                    }
-                    else {
-                        let item = result[idx];
-                        if (snip.priority > item.priority) {
-                            result[idx] = item;
-                        }
-                    }
-                }
-            }
-        }
-        if (min != null)
-            result = result.filter(o => o.priority >= min);
-        result.sort((a, b) => {
-            if (a.context && !b.context)
-                return -1;
-            if (b.context && !a.context)
-                return 1;
-            return 0;
-        });
-        return result;
-    }
-    async getAllSnippetFiles(runtimepath) {
-        let { directories } = this;
-        let res = [];
-        for (let directory of directories) {
-            if (path_1.default.isAbsolute(directory)) {
-                let items = await this.getSnippetFileItems(directory);
-                res.push(...items);
-            }
-        }
-        let subFolders = await this.getSubFolders();
-        let rtps = runtimepath.split(',');
-        this.runtimeDirs = rtps;
-        for (let rtp of rtps) {
-            let items = await this.getSnippetsFromPlugin(rtp, subFolders);
-            res.push(...items);
-        }
-        return res;
-    }
-    async getSubFolders() {
-        let { directories } = this;
-        directories = directories.filter(s => !path_1.default.isAbsolute(s));
-        // use UltiSnipsSnippetDirectories
-        let dirs = await coc_nvim_1.workspace.nvim.eval('get(g:, "UltiSnipsSnippetDirectories", [])');
-        for (let dir of dirs) {
-            if (directories.indexOf(dir) == -1) {
-                directories.push(dir);
-            }
-        }
-        return directories;
-    }
-    async getSnippetsFromPlugin(directory, subFolders) {
-        let res = [];
-        for (let folder of subFolders) {
-            let items = await this.getSnippetFileItems(path_1.default.join(directory, folder));
-            res.push(...items);
-        }
-        return res;
-    }
-    async getSnippetFileItems(directory) {
-        let res = [];
-        let stat = await util_1.statAsync(directory);
-        if (stat && stat.isDirectory()) {
-            let files = await util_1.readdirAsync(directory);
-            if (files.length) {
-                for (let f of files) {
-                    let file = path_1.default.join(directory, f);
-                    if (file.endsWith('.snippets')) {
-                        let basename = path_1.default.basename(f, '.snippets');
-                        let filetype = basename.split('_', 2)[0];
-                        res.push({ filepath: file, directory, filetype });
-                    }
-                    else {
-                        let stat = await util_1.statAsync(file);
-                        if (stat && stat.isDirectory()) {
-                            let files = await util_1.readdirAsync(file);
-                            for (let filename of files) {
-                                if (filename.endsWith('.snippets')) {
-                                    res.push({ filepath: path_1.default.join(file, filename), directory, filetype: f });
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return res;
-    }
-    async executePythonCode(pythonCode) {
-        try {
-            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);
-            let tmpfile = path_1.default.join(os_1.default.tmpdir(), `coc.nvim-${process.pid}`, `coc-ultisnips-${util_1.uid()}.py`);
-            fs_1.default.writeFileSync(tmpfile, '# -*- coding: utf-8 -*-\n' + pythonCode, 'utf8');
-            await coc_nvim_1.workspace.nvim.command(`exe '${this.pyMethod}file '.fnameescape('${tmpfile}')`);
-            pythonCodes.clear();
-        }
-        catch (e) {
-            this.channel.appendLine(`Error on execute python script:`);
-            this.channel.append(e.message);
-            coc_nvim_1.workspace.showMessage(`Error on execute python script: ${e.message}`, 'error');
-        }
-    }
-    dispose() {
-        coc_nvim_1.disposeAll(this.disposables);
-    }
-}
-exports.UltiSnippetsProvider = UltiSnippetsProvider;
-
-
-/***/ }),
-/* 51 */
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-/******************************************************************
-MIT License http://www.opensource.org/licenses/mit-license.php
-Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
-*******************************************************************/
-const child_process_1 = __webpack_require__(52);
-const coc_nvim_1 = __webpack_require__(1);
-const fs_1 = __importDefault(__webpack_require__(2));
-const pify_1 = __importDefault(__webpack_require__(36));
-const readline_1 = __importDefault(__webpack_require__(41));
-const parser_1 = __importDefault(__webpack_require__(43));
-const types_1 = __webpack_require__(39);
-const util_1 = __webpack_require__(35);
-class UltiSnipsParser {
-    constructor(pyMethod, channel, trace = 'error') {
-        this.pyMethod = pyMethod;
-        this.channel = channel;
-        this.trace = trace;
-    }
-    parseUltisnipsFile(filepath) {
-        const rl = readline_1.default.createInterface({
-            input: fs_1.default.createReadStream(filepath, 'utf8'),
-            crlfDelay: Infinity
-        });
-        let pycodes = [];
-        let snippets = [];
-        let block;
-        let preLines = [];
-        let first;
-        let priority = 0;
-        let lnum = 0;
-        let clearsnippets = null;
-        let parsedContext = null;
-        let extendFiletypes = [];
-        rl.on('line', line => {
-            lnum += 1;
-            if (!block && (line.startsWith('#') || line.length == 0))
-                return;
-            const [head, tail] = util_1.headTail(line);
-            if (!block) {
-                switch (head) {
-                    case 'priority':
-                        let n = parseInt(tail.trim(), 10);
-                        if (!isNaN(n))
-                            priority = n;
-                        break;
-                    case 'extends':
-                        let fts = tail.trim().split(/,\s+/);
-                        for (let ft of fts) {
-                            if (extendFiletypes.indexOf(ft) == -1) {
-                                extendFiletypes.push(ft);
-                            }
-                        }
-                        break;
-                    case 'clearsnippets':
-                        clearsnippets = priority;
-                        break;
-                    case 'context':
-                        parsedContext = tail.replace(/^"(.+)"$/, '$1');
-                        break;
-                    case 'snippet':
-                    case 'global':
-                        block = head;
-                        first = tail;
-                        break;
-                }
-                return;
-            }
-            if (head == 'endglobal' && block == 'global') {
-                block = null;
-                pycodes.push(...preLines);
-                preLines = [];
-                return;
-            }
-            if (head == 'endsnippet' && block == 'snippet') {
-                block = null;
-                try {
-                    let originRegex;
-                    let body = preLines.join('\n');
-                    // convert placeholder regex to javascript regex
-                    body = body.replace(/((?:[^\\]?\$\{\w+?)\/)([^\n]*?[^\\])(?=\/)/g, (_match, p1, p2) => {
-                        return p1 + util_1.convertRegex(p2);
-                    });
-                    let ms = first.match(/^(.+?)(?:\s+(?:"(.*?)")?(?:\s+"(.*?)")?(?:\s+(\w+))?)?\s*$/);
-                    let prefix = ms[1];
-                    let description = ms[2] || '';
-                    let context = ms[3];
-                    let option = ms[4] || '';
-                    if (prefix.length > 2 && prefix[1] != prefix[0] && prefix[0] == prefix[prefix.length - 1] && !/\w/.test(prefix[0])) {
-                        prefix = prefix.slice(1, prefix.length - 1);
-                    }
-                    let isExpression = option.indexOf('r') !== -1;
-                    let regex = null;
-                    if (isExpression) {
-                        originRegex = prefix;
-                        prefix = util_1.convertRegex(prefix);
-                        prefix = prefix.endsWith('$') ? prefix : prefix + '$';
-                        try {
-                            regex = new RegExp(prefix);
-                            // get the real text
-                            prefix = util_1.getRegexText(prefix);
-                        }
-                        catch (e) {
-                            this.error(`Convert regex error for: ${prefix}`);
-                        }
-                    }
-                    if (parsedContext) {
-                        context = parsedContext;
-                    }
-                    else if (option.indexOf('e') == -1) {
-                        context = null;
-                    }
-                    let snippet = {
-                        filepath,
-                        context,
-                        originRegex,
-                        autoTrigger: option.indexOf('A') !== -1,
-                        lnum: lnum - preLines.length - 2,
-                        triggerKind: getTriggerKind(option),
-                        prefix,
-                        description,
-                        regex,
-                        body,
-                        priority
-                    };
-                    snippets.push(snippet);
-                }
-                catch (e) {
-                    this.error(`Create snippet error on: ${filepath}:${lnum - preLines.length - 1} ${e.message}`);
-                }
-                finally {
-                    parsedContext = null;
-                    preLines = [];
-                }
-            }
-            if (block == 'snippet' || block == 'global') {
-                preLines.push(line);
-                return;
-            }
-        });
-        return new Promise(resolve => {
-            rl.on('close', async () => {
-                resolve({ snippets, clearsnippets, pythonCode: pycodes.join('\n'), extendFiletypes });
-            });
-        });
-    }
-    async resolveUltisnipsBody(body) {
-        let { pyMethod } = this;
-        let parser = new parser_1.default(body);
-        let resolved = '';
-        while (!parser.eof()) {
-            let p = parser.prev();
-            if (parser.curr == '`' && (!p || p != '\\')) {
-                let idx = parser.nextIndex('`', true, false);
-                if (idx == -1) {
-                    resolved = resolved + parser.eatTo(parser.len);
-                    break;
-                }
-                let code = parser.eatTo(idx + 1);
-                code = code.slice(1, -1);
-                let indent = resolved.split(/\n/).slice(-1)[0].match(/^\s*/)[0];
-                resolved = resolved + await this.execute(code, pyMethod, indent);
-                continue;
-            }
-            else if (parser.curr == '$') {
-                let text = parser.next(7);
-                if (text.startsWith('VISUAL') || text.startsWith('{VISUAL')) {
-                    parser.eat(8);
-                    resolved += '$' + text.replace('VISUAL', 'TM_SELECTED_TEXT');
-                }
-                else if (!/^\d/.test(text) && !text.startsWith('{') && p != '\\') {
-                    // escape $ if it's not escaped and not a placeholder, ultisnips sucks
-                    resolved += '\\' + parser.eat(1);
-                }
-                else {
-                    // skip current
-                    resolved += parser.eat(1);
-                }
-            }
-            let prev = parser.prev() || '';
-            parser.iterate(ch => {
-                if (prev !== '\\' && (ch == '`' || ch == '$')) {
-                    return false;
-                }
-                else {
-                    resolved = resolved + ch;
-                }
-                prev = ch;
-                return true;
-            });
-        }
-        resolved = decode(resolved);
-        this.debug(`resolved: ${resolved}`);
-        return resolved;
-    }
-    async execute(code, pyMethod, indent) {
-        let { nvim } = coc_nvim_1.workspace;
-        let res = '';
-        if (code.startsWith('!')) {
-            code = code.trim().slice(1);
-            if (code.startsWith('p')) {
-                code = code.slice(1).trim();
-                let lines = code.split('\n');
-                lines = lines.map(line => line.replace(/\t/g, '    '));
-                lines = lines.map(line => `    ${line}`);
-                lines.unshift('try:');
-                lines.unshift('import traceback');
-                lines.push('except Exception as e:');
-                lines.push('    snip.rv = traceback.format_exc()');
-                await nvim.command(`${pyMethod} ${lines.join('\n')}`);
-                res = await nvim.call(`${pyMethod}eval`, 'snip.rv');
-            }
-            else if (code.startsWith('v')) {
-                code = code.replace(/^v\s*/, '');
-                try {
-                    res = await nvim.eval(code);
-                }
-                catch (e) {
-                    res = `Error: ${e.message}`;
-                    this.error(e.stack);
-                }
-            }
-        }
-        else {
-            try {
-                res = await pify_1.default(child_process_1.exec)(code);
-            }
-            catch (e) {
-                res = `Error: ${e.message}`;
-                this.error(`Error on eval ${code}: ` + e.stack);
-            }
-        }
-        res = res.toString();
-        res = res.replace(/\r?\n$/, '');
-        let parts = res.split(/\r?\n/);
-        if (parts.length > 1) {
-            res = parts.map((s, idx) => {
-                if (idx == 0 || s.length == 0)
-                    return s;
-                return `${indent}${s}`;
-            }).join('\n');
-        }
-        return res;
-    }
-    error(str) {
-        if (!this.channel)
-            return;
-        this.channel.appendLine(`[Error ${(new Date()).toLocaleTimeString()}] ${str}`);
-    }
-    debug(str) {
-        if (!this.channel || this.trace == 'error')
-            return;
-        this.channel.appendLine(`[Debug ${(new Date()).toLocaleTimeString()}] ${str}`);
-    }
-}
-exports.default = UltiSnipsParser;
-function decode(str) {
-    return str.replace(/\\`/g, '`').replace(/\\{/g, '{');
-}
-function getTriggerKind(option) {
-    if (option.indexOf('w') !== -1) {
-        return types_1.TriggerKind.WordBoundary;
-    }
-    if (option.indexOf('b') !== -1) {
-        return types_1.TriggerKind.LineBegin;
-    }
-    if (option.indexOf('i') !== -1) {
-        return types_1.TriggerKind.InWord;
-    }
-    return types_1.TriggerKind.SpaceBefore;
-}
-
-
-/***/ }),
-/* 52 */
-/***/ ((module) => {
-
-module.exports = require("child_process");;
-
-/***/ })
-/******/       ]);
-/************************************************************************/
-/******/       // The module cache
-/******/       var __webpack_module_cache__ = {};
-/******/       
-/******/       // The require function
-/******/       function __webpack_require__(moduleId) {
-/******/               // Check if module is in cache
-/******/               if(__webpack_module_cache__[moduleId]) {
-/******/                       return __webpack_module_cache__[moduleId].exports;
-/******/               }
-/******/               // Create a new module (and put it into the cache)
-/******/               var module = __webpack_module_cache__[moduleId] = {
-/******/                       // no module.id needed
-/******/                       // no module.loaded needed
-/******/                       exports: {}
-/******/               };
-/******/       
-/******/               // Execute the module function
-/******/               __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/       
-/******/               // Return the exports of the module
-/******/               return module.exports;
-/******/       }
-/******/       
-/************************************************************************/
-/******/       /* webpack/runtime/define property getters */
-/******/       (() => {
-/******/               // define getter functions for harmony exports
-/******/               __webpack_require__.d = (exports, definition) => {
-/******/                       for(var key in definition) {
-/******/                               if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
-/******/                                       Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
-/******/                               }
-/******/                       }
-/******/               };
-/******/       })();
-/******/       
-/******/       /* webpack/runtime/hasOwnProperty shorthand */
-/******/       (() => {
-/******/               __webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)
-/******/       })();
-/******/       
-/******/       /* webpack/runtime/make namespace object */
-/******/       (() => {
-/******/               // define __esModule on exports
-/******/               __webpack_require__.r = (exports) => {
-/******/                       if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/                               Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/                       }
-/******/                       Object.defineProperty(exports, '__esModule', { value: true });
-/******/               };
-/******/       })();
-/******/       
-/************************************************************************/
-/******/       // module exports must be returned from runtime so entry inlining is disabled
-/******/       // startup
-/******/       // Load entry module and return exports
-/******/       return __webpack_require__(0);
-/******/ })()
-
-));
\ No newline at end of file