Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-json / lib / index.js
diff --git a/.config/coc/extensions/node_modules/coc-json/lib/index.js b/.config/coc/extensions/node_modules/coc-json/lib/index.js
new file mode 100644 (file)
index 0000000..480b6b5
--- /dev/null
@@ -0,0 +1,5403 @@
+(function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/               }
+/******/       };
+/******/
+/******/       // define __esModule on exports
+/******/       __webpack_require__.r = function(exports) {
+/******/               if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/                       Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/               }
+/******/               Object.defineProperty(exports, '__esModule', { value: true });
+/******/       };
+/******/
+/******/       // create a fake namespace object
+/******/       // mode & 1: value is a module id, require it
+/******/       // mode & 2: merge all properties of value into the ns
+/******/       // mode & 4: return value when already ns object
+/******/       // mode & 8|1: behave like require
+/******/       __webpack_require__.t = function(value, mode) {
+/******/               if(mode & 1) value = __webpack_require__(value);
+/******/               if(mode & 8) return value;
+/******/               if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/               var ns = Object.create(null);
+/******/               __webpack_require__.r(ns);
+/******/               Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/               if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/               return ns;
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const path_1 = __importDefault(__webpack_require__(1));
+const fs_1 = __importDefault(__webpack_require__(2));
+const vscode_languageserver_protocol_1 = __webpack_require__(3);
+const catalog_json_1 = __importDefault(__webpack_require__(30));
+const hash_1 = __webpack_require__(31);
+const coc_nvim_1 = __webpack_require__(32);
+var ForceValidateRequest;
+(function (ForceValidateRequest) {
+    ForceValidateRequest.type = new vscode_languageserver_protocol_1.RequestType('json/validate');
+})(ForceValidateRequest || (ForceValidateRequest = {}));
+function activate(context) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let { subscriptions, logger } = context;
+        const config = coc_nvim_1.workspace.getConfiguration().get('json', {});
+        if (!config.enable)
+            return;
+        const file = context.asAbsolutePath('lib/server.js');
+        const selector = ['json', 'jsonc'];
+        let schemaContent = yield readFile(path_1.default.join(coc_nvim_1.workspace.pluginRoot, 'data/schema.json'), 'utf8');
+        let settingsSchema = JSON.parse(schemaContent);
+        let fileSchemaErrors = new Map();
+        coc_nvim_1.events.on('BufEnter', bufnr => {
+            let doc = coc_nvim_1.workspace.getDocument(bufnr);
+            if (!doc)
+                return;
+            let msg = fileSchemaErrors.get(doc.uri);
+            if (msg)
+                coc_nvim_1.workspace.showMessage(`Schema error: ${msg}`, 'warning');
+        }, null, subscriptions);
+        let serverOptions = {
+            module: file,
+            transport: coc_nvim_1.TransportKind.ipc,
+            options: {
+                cwd: coc_nvim_1.workspace.root,
+                execArgv: config.execArgv
+            }
+        };
+        let clientOptions = {
+            documentSelector: selector,
+            synchronize: {
+                configurationSection: ['json', 'http'],
+                fileEvents: coc_nvim_1.workspace.createFileSystemWatcher('**/*.json')
+            },
+            outputChannelName: 'json',
+            diagnosticCollectionName: 'json',
+            middleware: {
+                workspace: {
+                    didChangeConfiguration: () => client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: getSettings() })
+                },
+                handleDiagnostics: (uri, diagnostics, next) => {
+                    const schemaErrorIndex = diagnostics.findIndex(candidate => candidate.code === /* SchemaResolveError */ 0x300);
+                    if (uri.endsWith('coc-settings.json')) {
+                        diagnostics = diagnostics.filter(o => o.code != 521);
+                    }
+                    if (schemaErrorIndex === -1) {
+                        fileSchemaErrors.delete(uri.toString());
+                        return next(uri, diagnostics);
+                    }
+                    const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
+                    fileSchemaErrors.set(uri.toString(), schemaResolveDiagnostic.message);
+                    let doc = coc_nvim_1.workspace.getDocument(uri);
+                    if (doc && doc.uri == uri) {
+                        coc_nvim_1.workspace.showMessage(`Schema error: ${schemaResolveDiagnostic.message}`, 'warning');
+                    }
+                    next(uri, diagnostics);
+                },
+                resolveCompletionItem: (item, token, next) => {
+                    return Promise.resolve(next(item, token)).then((item) => {
+                        if (item.data.detail) {
+                            item.detail = item.data.detail;
+                        }
+                        return item;
+                    });
+                },
+                // fix completeItem
+                provideCompletionItem: (document, position, context, token, next) => {
+                    return Promise.resolve(next(document, position, context, token)).then((res) => {
+                        let doc = coc_nvim_1.workspace.getDocument(document.uri);
+                        if (!doc)
+                            return [];
+                        let items = res.hasOwnProperty('isIncomplete') ? res.items : res;
+                        let line = doc.getline(position.line);
+                        for (let item of items) {
+                            let { textEdit, insertText, label, filterText } = item; // tslint:disable-line
+                            item.insertText = null; // tslint:disable-line
+                            if (textEdit && textEdit.newText) {
+                                let newText = insertText || textEdit.newText;
+                                textEdit.newText = newText;
+                                let { start, end } = textEdit.range;
+                                if (line[start.character] && line[end.character - 1] && /^".*"$/.test(label)) {
+                                    item.label = item.label.slice(1, -1);
+                                }
+                            }
+                            if (filterText && /^".*"$/.test(filterText)) {
+                                item.filterText = filterText.slice(1, -1);
+                            }
+                        }
+                        let result = {
+                            isIncomplete: false,
+                            items
+                        };
+                        if (items.length && items.every(o => o.kind == vscode_languageserver_protocol_1.CompletionItemKind.Property)) {
+                            result.startcol = doc.fixStartcol(position, ['.']);
+                        }
+                        return result;
+                    });
+                }
+            }
+        };
+        let client = new coc_nvim_1.LanguageClient('json', 'Json language server', serverOptions, clientOptions);
+        subscriptions.push(coc_nvim_1.services.registLanguageClient(client));
+        client.onReady().then(() => {
+            for (let doc of coc_nvim_1.workspace.documents) {
+                onDocumentCreate(doc.textDocument).catch(_e => {
+                    // noop
+                });
+            }
+            let associations = {};
+            for (let item of catalog_json_1.default.schemas) {
+                let { fileMatch, url } = item;
+                if (Array.isArray(fileMatch)) {
+                    for (let key of fileMatch) {
+                        associations[key] = [url];
+                    }
+                }
+                else if (typeof fileMatch === 'string') {
+                    associations[fileMatch] = [url];
+                }
+            }
+            coc_nvim_1.extensions.all.forEach(extension => {
+                let { packageJSON } = extension;
+                let { contributes } = packageJSON;
+                if (!contributes)
+                    return;
+                let { jsonValidation } = contributes;
+                if (jsonValidation && jsonValidation.length) {
+                    for (let item of jsonValidation) {
+                        let { url, fileMatch } = item;
+                        // fileMatch
+                        if (url && !/^http(s)?:/.test(url)) {
+                            let file = path_1.default.join(extension.extensionPath, url);
+                            if (fs_1.default.existsSync(file))
+                                url = coc_nvim_1.Uri.file(file).toString();
+                        }
+                        if (url) {
+                            let curr = associations[fileMatch];
+                            if (!curr) {
+                                associations[fileMatch] = [url];
+                            }
+                            else if (curr && curr.indexOf(url) == -1) {
+                                curr.push(url);
+                            }
+                        }
+                    }
+                }
+            });
+            associations['coc-settings.json'] = ['vscode://settings'];
+            client.sendNotification('json/schemaAssociations', associations);
+            client.onRequest('vscode/content', (uri) => __awaiter(this, void 0, void 0, function* () {
+                if (uri == 'vscode://settings') {
+                    let schema = Object.assign({}, settingsSchema);
+                    schema.properties = schema.properties || {};
+                    if (coc_nvim_1.extensions.schemes)
+                        Object.assign(schema.properties, coc_nvim_1.extensions.schemes);
+                    coc_nvim_1.extensions.all.forEach(extension => {
+                        let { packageJSON } = extension;
+                        let { contributes } = packageJSON;
+                        if (!contributes)
+                            return;
+                        let { configuration } = contributes;
+                        if (configuration) {
+                            let { properties, definitions } = configuration;
+                            if (properties)
+                                Object.assign(schema.properties, properties);
+                            if (definitions)
+                                Object.assign(schema.definitions, definitions);
+                        }
+                    });
+                    return JSON.stringify(schema);
+                }
+                logger.error(`Unknown schema for ${uri}`);
+                return '{}';
+            }));
+        }, _e => {
+            // noop
+        });
+        function onDocumentCreate(document) {
+            return __awaiter(this, void 0, void 0, function* () {
+                if (!coc_nvim_1.workspace.match(selector, document))
+                    return;
+                if (client.serviceState !== coc_nvim_1.ServiceStat.Running)
+                    return;
+                let file = coc_nvim_1.Uri.parse(document.uri).fsPath;
+                let associations = {};
+                let content = document.getText();
+                if (content.indexOf('"$schema"') !== -1)
+                    return;
+                let miniProgrameRoot = yield coc_nvim_1.workspace.resolveRootFolder(coc_nvim_1.Uri.parse(document.uri), ['project.config.json']);
+                if (miniProgrameRoot) {
+                    if (path_1.default.dirname(file) == miniProgrameRoot) {
+                        return;
+                    }
+                    let arr = ['page', 'component'].map(str => {
+                        return coc_nvim_1.Uri.file(context.asAbsolutePath(`data/${str}.json`)).toString();
+                    });
+                    associations['/' + file] = arr;
+                    associations['app.json'] = [coc_nvim_1.Uri.file(context.asAbsolutePath('data/app.json')).toString()];
+                }
+                if (Object.keys(associations).length > 0) {
+                    client.sendNotification('json/schemaAssociations', associations);
+                }
+            });
+        }
+        coc_nvim_1.workspace.onDidOpenTextDocument(onDocumentCreate, null, subscriptions);
+        coc_nvim_1.workspace.onDidCloseTextDocument(doc => {
+            fileSchemaErrors.delete(doc.uri);
+        }, null, subscriptions);
+        let statusItem = coc_nvim_1.workspace.createStatusBarItem(0, { progress: true });
+        subscriptions.push(statusItem);
+        subscriptions.push(coc_nvim_1.commands.registerCommand('json.retryResolveSchema', () => __awaiter(this, void 0, void 0, function* () {
+            let doc = yield coc_nvim_1.workspace.document;
+            if (!doc || ['json', 'jsonc'].indexOf(doc.filetype) == -1)
+                return;
+            statusItem.isProgress = true;
+            statusItem.text = 'loading schema';
+            statusItem.show();
+            client.sendRequest(ForceValidateRequest.type, doc.uri).then(diagnostics => {
+                statusItem.text = '⚠️';
+                statusItem.isProgress = false;
+                const schemaErrorIndex = diagnostics.findIndex(candidate => candidate.code === /* SchemaResolveError */ 0x300);
+                if (schemaErrorIndex !== -1) {
+                    // Show schema resolution errors in status bar only; ref: #51032
+                    const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
+                    fileSchemaErrors.set(doc.uri, schemaResolveDiagnostic.message);
+                    statusItem.show();
+                }
+                else {
+                    statusItem.hide();
+                }
+            }, () => {
+                statusItem.show();
+                statusItem.isProgress = false;
+                statusItem.text = '⚠️';
+            });
+        })));
+    });
+}
+exports.activate = activate;
+function getSettings() {
+    let httpSettings = coc_nvim_1.workspace.getConfiguration('http');
+    let settings = {
+        http: {
+            proxy: httpSettings.get('proxy'),
+            proxyStrictSSL: httpSettings.get('proxyStrictSSL')
+        },
+        json: {
+            format: coc_nvim_1.workspace.getConfiguration('json').get('format'),
+            schemas: []
+        }
+    };
+    let schemaSettingsById = Object.create(null);
+    let collectSchemaSettings = (schemaSettings, rootPath, fileMatchPrefix) => {
+        for (let setting of schemaSettings) {
+            let url = getSchemaId(setting, rootPath);
+            if (!url) {
+                continue;
+            }
+            let schemaSetting = schemaSettingsById[url];
+            if (!schemaSetting) {
+                schemaSetting = schemaSettingsById[url] = { url, fileMatch: [] };
+                settings.json.schemas.push(schemaSetting);
+            }
+            let fileMatches = setting.fileMatch;
+            let resultingFileMatches = schemaSetting.fileMatch;
+            if (Array.isArray(fileMatches)) {
+                if (fileMatchPrefix) {
+                    for (let fileMatch of fileMatches) {
+                        if (fileMatch[0] === '/') {
+                            resultingFileMatches.push(fileMatchPrefix + fileMatch);
+                            resultingFileMatches.push(fileMatchPrefix + '/*' + fileMatch);
+                        }
+                        else {
+                            resultingFileMatches.push(fileMatchPrefix + '/' + fileMatch);
+                            resultingFileMatches.push(fileMatchPrefix + '/*/' + fileMatch);
+                        }
+                    }
+                }
+                else {
+                    resultingFileMatches.push(...fileMatches);
+                }
+            }
+            if (setting.schema) {
+                schemaSetting.schema = setting.schema;
+            }
+        }
+    };
+    // merge global and folder settings. Qualify all file matches with the folder path.
+    let globalSettings = coc_nvim_1.workspace.getConfiguration('json', null).get('schemas');
+    if (Array.isArray(globalSettings)) {
+        collectSchemaSettings(globalSettings, coc_nvim_1.workspace.root);
+    }
+    return settings;
+}
+function getSchemaId(schema, rootPath) {
+    let url = schema.url;
+    if (!url) {
+        if (schema.schema) {
+            url = schema.schema.id || `vscode://schemas/custom/${encodeURIComponent(hash_1.hash(schema.schema).toString(16))}`;
+        }
+    }
+    else if (rootPath && (url[0] === '.' || url[0] === '/')) {
+        url = coc_nvim_1.Uri.file(path_1.default.normalize(path_1.default.join(rootPath, url))).toString();
+    }
+    return url;
+}
+function readFile(fullpath, encoding) {
+    return new Promise((resolve, reject) => {
+        fs_1.default.readFile(fullpath, encoding, (err, content) => {
+            if (err)
+                reject(err);
+            resolve(content);
+        });
+    });
+}
+
+
+/***/ }),
+/* 1 */
+/***/ (function(module, exports) {
+
+module.exports = require("path");
+
+/***/ }),
+/* 2 */
+/***/ (function(module, exports) {
+
+module.exports = require("fs");
+
+/***/ }),
+/* 3 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+function __export(m) {\r
+    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r
+}\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+exports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;\r
+exports.ResponseError = vscode_jsonrpc_1.ResponseError;\r
+exports.CancellationToken = vscode_jsonrpc_1.CancellationToken;\r
+exports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;\r
+exports.Disposable = vscode_jsonrpc_1.Disposable;\r
+exports.Event = vscode_jsonrpc_1.Event;\r
+exports.Emitter = vscode_jsonrpc_1.Emitter;\r
+exports.Trace = vscode_jsonrpc_1.Trace;\r
+exports.TraceFormat = vscode_jsonrpc_1.TraceFormat;\r
+exports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;\r
+exports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;\r
+exports.RequestType = vscode_jsonrpc_1.RequestType;\r
+exports.RequestType0 = vscode_jsonrpc_1.RequestType0;\r
+exports.NotificationType = vscode_jsonrpc_1.NotificationType;\r
+exports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;\r
+exports.MessageReader = vscode_jsonrpc_1.MessageReader;\r
+exports.MessageWriter = vscode_jsonrpc_1.MessageWriter;\r
+exports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;\r
+exports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;\r
+exports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;\r
+exports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;\r
+exports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;\r
+exports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;\r
+exports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;\r
+exports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;\r
+exports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;\r
+exports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;\r
+__export(__webpack_require__(17));\r
+__export(__webpack_require__(18));\r
+const callHierarchy = __webpack_require__(27);\r
+const progress = __webpack_require__(28);\r
+const sr = __webpack_require__(29);\r
+var Proposed;\r
+(function (Proposed) {\r
+    let SelectionRangeRequest;\r
+    (function (SelectionRangeRequest) {\r
+        SelectionRangeRequest.type = sr.SelectionRangeRequest.type;\r
+    })(SelectionRangeRequest = Proposed.SelectionRangeRequest || (Proposed.SelectionRangeRequest = {}));\r
+    let CallHierarchyRequest;\r
+    (function (CallHierarchyRequest) {\r
+        CallHierarchyRequest.type = callHierarchy.CallHierarchyRequest.type;\r
+    })(CallHierarchyRequest = Proposed.CallHierarchyRequest || (Proposed.CallHierarchyRequest = {}));\r
+    let CallHierarchyDirection;\r
+    (function (CallHierarchyDirection) {\r
+        CallHierarchyDirection.CallsFrom = callHierarchy.CallHierarchyDirection.CallsFrom;\r
+        CallHierarchyDirection.CallsTo = callHierarchy.CallHierarchyDirection.CallsTo;\r
+    })(CallHierarchyDirection = Proposed.CallHierarchyDirection || (Proposed.CallHierarchyDirection = {}));\r
+    let ProgressStartNotification;\r
+    (function (ProgressStartNotification) {\r
+        ProgressStartNotification.type = progress.ProgressStartNotification.type;\r
+    })(ProgressStartNotification = Proposed.ProgressStartNotification || (Proposed.ProgressStartNotification = {}));\r
+    let ProgressReportNotification;\r
+    (function (ProgressReportNotification) {\r
+        ProgressReportNotification.type = progress.ProgressReportNotification.type;\r
+    })(ProgressReportNotification = Proposed.ProgressReportNotification || (Proposed.ProgressReportNotification = {}));\r
+    let ProgressDoneNotification;\r
+    (function (ProgressDoneNotification) {\r
+        ProgressDoneNotification.type = progress.ProgressDoneNotification.type;\r
+    })(ProgressDoneNotification = Proposed.ProgressDoneNotification || (Proposed.ProgressDoneNotification = {}));\r
+    let ProgressCancelNotification;\r
+    (function (ProgressCancelNotification) {\r
+        ProgressCancelNotification.type = progress.ProgressCancelNotification.type;\r
+    })(ProgressCancelNotification = Proposed.ProgressCancelNotification || (Proposed.ProgressCancelNotification = {}));\r
+})(Proposed = exports.Proposed || (exports.Proposed = {}));\r
+function createProtocolConnection(reader, writer, logger, strategy) {\r
+    return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);\r
+}\r
+exports.createProtocolConnection = createProtocolConnection;\r
+
+
+/***/ }),
+/* 4 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+/// <reference path="./thenable.ts" />\r
+\r
+function __export(m) {\r
+    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r
+}\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const Is = __webpack_require__(5);\r
+const messages_1 = __webpack_require__(6);\r
+exports.RequestType = messages_1.RequestType;\r
+exports.RequestType0 = messages_1.RequestType0;\r
+exports.RequestType1 = messages_1.RequestType1;\r
+exports.RequestType2 = messages_1.RequestType2;\r
+exports.RequestType3 = messages_1.RequestType3;\r
+exports.RequestType4 = messages_1.RequestType4;\r
+exports.RequestType5 = messages_1.RequestType5;\r
+exports.RequestType6 = messages_1.RequestType6;\r
+exports.RequestType7 = messages_1.RequestType7;\r
+exports.RequestType8 = messages_1.RequestType8;\r
+exports.RequestType9 = messages_1.RequestType9;\r
+exports.ResponseError = messages_1.ResponseError;\r
+exports.ErrorCodes = messages_1.ErrorCodes;\r
+exports.NotificationType = messages_1.NotificationType;\r
+exports.NotificationType0 = messages_1.NotificationType0;\r
+exports.NotificationType1 = messages_1.NotificationType1;\r
+exports.NotificationType2 = messages_1.NotificationType2;\r
+exports.NotificationType3 = messages_1.NotificationType3;\r
+exports.NotificationType4 = messages_1.NotificationType4;\r
+exports.NotificationType5 = messages_1.NotificationType5;\r
+exports.NotificationType6 = messages_1.NotificationType6;\r
+exports.NotificationType7 = messages_1.NotificationType7;\r
+exports.NotificationType8 = messages_1.NotificationType8;\r
+exports.NotificationType9 = messages_1.NotificationType9;\r
+const messageReader_1 = __webpack_require__(7);\r
+exports.MessageReader = messageReader_1.MessageReader;\r
+exports.StreamMessageReader = messageReader_1.StreamMessageReader;\r
+exports.IPCMessageReader = messageReader_1.IPCMessageReader;\r
+exports.SocketMessageReader = messageReader_1.SocketMessageReader;\r
+const messageWriter_1 = __webpack_require__(9);\r
+exports.MessageWriter = messageWriter_1.MessageWriter;\r
+exports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;\r
+exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;\r
+exports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;\r
+const events_1 = __webpack_require__(8);\r
+exports.Disposable = events_1.Disposable;\r
+exports.Event = events_1.Event;\r
+exports.Emitter = events_1.Emitter;\r
+const cancellation_1 = __webpack_require__(10);\r
+exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;\r
+exports.CancellationToken = cancellation_1.CancellationToken;\r
+const linkedMap_1 = __webpack_require__(11);\r
+__export(__webpack_require__(12));\r
+__export(__webpack_require__(16));\r
+var CancelNotification;\r
+(function (CancelNotification) {\r
+    CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');\r
+})(CancelNotification || (CancelNotification = {}));\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
+        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 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 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
+    ;\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
+        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
+            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
+    return connection;\r
+}\r
+function isMessageReader(value) {\r
+    return value.listen !== void 0 && value.read === void 0;\r
+}\r
+function isMessageWriter(value) {\r
+    return value.write !== void 0 && value.end === void 0;\r
+}\r
+function createMessageConnection(input, output, logger, strategy) {\r
+    if (!logger) {\r
+        logger = exports.NullLogger;\r
+    }\r
+    let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);\r
+    let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);\r
+    return _createMessageConnection(reader, writer, logger, strategy);\r
+}\r
+exports.createMessageConnection = createMessageConnection;\r
+
+
+/***/ }),
+/* 5 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+function boolean(value) {\r
+    return value === true || value === false;\r
+}\r
+exports.boolean = boolean;\r
+function string(value) {\r
+    return typeof value === 'string' || value instanceof String;\r
+}\r
+exports.string = string;\r
+function number(value) {\r
+    return typeof value === 'number' || value instanceof Number;\r
+}\r
+exports.number = number;\r
+function error(value) {\r
+    return value instanceof Error;\r
+}\r
+exports.error = error;\r
+function func(value) {\r
+    return typeof value === 'function';\r
+}\r
+exports.func = func;\r
+function array(value) {\r
+    return Array.isArray(value);\r
+}\r
+exports.array = array;\r
+function stringArray(value) {\r
+    return array(value) && value.every(elem => string(elem));\r
+}\r
+exports.stringArray = stringArray;\r
+
+
+/***/ }),
+/* 6 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const is = __webpack_require__(5);\r
+/**\r
+ * Predefined error codes.\r
+ */\r
+var ErrorCodes;\r
+(function (ErrorCodes) {\r
+    // Defined by JSON RPC\r
+    ErrorCodes.ParseError = -32700;\r
+    ErrorCodes.InvalidRequest = -32600;\r
+    ErrorCodes.MethodNotFound = -32601;\r
+    ErrorCodes.InvalidParams = -32602;\r
+    ErrorCodes.InternalError = -32603;\r
+    ErrorCodes.serverErrorStart = -32099;\r
+    ErrorCodes.serverErrorEnd = -32000;\r
+    ErrorCodes.ServerNotInitialized = -32002;\r
+    ErrorCodes.UnknownErrorCode = -32001;\r
+    // Defined by the protocol.\r
+    ErrorCodes.RequestCancelled = -32800;\r
+    ErrorCodes.ContentModified = -32801;\r
+    // Defined by VSCode library.\r
+    ErrorCodes.MessageWriteError = 1;\r
+    ErrorCodes.MessageReadError = 2;\r
+})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));\r
+/**\r
+ * An error object return in a response in case a request\r
+ * has failed.\r
+ */\r
+class ResponseError extends Error {\r
+    constructor(code, message, data) {\r
+        super(message);\r
+        this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;\r
+        this.data = data;\r
+        Object.setPrototypeOf(this, ResponseError.prototype);\r
+    }\r
+    toJson() {\r
+        return {\r
+            code: this.code,\r
+            message: this.message,\r
+            data: this.data,\r
+        };\r
+    }\r
+}\r
+exports.ResponseError = ResponseError;\r
+/**\r
+ * An abstract implementation of a MessageType.\r
+ */\r
+class AbstractMessageType {\r
+    constructor(_method, _numberOfParams) {\r
+        this._method = _method;\r
+        this._numberOfParams = _numberOfParams;\r
+    }\r
+    get method() {\r
+        return this._method;\r
+    }\r
+    get numberOfParams() {\r
+        return this._numberOfParams;\r
+    }\r
+}\r
+exports.AbstractMessageType = AbstractMessageType;\r
+/**\r
+ * Classes to type request response pairs\r
+ */\r
+class RequestType0 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 0);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType0 = RequestType0;\r
+class RequestType extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 1);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType = RequestType;\r
+class RequestType1 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 1);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType1 = RequestType1;\r
+class RequestType2 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 2);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType2 = RequestType2;\r
+class RequestType3 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 3);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType3 = RequestType3;\r
+class RequestType4 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 4);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType4 = RequestType4;\r
+class RequestType5 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 5);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType5 = RequestType5;\r
+class RequestType6 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 6);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType6 = RequestType6;\r
+class RequestType7 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 7);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType7 = RequestType7;\r
+class RequestType8 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 8);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType8 = RequestType8;\r
+class RequestType9 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 9);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.RequestType9 = RequestType9;\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
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType0 = NotificationType0;\r
+class NotificationType1 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 1);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType1 = NotificationType1;\r
+class NotificationType2 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 2);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType2 = NotificationType2;\r
+class NotificationType3 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 3);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType3 = NotificationType3;\r
+class NotificationType4 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 4);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType4 = NotificationType4;\r
+class NotificationType5 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 5);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType5 = NotificationType5;\r
+class NotificationType6 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 6);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType6 = NotificationType6;\r
+class NotificationType7 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 7);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType7 = NotificationType7;\r
+class NotificationType8 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 8);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType8 = NotificationType8;\r
+class NotificationType9 extends AbstractMessageType {\r
+    constructor(method) {\r
+        super(method, 9);\r
+        this._ = undefined;\r
+    }\r
+}\r
+exports.NotificationType9 = NotificationType9;\r
+/**\r
+ * Tests if the given message is a request message\r
+ */\r
+function isRequestMessage(message) {\r
+    let candidate = message;\r
+    return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));\r
+}\r
+exports.isRequestMessage = isRequestMessage;\r
+/**\r
+ * Tests if the given message is a notification message\r
+ */\r
+function isNotificationMessage(message) {\r
+    let candidate = message;\r
+    return candidate && is.string(candidate.method) && message.id === void 0;\r
+}\r
+exports.isNotificationMessage = isNotificationMessage;\r
+/**\r
+ * Tests if the given message is a response message\r
+ */\r
+function isResponseMessage(message) {\r
+    let candidate = message;\r
+    return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);\r
+}\r
+exports.isResponseMessage = isResponseMessage;\r
+
+
+/***/ }),
+/* 7 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const events_1 = __webpack_require__(8);\r
+const Is = __webpack_require__(5);\r
+let DefaultSize = 8192;\r
+let CR = Buffer.from('\r', 'ascii')[0];\r
+let LF = Buffer.from('\n', 'ascii')[0];\r
+let CRLF = '\r\n';\r
+class MessageBuffer {\r
+    constructor(encoding = 'utf8') {\r
+        this.encoding = encoding;\r
+        this.index = 0;\r
+        this.buffer = Buffer.allocUnsafe(DefaultSize);\r
+    }\r
+    append(chunk) {\r
+        var toAppend = chunk;\r
+        if (typeof (chunk) === 'string') {\r
+            var str = chunk;\r
+            var bufferLen = Buffer.byteLength(str, this.encoding);\r
+            toAppend = Buffer.allocUnsafe(bufferLen);\r
+            toAppend.write(str, 0, bufferLen, this.encoding);\r
+        }\r
+        if (this.buffer.length - this.index >= toAppend.length) {\r
+            toAppend.copy(this.buffer, this.index, 0, toAppend.length);\r
+        }\r
+        else {\r
+            var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;\r
+            if (this.index === 0) {\r
+                this.buffer = Buffer.allocUnsafe(newSize);\r
+                toAppend.copy(this.buffer, 0, 0, toAppend.length);\r
+            }\r
+            else {\r
+                this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);\r
+            }\r
+        }\r
+        this.index += toAppend.length;\r
+    }\r
+    tryReadHeaders() {\r
+        let result = undefined;\r
+        let current = 0;\r
+        while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {\r
+            current++;\r
+        }\r
+        // No header / body separator found (e.g CRLFCRLF)\r
+        if (current + 3 >= this.index) {\r
+            return result;\r
+        }\r
+        result = Object.create(null);\r
+        let headers = this.buffer.toString('ascii', 0, current).split(CRLF);\r
+        headers.forEach((header) => {\r
+            let index = header.indexOf(':');\r
+            if (index === -1) {\r
+                throw new Error('Message header must separate key and value using :');\r
+            }\r
+            let key = header.substr(0, index);\r
+            let value = header.substr(index + 1).trim();\r
+            result[key] = value;\r
+        });\r
+        let nextStart = current + 4;\r
+        this.buffer = this.buffer.slice(nextStart);\r
+        this.index = this.index - nextStart;\r
+        return result;\r
+    }\r
+    tryReadContent(length) {\r
+        if (this.index < length) {\r
+            return null;\r
+        }\r
+        let result = this.buffer.toString(this.encoding, 0, length);\r
+        let nextStart = length;\r
+        this.buffer.copy(this.buffer, 0, nextStart);\r
+        this.index = this.index - nextStart;\r
+        return result;\r
+    }\r
+    get numberOfBytes() {\r
+        return this.index;\r
+    }\r
+}\r
+var MessageReader;\r
+(function (MessageReader) {\r
+    function is(value) {\r
+        let candidate = value;\r
+        return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&\r
+            Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);\r
+    }\r
+    MessageReader.is = is;\r
+})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));\r
+class AbstractMessageReader {\r
+    constructor() {\r
+        this.errorEmitter = new events_1.Emitter();\r
+        this.closeEmitter = new events_1.Emitter();\r
+        this.partialMessageEmitter = new events_1.Emitter();\r
+    }\r
+    dispose() {\r
+        this.errorEmitter.dispose();\r
+        this.closeEmitter.dispose();\r
+    }\r
+    get onError() {\r
+        return this.errorEmitter.event;\r
+    }\r
+    fireError(error) {\r
+        this.errorEmitter.fire(this.asError(error));\r
+    }\r
+    get onClose() {\r
+        return this.closeEmitter.event;\r
+    }\r
+    fireClose() {\r
+        this.closeEmitter.fire(undefined);\r
+    }\r
+    get onPartialMessage() {\r
+        return this.partialMessageEmitter.event;\r
+    }\r
+    firePartialMessage(info) {\r
+        this.partialMessageEmitter.fire(info);\r
+    }\r
+    asError(error) {\r
+        if (error instanceof Error) {\r
+            return error;\r
+        }\r
+        else {\r
+            return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r
+        }\r
+    }\r
+}\r
+exports.AbstractMessageReader = AbstractMessageReader;\r
+class StreamMessageReader extends AbstractMessageReader {\r
+    constructor(readable, encoding = 'utf8') {\r
+        super();\r
+        this.readable = readable;\r
+        this.buffer = new MessageBuffer(encoding);\r
+        this._partialMessageTimeout = 10000;\r
+    }\r
+    set partialMessageTimeout(timeout) {\r
+        this._partialMessageTimeout = timeout;\r
+    }\r
+    get partialMessageTimeout() {\r
+        return this._partialMessageTimeout;\r
+    }\r
+    listen(callback) {\r
+        this.nextMessageLength = -1;\r
+        this.messageToken = 0;\r
+        this.partialMessageTimer = undefined;\r
+        this.callback = callback;\r
+        this.readable.on('data', (data) => {\r
+            this.onData(data);\r
+        });\r
+        this.readable.on('error', (error) => this.fireError(error));\r
+        this.readable.on('close', () => this.fireClose());\r
+    }\r
+    onData(data) {\r
+        this.buffer.append(data);\r
+        while (true) {\r
+            if (this.nextMessageLength === -1) {\r
+                let headers = this.buffer.tryReadHeaders();\r
+                if (!headers) {\r
+                    return;\r
+                }\r
+                let contentLength = headers['Content-Length'];\r
+                if (!contentLength) {\r
+                    throw new Error('Header must provide a Content-Length property.');\r
+                }\r
+                let length = parseInt(contentLength);\r
+                if (isNaN(length)) {\r
+                    throw new Error('Content-Length value must be a number.');\r
+                }\r
+                this.nextMessageLength = length;\r
+                // Take the encoding form the header. For compatibility\r
+                // treat both utf-8 and utf8 as node utf8\r
+            }\r
+            var msg = this.buffer.tryReadContent(this.nextMessageLength);\r
+            if (msg === null) {\r
+                /** We haven't received the full message yet. */\r
+                this.setPartialMessageTimer();\r
+                return;\r
+            }\r
+            this.clearPartialMessageTimer();\r
+            this.nextMessageLength = -1;\r
+            this.messageToken++;\r
+            var json = JSON.parse(msg);\r
+            this.callback(json);\r
+        }\r
+    }\r
+    clearPartialMessageTimer() {\r
+        if (this.partialMessageTimer) {\r
+            clearTimeout(this.partialMessageTimer);\r
+            this.partialMessageTimer = undefined;\r
+        }\r
+    }\r
+    setPartialMessageTimer() {\r
+        this.clearPartialMessageTimer();\r
+        if (this._partialMessageTimeout <= 0) {\r
+            return;\r
+        }\r
+        this.partialMessageTimer = setTimeout((token, timeout) => {\r
+            this.partialMessageTimer = undefined;\r
+            if (token === this.messageToken) {\r
+                this.firePartialMessage({ messageToken: token, waitingTime: timeout });\r
+                this.setPartialMessageTimer();\r
+            }\r
+        }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);\r
+    }\r
+}\r
+exports.StreamMessageReader = StreamMessageReader;\r
+class IPCMessageReader extends AbstractMessageReader {\r
+    constructor(process) {\r
+        super();\r
+        this.process = process;\r
+        let eventEmitter = this.process;\r
+        eventEmitter.on('error', (error) => this.fireError(error));\r
+        eventEmitter.on('close', () => this.fireClose());\r
+    }\r
+    listen(callback) {\r
+        this.process.on('message', callback);\r
+    }\r
+}\r
+exports.IPCMessageReader = IPCMessageReader;\r
+class SocketMessageReader extends StreamMessageReader {\r
+    constructor(socket, encoding = 'utf-8') {\r
+        super(socket, encoding);\r
+    }\r
+}\r
+exports.SocketMessageReader = SocketMessageReader;\r
+
+
+/***/ }),
+/* 8 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+var Disposable;\r
+(function (Disposable) {\r
+    function create(func) {\r
+        return {\r
+            dispose: func\r
+        };\r
+    }\r
+    Disposable.create = create;\r
+})(Disposable = exports.Disposable || (exports.Disposable = {}));\r
+var Event;\r
+(function (Event) {\r
+    const _disposable = { dispose() { } };\r
+    Event.None = function () { return _disposable; };\r
+})(Event = exports.Event || (exports.Event = {}));\r
+class CallbackList {\r
+    add(callback, context = null, bucket) {\r
+        if (!this._callbacks) {\r
+            this._callbacks = [];\r
+            this._contexts = [];\r
+        }\r
+        this._callbacks.push(callback);\r
+        this._contexts.push(context);\r
+        if (Array.isArray(bucket)) {\r
+            bucket.push({ dispose: () => this.remove(callback, context) });\r
+        }\r
+    }\r
+    remove(callback, context = null) {\r
+        if (!this._callbacks) {\r
+            return;\r
+        }\r
+        var foundCallbackWithDifferentContext = false;\r
+        for (var i = 0, len = this._callbacks.length; i < len; i++) {\r
+            if (this._callbacks[i] === callback) {\r
+                if (this._contexts[i] === context) {\r
+                    // callback & context match => remove it\r
+                    this._callbacks.splice(i, 1);\r
+                    this._contexts.splice(i, 1);\r
+                    return;\r
+                }\r
+                else {\r
+                    foundCallbackWithDifferentContext = true;\r
+                }\r
+            }\r
+        }\r
+        if (foundCallbackWithDifferentContext) {\r
+            throw new Error('When adding a listener with a context, you should remove it with the same context');\r
+        }\r
+    }\r
+    invoke(...args) {\r
+        if (!this._callbacks) {\r
+            return [];\r
+        }\r
+        var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);\r
+        for (var i = 0, len = callbacks.length; i < len; i++) {\r
+            try {\r
+                ret.push(callbacks[i].apply(contexts[i], args));\r
+            }\r
+            catch (e) {\r
+                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
+Emitter._noop = function () { };\r
+exports.Emitter = Emitter;\r
+
+
+/***/ }),
+/* 9 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const events_1 = __webpack_require__(8);\r
+const Is = __webpack_require__(5);\r
+let ContentLength = 'Content-Length: ';\r
+let CRLF = '\r\n';\r
+var MessageWriter;\r
+(function (MessageWriter) {\r
+    function is(value) {\r
+        let candidate = value;\r
+        return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&\r
+            Is.func(candidate.onError) && Is.func(candidate.write);\r
+    }\r
+    MessageWriter.is = is;\r
+})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));\r
+class AbstractMessageWriter {\r
+    constructor() {\r
+        this.errorEmitter = new events_1.Emitter();\r
+        this.closeEmitter = new events_1.Emitter();\r
+    }\r
+    dispose() {\r
+        this.errorEmitter.dispose();\r
+        this.closeEmitter.dispose();\r
+    }\r
+    get onError() {\r
+        return this.errorEmitter.event;\r
+    }\r
+    fireError(error, message, count) {\r
+        this.errorEmitter.fire([this.asError(error), message, count]);\r
+    }\r
+    get onClose() {\r
+        return this.closeEmitter.event;\r
+    }\r
+    fireClose() {\r
+        this.closeEmitter.fire(undefined);\r
+    }\r
+    asError(error) {\r
+        if (error instanceof Error) {\r
+            return error;\r
+        }\r
+        else {\r
+            return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r
+        }\r
+    }\r
+}\r
+exports.AbstractMessageWriter = AbstractMessageWriter;\r
+class StreamMessageWriter extends AbstractMessageWriter {\r
+    constructor(writable, encoding = 'utf8') {\r
+        super();\r
+        this.writable = writable;\r
+        this.encoding = encoding;\r
+        this.errorCount = 0;\r
+        this.writable.on('error', (error) => this.fireError(error));\r
+        this.writable.on('close', () => this.fireClose());\r
+    }\r
+    write(msg) {\r
+        let json = JSON.stringify(msg);\r
+        let contentLength = Buffer.byteLength(json, this.encoding);\r
+        let headers = [\r
+            ContentLength, contentLength.toString(), CRLF,\r
+            CRLF\r
+        ];\r
+        try {\r
+            // Header must be written in ASCII encoding\r
+            this.writable.write(headers.join(''), 'ascii');\r
+            // Now write the content. This can be written in any encoding\r
+            this.writable.write(json, this.encoding);\r
+            this.errorCount = 0;\r
+        }\r
+        catch (error) {\r
+            this.errorCount++;\r
+            this.fireError(error, msg, this.errorCount);\r
+        }\r
+    }\r
+}\r
+exports.StreamMessageWriter = StreamMessageWriter;\r
+class IPCMessageWriter extends AbstractMessageWriter {\r
+    constructor(process) {\r
+        super();\r
+        this.process = process;\r
+        this.errorCount = 0;\r
+        this.queue = [];\r
+        this.sending = false;\r
+        let eventEmitter = this.process;\r
+        eventEmitter.on('error', (error) => this.fireError(error));\r
+        eventEmitter.on('close', () => this.fireClose);\r
+    }\r
+    write(msg) {\r
+        if (!this.sending && this.queue.length === 0) {\r
+            // See https://github.com/nodejs/node/issues/7657\r
+            this.doWriteMessage(msg);\r
+        }\r
+        else {\r
+            this.queue.push(msg);\r
+        }\r
+    }\r
+    doWriteMessage(msg) {\r
+        try {\r
+            if (this.process.send) {\r
+                this.sending = true;\r
+                this.process.send(msg, undefined, undefined, (error) => {\r
+                    this.sending = false;\r
+                    if (error) {\r
+                        this.errorCount++;\r
+                        this.fireError(error, msg, this.errorCount);\r
+                    }\r
+                    else {\r
+                        this.errorCount = 0;\r
+                    }\r
+                    if (this.queue.length > 0) {\r
+                        this.doWriteMessage(this.queue.shift());\r
+                    }\r
+                });\r
+            }\r
+        }\r
+        catch (error) {\r
+            this.errorCount++;\r
+            this.fireError(error, msg, this.errorCount);\r
+        }\r
+    }\r
+}\r
+exports.IPCMessageWriter = IPCMessageWriter;\r
+class SocketMessageWriter extends AbstractMessageWriter {\r
+    constructor(socket, encoding = 'utf8') {\r
+        super();\r
+        this.socket = socket;\r
+        this.queue = [];\r
+        this.sending = false;\r
+        this.encoding = encoding;\r
+        this.errorCount = 0;\r
+        this.socket.on('error', (error) => this.fireError(error));\r
+        this.socket.on('close', () => this.fireClose());\r
+    }\r
+    dispose() {\r
+        super.dispose();\r
+        this.socket.destroy();\r
+    }\r
+    write(msg) {\r
+        if (!this.sending && this.queue.length === 0) {\r
+            // See https://github.com/nodejs/node/issues/7657\r
+            this.doWriteMessage(msg);\r
+        }\r
+        else {\r
+            this.queue.push(msg);\r
+        }\r
+    }\r
+    doWriteMessage(msg) {\r
+        let json = JSON.stringify(msg);\r
+        let contentLength = Buffer.byteLength(json, this.encoding);\r
+        let headers = [\r
+            ContentLength, contentLength.toString(), CRLF,\r
+            CRLF\r
+        ];\r
+        try {\r
+            // Header must be written in ASCII encoding\r
+            this.sending = true;\r
+            this.socket.write(headers.join(''), 'ascii', (error) => {\r
+                if (error) {\r
+                    this.handleError(error, msg);\r
+                }\r
+                try {\r
+                    // Now write the content. This can be written in any encoding\r
+                    this.socket.write(json, this.encoding, (error) => {\r
+                        this.sending = false;\r
+                        if (error) {\r
+                            this.handleError(error, msg);\r
+                        }\r
+                        else {\r
+                            this.errorCount = 0;\r
+                        }\r
+                        if (this.queue.length > 0) {\r
+                            this.doWriteMessage(this.queue.shift());\r
+                        }\r
+                    });\r
+                }\r
+                catch (error) {\r
+                    this.handleError(error, msg);\r
+                }\r
+            });\r
+        }\r
+        catch (error) {\r
+            this.handleError(error, msg);\r
+        }\r
+    }\r
+    handleError(error, msg) {\r
+        this.errorCount++;\r
+        this.fireError(error, msg, this.errorCount);\r
+    }\r
+}\r
+exports.SocketMessageWriter = SocketMessageWriter;\r
+
+
+/***/ }),
+/* 10 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/*---------------------------------------------------------------------------------------------\r
+ *  Copyright (c) Microsoft Corporation. All rights reserved.\r
+ *  Licensed under the MIT License. See License.txt in the project root for license information.\r
+ *--------------------------------------------------------------------------------------------*/\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const events_1 = __webpack_require__(8);\r
+const Is = __webpack_require__(5);\r
+var CancellationToken;\r
+(function (CancellationToken) {\r
+    CancellationToken.None = Object.freeze({\r
+        isCancellationRequested: false,\r
+        onCancellationRequested: events_1.Event.None\r
+    });\r
+    CancellationToken.Cancelled = Object.freeze({\r
+        isCancellationRequested: true,\r
+        onCancellationRequested: events_1.Event.None\r
+    });\r
+    function is(value) {\r
+        let candidate = value;\r
+        return candidate && (candidate === CancellationToken.None\r
+            || candidate === CancellationToken.Cancelled\r
+            || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));\r
+    }\r
+    CancellationToken.is = is;\r
+})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));\r
+const shortcutEvent = Object.freeze(function (callback, context) {\r
+    let handle = setTimeout(callback.bind(context), 0);\r
+    return { dispose() { clearTimeout(handle); } };\r
+});\r
+class MutableToken {\r
+    constructor() {\r
+        this._isCancelled = false;\r
+    }\r
+    cancel() {\r
+        if (!this._isCancelled) {\r
+            this._isCancelled = true;\r
+            if (this._emitter) {\r
+                this._emitter.fire(undefined);\r
+                this.dispose();\r
+            }\r
+        }\r
+    }\r
+    get isCancellationRequested() {\r
+        return this._isCancelled;\r
+    }\r
+    get onCancellationRequested() {\r
+        if (this._isCancelled) {\r
+            return shortcutEvent;\r
+        }\r
+        if (!this._emitter) {\r
+            this._emitter = new events_1.Emitter();\r
+        }\r
+        return this._emitter.event;\r
+    }\r
+    dispose() {\r
+        if (this._emitter) {\r
+            this._emitter.dispose();\r
+            this._emitter = undefined;\r
+        }\r
+    }\r
+}\r
+class CancellationTokenSource {\r
+    get token() {\r
+        if (!this._token) {\r
+            // be lazy and create the token only when\r
+            // actually needed\r
+            this._token = new MutableToken();\r
+        }\r
+        return this._token;\r
+    }\r
+    cancel() {\r
+        if (!this._token) {\r
+            // save an object by returning the default\r
+            // cancelled token when cancellation happens\r
+            // before someone asks for the token\r
+            this._token = CancellationToken.Cancelled;\r
+        }\r
+        else {\r
+            this._token.cancel();\r
+        }\r
+    }\r
+    dispose() {\r
+        if (!this._token) {\r
+            // ensure to initialize with an empty token if we had none\r
+            this._token = CancellationToken.None;\r
+        }\r
+        else if (this._token instanceof MutableToken) {\r
+            // actually dispose\r
+            this._token.dispose();\r
+        }\r
+    }\r
+}\r
+exports.CancellationTokenSource = CancellationTokenSource;\r
+
+
+/***/ }),
+/* 11 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+\r
+/*---------------------------------------------------------------------------------------------\r
+ *  Copyright (c) Microsoft Corporation. All rights reserved.\r
+ *  Licensed under the MIT License. See License.txt in the project root for license information.\r
+ *--------------------------------------------------------------------------------------------*/\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+var Touch;\r
+(function (Touch) {\r
+    Touch.None = 0;\r
+    Touch.First = 1;\r
+    Touch.Last = 2;\r
+})(Touch = exports.Touch || (exports.Touch = {}));\r
+class LinkedMap {\r
+    constructor() {\r
+        this._map = new Map();\r
+        this._head = undefined;\r
+        this._tail = undefined;\r
+        this._size = 0;\r
+    }\r
+    clear() {\r
+        this._map.clear();\r
+        this._head = undefined;\r
+        this._tail = undefined;\r
+        this._size = 0;\r
+    }\r
+    isEmpty() {\r
+        return !this._head && !this._tail;\r
+    }\r
+    get size() {\r
+        return this._size;\r
+    }\r
+    has(key) {\r
+        return this._map.has(key);\r
+    }\r
+    get(key) {\r
+        const item = this._map.get(key);\r
+        if (!item) {\r
+            return undefined;\r
+        }\r
+        return item.value;\r
+    }\r
+    set(key, value, touch = Touch.None) {\r
+        let item = this._map.get(key);\r
+        if (item) {\r
+            item.value = value;\r
+            if (touch !== Touch.None) {\r
+                this.touch(item, touch);\r
+            }\r
+        }\r
+        else {\r
+            item = { key, value, next: undefined, previous: undefined };\r
+            switch (touch) {\r
+                case Touch.None:\r
+                    this.addItemLast(item);\r
+                    break;\r
+                case Touch.First:\r
+                    this.addItemFirst(item);\r
+                    break;\r
+                case Touch.Last:\r
+                    this.addItemLast(item);\r
+                    break;\r
+                default:\r
+                    this.addItemLast(item);\r
+                    break;\r
+            }\r
+            this._map.set(key, item);\r
+            this._size++;\r
+        }\r
+    }\r
+    delete(key) {\r
+        const item = this._map.get(key);\r
+        if (!item) {\r
+            return false;\r
+        }\r
+        this._map.delete(key);\r
+        this.removeItem(item);\r
+        this._size--;\r
+        return true;\r
+    }\r
+    shift() {\r
+        if (!this._head && !this._tail) {\r
+            return undefined;\r
+        }\r
+        if (!this._head || !this._tail) {\r
+            throw new Error('Invalid list');\r
+        }\r
+        const item = this._head;\r
+        this._map.delete(item.key);\r
+        this.removeItem(item);\r
+        this._size--;\r
+        return item.value;\r
+    }\r
+    forEach(callbackfn, thisArg) {\r
+        let current = this._head;\r
+        while (current) {\r
+            if (thisArg) {\r
+                callbackfn.bind(thisArg)(current.value, current.key, this);\r
+            }\r
+            else {\r
+                callbackfn(current.value, current.key, this);\r
+            }\r
+            current = current.next;\r
+        }\r
+    }\r
+    forEachReverse(callbackfn, thisArg) {\r
+        let current = this._tail;\r
+        while (current) {\r
+            if (thisArg) {\r
+                callbackfn.bind(thisArg)(current.value, current.key, this);\r
+            }\r
+            else {\r
+                callbackfn(current.value, current.key, this);\r
+            }\r
+            current = current.previous;\r
+        }\r
+    }\r
+    values() {\r
+        let result = [];\r
+        let current = this._head;\r
+        while (current) {\r
+            result.push(current.value);\r
+            current = current.next;\r
+        }\r
+        return result;\r
+    }\r
+    keys() {\r
+        let result = [];\r
+        let current = this._head;\r
+        while (current) {\r
+            result.push(current.key);\r
+            current = current.next;\r
+        }\r
+        return result;\r
+    }\r
+    /* JSON RPC run on es5 which has no Symbol.iterator\r
+    public keys(): IterableIterator<K> {\r
+        let current = this._head;\r
+        let iterator: IterableIterator<K> = {\r
+            [Symbol.iterator]() {\r
+                return iterator;\r
+            },\r
+            next():IteratorResult<K> {\r
+                if (current) {\r
+                    let result = { value: current.key, done: false };\r
+                    current = current.next;\r
+                    return result;\r
+                } else {\r
+                    return { value: undefined, done: true };\r
+                }\r
+            }\r
+        };\r
+        return iterator;\r
+    }\r
+\r
+    public values(): IterableIterator<V> {\r
+        let current = this._head;\r
+        let iterator: IterableIterator<V> = {\r
+            [Symbol.iterator]() {\r
+                return iterator;\r
+            },\r
+            next():IteratorResult<V> {\r
+                if (current) {\r
+                    let result = { value: current.value, done: false };\r
+                    current = current.next;\r
+                    return result;\r
+                } else {\r
+                    return { value: undefined, done: true };\r
+                }\r
+            }\r
+        };\r
+        return iterator;\r
+    }\r
+    */\r
+    addItemFirst(item) {\r
+        // First time Insert\r
+        if (!this._head && !this._tail) {\r
+            this._tail = item;\r
+        }\r
+        else if (!this._head) {\r
+            throw new Error('Invalid list');\r
+        }\r
+        else {\r
+            item.next = this._head;\r
+            this._head.previous = item;\r
+        }\r
+        this._head = item;\r
+    }\r
+    addItemLast(item) {\r
+        // First time Insert\r
+        if (!this._head && !this._tail) {\r
+            this._head = item;\r
+        }\r
+        else if (!this._tail) {\r
+            throw new Error('Invalid list');\r
+        }\r
+        else {\r
+            item.previous = this._tail;\r
+            this._tail.next = item;\r
+        }\r
+        this._tail = item;\r
+    }\r
+    removeItem(item) {\r
+        if (item === this._head && item === this._tail) {\r
+            this._head = undefined;\r
+            this._tail = undefined;\r
+        }\r
+        else if (item === this._head) {\r
+            this._head = item.next;\r
+        }\r
+        else if (item === this._tail) {\r
+            this._tail = item.previous;\r
+        }\r
+        else {\r
+            const next = item.next;\r
+            const previous = item.previous;\r
+            if (!next || !previous) {\r
+                throw new Error('Invalid list');\r
+            }\r
+            next.previous = previous;\r
+            previous.next = next;\r
+        }\r
+    }\r
+    touch(item, touch) {\r
+        if (!this._head || !this._tail) {\r
+            throw new Error('Invalid list');\r
+        }\r
+        if ((touch !== Touch.First && touch !== Touch.Last)) {\r
+            return;\r
+        }\r
+        if (touch === Touch.First) {\r
+            if (item === this._head) {\r
+                return;\r
+            }\r
+            const next = item.next;\r
+            const previous = item.previous;\r
+            // Unlink the item\r
+            if (item === this._tail) {\r
+                // previous must be defined since item was not head but is tail\r
+                // So there are more than on item in the map\r
+                previous.next = undefined;\r
+                this._tail = previous;\r
+            }\r
+            else {\r
+                // Both next and previous are not undefined since item was neither head nor tail.\r
+                next.previous = previous;\r
+                previous.next = next;\r
+            }\r
+            // Insert the node at head\r
+            item.previous = undefined;\r
+            item.next = this._head;\r
+            this._head.previous = item;\r
+            this._head = item;\r
+        }\r
+        else if (touch === Touch.Last) {\r
+            if (item === this._tail) {\r
+                return;\r
+            }\r
+            const next = item.next;\r
+            const previous = item.previous;\r
+            // Unlink the item.\r
+            if (item === this._head) {\r
+                // next must be defined since item was not tail but is head\r
+                // So there are more than on item in the map\r
+                next.previous = undefined;\r
+                this._head = next;\r
+            }\r
+            else {\r
+                // Both next and previous are not undefined since item was neither head nor tail.\r
+                next.previous = previous;\r
+                previous.next = next;\r
+            }\r
+            item.next = undefined;\r
+            item.previous = this._tail;\r
+            this._tail.next = item;\r
+            this._tail = item;\r
+        }\r
+    }\r
+}\r
+exports.LinkedMap = LinkedMap;\r
+
+
+/***/ }),
+/* 12 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const path_1 = __webpack_require__(1);\r
+const os_1 = __webpack_require__(13);\r
+const crypto_1 = __webpack_require__(14);\r
+const net_1 = __webpack_require__(15);\r
+const messageReader_1 = __webpack_require__(7);\r
+const messageWriter_1 = __webpack_require__(9);\r
+function generateRandomPipeName() {\r
+    const randomSuffix = crypto_1.randomBytes(21).toString('hex');\r
+    if (process.platform === 'win32') {\r
+        return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;\r
+    }\r
+    else {\r
+        // Mac/Unix: use socket file\r
+        return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);\r
+    }\r
+}\r
+exports.generateRandomPipeName = generateRandomPipeName;\r
+function createClientPipeTransport(pipeName, encoding = 'utf-8') {\r
+    let connectResolve;\r
+    let connected = new Promise((resolve, _reject) => {\r
+        connectResolve = resolve;\r
+    });\r
+    return new Promise((resolve, reject) => {\r
+        let server = net_1.createServer((socket) => {\r
+            server.close();\r
+            connectResolve([\r
+                new messageReader_1.SocketMessageReader(socket, encoding),\r
+                new messageWriter_1.SocketMessageWriter(socket, encoding)\r
+            ]);\r
+        });\r
+        server.on('error', reject);\r
+        server.listen(pipeName, () => {\r
+            server.removeListener('error', reject);\r
+            resolve({\r
+                onConnected: () => { return connected; }\r
+            });\r
+        });\r
+    });\r
+}\r
+exports.createClientPipeTransport = createClientPipeTransport;\r
+function createServerPipeTransport(pipeName, encoding = 'utf-8') {\r
+    const socket = net_1.createConnection(pipeName);\r
+    return [\r
+        new messageReader_1.SocketMessageReader(socket, encoding),\r
+        new messageWriter_1.SocketMessageWriter(socket, encoding)\r
+    ];\r
+}\r
+exports.createServerPipeTransport = createServerPipeTransport;\r
+
+
+/***/ }),
+/* 13 */
+/***/ (function(module, exports) {
+
+module.exports = require("os");
+
+/***/ }),
+/* 14 */
+/***/ (function(module, exports) {
+
+module.exports = require("crypto");
+
+/***/ }),
+/* 15 */
+/***/ (function(module, exports) {
+
+module.exports = require("net");
+
+/***/ }),
+/* 16 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const net_1 = __webpack_require__(15);\r
+const messageReader_1 = __webpack_require__(7);\r
+const messageWriter_1 = __webpack_require__(9);\r
+function createClientSocketTransport(port, encoding = 'utf-8') {\r
+    let connectResolve;\r
+    let connected = new Promise((resolve, _reject) => {\r
+        connectResolve = resolve;\r
+    });\r
+    return new Promise((resolve, reject) => {\r
+        let server = net_1.createServer((socket) => {\r
+            server.close();\r
+            connectResolve([\r
+                new messageReader_1.SocketMessageReader(socket, encoding),\r
+                new messageWriter_1.SocketMessageWriter(socket, encoding)\r
+            ]);\r
+        });\r
+        server.on('error', reject);\r
+        server.listen(port, '127.0.0.1', () => {\r
+            server.removeListener('error', reject);\r
+            resolve({\r
+                onConnected: () => { return connected; }\r
+            });\r
+        });\r
+    });\r
+}\r
+exports.createClientSocketTransport = createClientSocketTransport;\r
+function createServerSocketTransport(port, encoding = 'utf-8') {\r
+    const socket = net_1.createConnection(port, '127.0.0.1');\r
+    return [\r
+        new messageReader_1.SocketMessageReader(socket, encoding),\r
+        new messageWriter_1.SocketMessageWriter(socket, encoding)\r
+    ];\r
+}\r
+exports.createServerSocketTransport = createServerSocketTransport;\r
+
+
+/***/ }),
+/* 17 */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Position", function() { return Position; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Range", function() { return Range; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Location", function() { return Location; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocationLink", function() { return LocationLink; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorInformation", function() { return ColorInformation; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPresentation", function() { return ColorPresentation; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRangeKind", function() { return FoldingRangeKind; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRange", function() { return FoldingRange; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticRelatedInformation", function() { return DiagnosticRelatedInformation; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticSeverity", function() { return DiagnosticSeverity; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticTag", function() { return DiagnosticTag; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Diagnostic", function() { return Diagnostic; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Command", function() { return Command; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextEdit", function() { return TextEdit; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentEdit", function() { return TextDocumentEdit; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CreateFile", function() { return CreateFile; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenameFile", function() { return RenameFile; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DeleteFile", function() { return DeleteFile; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceEdit", function() { return WorkspaceEdit; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceChange", function() { return WorkspaceChange; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentIdentifier", function() { return TextDocumentIdentifier; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VersionedTextDocumentIdentifier", function() { return VersionedTextDocumentIdentifier; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentItem", function() { return TextDocumentItem; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupKind", function() { return MarkupKind; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupContent", function() { return MarkupContent; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemKind", function() { return CompletionItemKind; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InsertTextFormat", function() { return InsertTextFormat; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItem", function() { return CompletionItem; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionList", function() { return CompletionList; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkedString", function() { return MarkedString; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hover", function() { return Hover; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParameterInformation", function() { return ParameterInformation; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignatureInformation", function() { return SignatureInformation; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlightKind", function() { return DocumentHighlightKind; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlight", function() { return DocumentHighlight; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolKind", function() { return SymbolKind; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolInformation", function() { return SymbolInformation; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentSymbol", function() { return DocumentSymbol; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionKind", function() { return CodeActionKind; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionContext", function() { return CodeActionContext; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeAction", function() { return CodeAction; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeLens", function() { return CodeLens; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormattingOptions", function() { return FormattingOptions; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentLink", function() { return DocumentLink; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EOL", function() { return EOL; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentSaveReason", function() { return TextDocumentSaveReason; });
+/* --------------------------------------------------------------------------------------------\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
+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
+})(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
+ * 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
+    ;\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
+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
+/**\r
+ * Represents programming constructs like variables, classes, interfaces etc.\r
+ * that appear in a document. Document symbols can be hierarchical and they\r
+ * have two ranges: one that encloses its definition and one that points to\r
+ * its most interesting range, e.g. the range of an identifier.\r
+ */\r
+var DocumentSymbol = /** @class */ (function () {\r
+    function DocumentSymbol() {\r
+    }\r
+    return DocumentSymbol;\r
+}());\r
+\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
+     * 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
+})(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 null) {\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.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
+        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
+ * A document link is a range in a text document that links to an internal or external resource, like another\r
+ * text document or a web site.\r
+ */\r
+var DocumentLink = /** @class */ (function () {\r
+    function DocumentLink() {\r
+    }\r
+    return DocumentLink;\r
+}());\r
+\r
+/**\r
+ * The DocumentLink namespace provides helper functions to work with\r
+ * [DocumentLink](#DocumentLink) literals.\r
+ */\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
+var EOL = ['\n', '\r\n', '\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
+/**\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 || (TextDocumentSaveReason = {}));\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 = null;\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 = null;\r
+    };\r
+    FullTextDocument.prototype.getLineOffsets = function () {\r
+        if (this._lineOffsets === null) {\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
+
+
+/***/ }),
+/* 18 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const Is = __webpack_require__(19);\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+const protocol_implementation_1 = __webpack_require__(20);\r
+exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;\r
+const protocol_typeDefinition_1 = __webpack_require__(21);\r
+exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;\r
+const protocol_workspaceFolders_1 = __webpack_require__(22);\r
+exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;\r
+exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;\r
+const protocol_configuration_1 = __webpack_require__(23);\r
+exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;\r
+const protocol_colorProvider_1 = __webpack_require__(24);\r
+exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;\r
+exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;\r
+const protocol_foldingRange_1 = __webpack_require__(25);\r
+exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;\r
+const protocol_declaration_1 = __webpack_require__(26);\r
+exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;\r
+// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r
+let __noDynamicImport;\r
+var DocumentFilter;\r
+(function (DocumentFilter) {\r
+    function is(value) {\r
+        let 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 `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 vscode_jsonrpc_1.RequestType('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 vscode_jsonrpc_1.RequestType('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
+     * guaruntee that this is succeeding.\r
+     */\r
+    FailureHandlingKind.Undo = 'undo';\r
+})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));\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 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 vscode_jsonrpc_1.RequestType('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 vscode_jsonrpc_1.NotificationType('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 vscode_jsonrpc_1.RequestType0('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 vscode_jsonrpc_1.NotificationType0('exit');\r
+})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));\r
+//---- Configuration notification ----\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 vscode_jsonrpc_1.NotificationType('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 vscode_jsonrpc_1.NotificationType('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 vscode_jsonrpc_1.RequestType('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 vscode_jsonrpc_1.NotificationType('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 vscode_jsonrpc_1.NotificationType('telemetry/event');\r
+})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));\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.type = new vscode_jsonrpc_1.NotificationType('textDocument/didOpen');\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.type = new vscode_jsonrpc_1.NotificationType('textDocument/didChange');\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.type = new vscode_jsonrpc_1.NotificationType('textDocument/didClose');\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.type = new vscode_jsonrpc_1.NotificationType('textDocument/didSave');\r
+})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));\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.type = new vscode_jsonrpc_1.NotificationType('textDocument/willSave');\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.type = new vscode_jsonrpc_1.RequestType('textDocument/willSaveWaitUntil');\r
+})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));\r
+//---- File eventing ----\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 vscode_jsonrpc_1.NotificationType('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
+//---- Diagnostic notification ----\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 vscode_jsonrpc_1.NotificationType('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.type = new vscode_jsonrpc_1.RequestType('textDocument/completion');\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.type = new vscode_jsonrpc_1.RequestType('completionItem/resolve');\r
+})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));\r
+//---- Hover Support -------------------------------\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.type = new vscode_jsonrpc_1.RequestType('textDocument/hover');\r
+})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));\r
+var SignatureHelpRequest;\r
+(function (SignatureHelpRequest) {\r
+    SignatureHelpRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/signatureHelp');\r
+})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));\r
+//---- Goto Definition -------------------------------------\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.type = new vscode_jsonrpc_1.RequestType('textDocument/definition');\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.type = new vscode_jsonrpc_1.RequestType('textDocument/references');\r
+})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));\r
+//---- Document Highlight ----------------------------------\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.type = new vscode_jsonrpc_1.RequestType('textDocument/documentHighlight');\r
+})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));\r
+//---- Document Symbol Provider ---------------------------\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.type = new vscode_jsonrpc_1.RequestType('textDocument/documentSymbol');\r
+})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));\r
+//---- Workspace Symbol Provider ---------------------------\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.type = new vscode_jsonrpc_1.RequestType('workspace/symbol');\r
+})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));\r
+/**\r
+ * A request to provide commands for the given text document and range.\r
+ */\r
+var CodeActionRequest;\r
+(function (CodeActionRequest) {\r
+    CodeActionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/codeAction');\r
+})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));\r
+/**\r
+ * A request to provide code lens for the given text document.\r
+ */\r
+var CodeLensRequest;\r
+(function (CodeLensRequest) {\r
+    CodeLensRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/codeLens');\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 vscode_jsonrpc_1.RequestType('codeLens/resolve');\r
+})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));\r
+/**\r
+ * A request to to format a whole document.\r
+ */\r
+var DocumentFormattingRequest;\r
+(function (DocumentFormattingRequest) {\r
+    DocumentFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/formatting');\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.type = new vscode_jsonrpc_1.RequestType('textDocument/rangeFormatting');\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.type = new vscode_jsonrpc_1.RequestType('textDocument/onTypeFormatting');\r
+})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));\r
+/**\r
+ * A request to rename a symbol.\r
+ */\r
+var RenameRequest;\r
+(function (RenameRequest) {\r
+    RenameRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/rename');\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.type = new vscode_jsonrpc_1.RequestType('textDocument/prepareRename');\r
+})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));\r
+/**\r
+ * A request to provide document links\r
+ */\r
+var DocumentLinkRequest;\r
+(function (DocumentLinkRequest) {\r
+    DocumentLinkRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentLink');\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 vscode_jsonrpc_1.RequestType('documentLink/resolve');\r
+})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));\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 vscode_jsonrpc_1.RequestType('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 vscode_jsonrpc_1.RequestType('workspace/applyEdit');\r
+})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));\r
+
+
+/***/ }),
+/* 19 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+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 thenable(value) {\r
+    return value && func(value.then);\r
+}\r
+exports.thenable = thenable;\r
+
+
+/***/ }),
+/* 20 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\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.type = new vscode_jsonrpc_1.RequestType('textDocument/implementation');\r
+})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));\r
+
+
+/***/ }),
+/* 21 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+// @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.type = new vscode_jsonrpc_1.RequestType('textDocument/typeDefinition');\r
+})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));\r
+
+
+/***/ }),
+/* 22 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+/**\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 vscode_jsonrpc_1.RequestType0('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 vscode_jsonrpc_1.NotificationType('workspace/didChangeWorkspaceFolders');\r
+})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));\r
+
+
+/***/ }),
+/* 23 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+/**\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 vscode_jsonrpc_1.RequestType('workspace/configuration');\r
+})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));\r
+
+
+/***/ }),
+/* 24 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\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.type = new vscode_jsonrpc_1.RequestType('textDocument/documentColor');\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 vscode_jsonrpc_1.RequestType('textDocument/colorPresentation');\r
+})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));\r
+
+
+/***/ }),
+/* 25 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+\r
+/*---------------------------------------------------------------------------------------------\r
+ *  Copyright (c) Microsoft Corporation. All rights reserved.\r
+ *  Licensed under the MIT License. See License.txt in the project root for license information.\r
+ *--------------------------------------------------------------------------------------------*/\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+/**\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.type = new vscode_jsonrpc_1.RequestType('textDocument/foldingRange');\r
+})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));\r
+
+
+/***/ }),
+/* 26 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+// @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.type = new vscode_jsonrpc_1.RequestType('textDocument/declaration');\r
+})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));\r
+
+
+/***/ }),
+/* 27 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) TypeFox and others. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+/**\r
+ * The direction of a call hierarchy request.\r
+ */\r
+var CallHierarchyDirection;\r
+(function (CallHierarchyDirection) {\r
+    /**\r
+     * The callers\r
+     */\r
+    CallHierarchyDirection.CallsFrom = 1;\r
+    /**\r
+     * The callees\r
+     */\r
+    CallHierarchyDirection.CallsTo = 2;\r
+})(CallHierarchyDirection = exports.CallHierarchyDirection || (exports.CallHierarchyDirection = {}));\r
+/**\r
+ * Request to provide the call hierarchy at a given text document position.\r
+ *\r
+ * The request's parameter is of type [CallHierarchyParams](#CallHierarchyParams). The response\r
+ * is of type [CallHierarchyCall[]](#CallHierarchyCall) or a Thenable that resolves to such.\r
+ *\r
+ * Evaluates the symbol defined (or referenced) at the given position, and returns all incoming or outgoing calls to the symbol(s).\r
+ */\r
+var CallHierarchyRequest;\r
+(function (CallHierarchyRequest) {\r
+    CallHierarchyRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/callHierarchy');\r
+})(CallHierarchyRequest = exports.CallHierarchyRequest || (exports.CallHierarchyRequest = {}));\r
+
+
+/***/ }),
+/* 28 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/* --------------------------------------------------------------------------------------------\r
+ * Copyright (c) Microsoft Corporation. All rights reserved.\r
+ * Licensed under the MIT License. See License.txt in the project root for license information.\r
+ * ------------------------------------------------------------------------------------------ */\r
+\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+/**\r
+ * The `window/progress/start` notification is sent from the server to the client\r
+ * to initiate a progress.\r
+ */\r
+var ProgressStartNotification;\r
+(function (ProgressStartNotification) {\r
+    ProgressStartNotification.type = new vscode_jsonrpc_1.NotificationType('window/progress/start');\r
+})(ProgressStartNotification = exports.ProgressStartNotification || (exports.ProgressStartNotification = {}));\r
+/**\r
+ * The `window/progress/report` notification is sent from the server to the client\r
+ * to initiate a progress.\r
+ */\r
+var ProgressReportNotification;\r
+(function (ProgressReportNotification) {\r
+    ProgressReportNotification.type = new vscode_jsonrpc_1.NotificationType('window/progress/report');\r
+})(ProgressReportNotification = exports.ProgressReportNotification || (exports.ProgressReportNotification = {}));\r
+/**\r
+ * The `window/progress/done` notification is sent from the server to the client\r
+ * to initiate a progress.\r
+ */\r
+var ProgressDoneNotification;\r
+(function (ProgressDoneNotification) {\r
+    ProgressDoneNotification.type = new vscode_jsonrpc_1.NotificationType('window/progress/done');\r
+})(ProgressDoneNotification = exports.ProgressDoneNotification || (exports.ProgressDoneNotification = {}));\r
+/**\r
+ * The `window/progress/cancel` notification is sent client to the server to cancel a progress\r
+ * initiated on the server side.\r
+ */\r
+var ProgressCancelNotification;\r
+(function (ProgressCancelNotification) {\r
+    ProgressCancelNotification.type = new vscode_jsonrpc_1.NotificationType('window/progress/cancel');\r
+})(ProgressCancelNotification = exports.ProgressCancelNotification || (exports.ProgressCancelNotification = {}));\r
+
+
+/***/ }),
+/* 29 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+\r
+/*---------------------------------------------------------------------------------------------\r
+ *  Copyright (c) Microsoft Corporation. All rights reserved.\r
+ *  Licensed under the MIT License. See License.txt in the project root for license information.\r
+ *--------------------------------------------------------------------------------------------*/\r
+Object.defineProperty(exports, "__esModule", { value: true });\r
+const vscode_jsonrpc_1 = __webpack_require__(4);\r
+const vscode_languageserver_types_1 = __webpack_require__(17);\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, parent };\r
+    }\r
+    SelectionRange.create = create;\r
+    function is(value) {\r
+        let candidate = value;\r
+        return candidate !== undefined && vscode_languageserver_types_1.Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\r
+    }\r
+    SelectionRange.is = is;\r
+})(SelectionRange = exports.SelectionRange || (exports.SelectionRange = {}));\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.type = new vscode_jsonrpc_1.RequestType('textDocument/selectionRange');\r
+})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));\r
+
+
+/***/ }),
+/* 30 */
+/***/ (function(module) {
+
+module.exports = {"$schema":"http://json.schemastore.org/schema-catalog","version":1,"schemas":[{"name":".angular-cli.json","description":"Angular CLI configuration file","fileMatch":[".angular-cli.json","angular-cli.json"],"url":"https://raw.githubusercontent.com/angular/angular-cli/master/packages/angular/cli/lib/config/schema.json"},{"name":"Ansible","description":"Ansible task files","url":"http://json.schemastore.org/ansible-stable-2.5","fileMatch":["tasks/*.yml","tasks/*.yaml"],"versions":{"2.0":"http://json.schemastore.org/ansible-stable-2.0","2.1":"http://json.schemastore.org/ansible-stable-2.1","2.2":"http://json.schemastore.org/ansible-stable-2.2","2.3":"http://json.schemastore.org/ansible-stable-2.3","2.4":"http://json.schemastore.org/ansible-stable-2.4","2.5":"http://json.schemastore.org/ansible-stable-2.5","2.6":"http://json.schemastore.org/ansible-stable-2.6","2.7":"http://json.schemastore.org/ansible-stable-2.7"}},{"name":"apple-app-site-association","description":"Apple Universal Link, App Site Association","fileMatch":["apple-app-site-association"],"url":"http://json.schemastore.org/apple-app-site-association"},{"name":"appsscript.json","description":"Google Apps Script manifest file","fileMatch":["appsscript.json"],"url":"http://json.schemastore.org/appsscript"},{"name":"appsettings.json","description":"ASP.NET Core's configuration file","fileMatch":["appsettings.json","appsettings.*.json"],"url":"http://json.schemastore.org/appsettings"},{"name":"appveyor.yml","description":"AppVeyor CI configuration file","fileMatch":["appveyor.yml"],"url":"http://json.schemastore.org/appveyor"},{"name":"Avro Avsc","description":"Avro Schema Avsc file","fileMatch":[".avsc"],"url":"http://json.schemastore.org/avro-avsc"},{"name":"Azure IoT Edge deployment","description":"Azure IoT Edge deployment schema","url":"http://json.schemastore.org/azure-iot-edge-deployment-2.0","versions":{"1.0":"http://json.schemastore.org/azure-iot-edge-deployment-1.0","1.1":"http://json.schemastore.org/azure-iot-edge-deployment-2.0"}},{"name":"Azure IoT Edge deployment template","description":"Azure IoT Edge deployment template schema","fileMatch":["deployment.template.json","deployment.*.template.json"],"url":"http://json.schemastore.org/azure-iot-edge-deployment-template-2.0","versions":{"1.0":"http://json.schemastore.org/azure-iot-edge-deployment-template-1.0","1.1":"http://json.schemastore.org/azure-iot-edge-deployment-template-2.0"}},{"name":"Foxx Manifest","description":"ArangoDB Foxx service manifest file","fileMatch":["manifest.json"],"url":"http://json.schemastore.org/foxx-manifest"},{"name":".asmdef","description":"Unity 3D assembly definition file","fileMatch":["*.asmdef"],"url":"http://json.schemastore.org/asmdef"},{"name":"babelrc.json","description":"Babel configuration file","fileMatch":[".babelrc"],"url":"http://json.schemastore.org/babelrc"},{"name":".backportrc.json","description":"Backport configuration file","fileMatch":[".backportrc.json"],"url":"http://json.schemastore.org/backportrc"},{"name":"batect.yml","description":"batect configuration file","fileMatch":["batect.yml"],"url":"https://batect.charleskorn.com/configSchema.json"},{"name":".bootstraprc","description":"Webpack bootstrap-loader configuration file","fileMatch":[".bootstraprc"],"url":"http://json.schemastore.org/bootstraprc"},{"name":"bower.json","description":"Bower package description file","fileMatch":["bower.json",".bower.json"],"url":"http://json.schemastore.org/bower"},{"name":".bowerrc","description":"Bower configuration file","fileMatch":[".bowerrc"],"url":"http://json.schemastore.org/bowerrc"},{"name":"behat.yml","description":"Behat configuration file","fileMatch":["behat.yml","*.behat.yml"],"url":"http://json.schemastore.org/behat"},{"name":"bozr.suite.json","description":"Bozr test suite file","fileMatch":[".suite.json",".xsuite.json"],"url":"http://json.schemastore.org/bozr"},{"name":"Bukkit plugin.yml","description":"Schema for Minecraft Bukkit plugin description files","fileMatch":["plugin.yml"],"url":"http://json.schemastore.org/bukkit-plugin"},{"name":"Buildkite","description":"Schema for Buildkite pipeline.yml files","fileMatch":["buildkite.yml","buildkite.yaml","buildkite.json","buildkite.*.yml","buildkite.*.yaml","buildkite.*.json",".buildkite/pipeline.yml",".buildkite/pipeline.yaml",".buildkite/pipeline.json",".buildkite/pipeline.*.yml",".buildkite/pipeline.*.yaml",".buildkite/pipeline.*.json"],"url":"https://raw.githubusercontent.com/buildkite/pipeline-schema/master/schema.json"},{"name":".build.yml","description":"Sourcehut Build Manifest","fileMatch":[".build.yml"],"url":"http://json.schemastore.org/sourcehut-build"},{"name":"bundleconfig.json","description":"Schema for bundleconfig.json files","fileMatch":["bundleconfig.json"],"url":"http://json.schemastore.org/bundleconfig"},{"name":"BungeeCord plugin.yml","description":"Schema for BungeeCord plugin description files","fileMatch":["plugin.yml","bungee.yml"],"url":"http://json.schemastore.org/bungee-plugin"},{"name":"Carafe","description":"Schema for Carafe compatible JavaScript Bundles","url":"https://carafe.fm/schema/draft-01/bundle.schema.json","versions":{"draft-01":"https://carafe.fm/schema/draft-01/bundle.schema.json"}},{"name":"circleciconfig.json","description":"Schema for CircleCI 2.0 config files","fileMatch":[".circleci/config.yml"],"url":"http://json.schemastore.org/circleciconfig"},{"name":".cirrus.yml","description":"Cirrus CI configuration files","fileMatch":[".cirrus.yml"],"url":"http://json.schemastore.org/cirrus"},{"name":".clasp.json","description":"Google Apps Script CLI project file","fileMatch":[".clasp.json"],"url":"http://json.schemastore.org/clasp"},{"name":"compilerconfig.json","description":"Schema for compilerconfig.json files","fileMatch":["compilerconfig.json"],"url":"http://json.schemastore.org/compilerconfig"},{"name":"commands.json","description":"Config file for Command Task Runner","fileMatch":["commands.json"],"url":"http://json.schemastore.org/commands"},{"name":"Chrome Extension","description":"Google Chrome extension manifest file","url":"http://json.schemastore.org/chrome-manifest"},{"name":"chutzpah.json","description":"Chutzpah configuration file","fileMatch":["chutzpah.json"],"url":"http://json.schemastore.org/chutzpah"},{"name":"contentmanifest.json","description":"Visual Studio manifest injection file","fileMatch":["contentmanifest.json"],"url":"http://json.schemastore.org/vsix-manifestinjection"},{"name":"cloudbuild.json","description":"Google Cloud Build configuration file","fileMatch":["cloudbuild.json","cloudbuild.yaml","cloudbuild.yml","*.cloudbuild.json"],"url":"http://json.schemastore.org/cloudbuild"},{"name":"AWS CloudFormation","description":"AWS CloudFormation provides a common language for you to describe and provision all the infrastructure resources in your cloud environment.","fileMatch":["*.cf.json","*.cf.yml","*.cf.yaml","cloudformation.json","cloudformation.yml","cloudformation.yaml"],"url":"https://raw.githubusercontent.com/awslabs/goformation/master/schema/cloudformation.schema.json"},{"name":"AWS CloudFormation Serverless Application Model (SAM)","description":"The AWS Serverless Application Model (AWS SAM, previously known as Project Flourish) extends AWS CloudFormation to provide a simplified way of defining the Amazon API Gateway APIs, AWS Lambda functions, and Amazon DynamoDB tables needed by your serverless application.","fileMatch":["*.sam.json","*.sam.yml","*.sam.yaml","sam.json","sam.yml","sam.yaml"],"url":"https://raw.githubusercontent.com/awslabs/goformation/master/schema/sam.schema.json"},{"name":"coffeelint.json","description":"CoffeeLint configuration file","fileMatch":["coffeelint.json"],"url":"http://json.schemastore.org/coffeelint"},{"name":"composer.json","description":"PHP Composer configuration file","fileMatch":["composer.json"],"url":"http://json.schemastore.org/composer"},{"name":"component.json","description":"Web component file","fileMatch":["component.json"],"url":"http://json.schemastore.org/component"},{"name":"config.json","description":"ASP.NET project config file","fileMatch":["config.json"],"url":"http://json.schemastore.org/config"},{"name":"contribute.json","description":"A JSON schema for open-source project contribution data by Mozilla","fileMatch":["contribute.json"],"url":"http://json.schemastore.org/contribute"},{"name":"cypress.json","description":"Cypress.io test runner configuration file","fileMatch":["cypress.json"],"url":"https://raw.githubusercontent.com/cypress-io/cypress/develop/cli/schema/cypress.schema.json"},{"name":".creatomic","description":"A config for Atomic Design 4 React generator","fileMatch":[".creatomic"],"url":"http://json.schemastore.org/creatomic"},{"name":".csscomb.json","description":"A JSON schema CSS Comb's configuration file","fileMatch":[".csscomb.json"],"url":"http://json.schemastore.org/csscomb"},{"name":".csslintrc","description":"A JSON schema CSS Lint's configuration file","fileMatch":[".csslintrc"],"url":"http://json.schemastore.org/csslintrc"},{"name":"datalogic-scan2deploy-android","description":"Datalogic Scan2Deploy Android file","fileMatch":[".dla.json"],"url":"http://json.schemastore.org/datalogic-scan2deploy-android"},{"name":"datalogic-scan2deploy-ce","description":"Datalogic Scan2Deploy CE file","fileMatch":[".dlc.json"],"url":"http://json.schemastore.org/datalogic-scan2deploy-ce"},{"name":"debugsettings.json","description":"A JSON schema for the ASP.NET DebugSettings.json files","fileMatch":["debugsettings.json"],"url":"http://json.schemastore.org/debugsettings"},{"name":"docfx.json","description":"A JSON schema for DocFx configuraton files","fileMatch":["docfx.json"],"url":"http://json.schemastore.org/docfx","versions":{"2.8.0":"http://json.schemastore.org/docfx-2.8.0"}},{"name":"Dolittle Artifacts","description":"A JSON schema for a Dolittle bounded context's artifacts","fileMatch":[".dolittle/artifacts.json"],"url":"https://raw.githubusercontent.com/dolittle/DotNET.SDK/master/Schemas/Artifacts.Configuration/artifacts.json"},{"name":"Dolittle Bounded Context Configuration","description":"A JSON schema for Dolittle application's bounded context configuration","fileMatch":["bounded-context.json"],"url":"https://raw.githubusercontent.com/dolittle/Runtime/master/Schemas/Applications.Configuration/bounded-context.json"},{"name":"Dolittle Event Horizons Configuration","description":"A JSON schema for a Dolittle bounded context's event horizon configurations","fileMatch":[".dolittle/event-horizons.json"],"url":"https://raw.githubusercontent.com/dolittle/Runtime/master/Schemas/Events/event-horizons.json"},{"name":"Dolittle Resources Configuration","description":"A JSON schema for a Dolittle bounded context's resource configurations","fileMatch":[".dolittle/resources.json"],"url":"https://raw.githubusercontent.com/dolittle/DotNET.Fundamentals/master/Schemas/ResourceTypes.Configuration/resources.json"},{"name":"Dolittle Server Configuration","description":"A JSON schema for a Dolittle bounded context's event horizon's interaction server configuration","fileMatch":[".dolittle/server.json"],"url":"https://raw.githubusercontent.com/dolittle/Runtime/master/Schemas/Server/server.json"},{"name":"Dolittle Tenants Configuration","description":"A JSON schema for a Dolittle bounded context's tenant configuration","fileMatch":[".dolittle/tenants.json"],"url":"https://raw.githubusercontent.com/dolittle/Runtime/master/Schemas/Tenancy/tenants.json"},{"name":"Dolittle Tenant Map Configuration","description":"A JSON schema for a Dolittle bounded context's tenant mapping configurations","fileMatch":[".dolittle/tenant-map.json"],"url":"https://raw.githubusercontent.com/dolittle/DotNET.Fundamentals/master/Schemas/Tenancy.Configuration/tenant-map.json"},{"name":"Dolittle Topology","description":"A JSON schema for a Dolittle bounded context's topology","fileMatch":[".dolittle/topology.json"],"url":"https://raw.githubusercontent.com/dolittle/DotNET.SDK/master/Schemas/Applications.Configuration/topology.json"},{"name":"dotnetcli.host.json","description":"JSON schema for .NET CLI template host files","fileMatch":["dotnetcli.host.json"],"url":"http://json.schemastore.org/dotnetcli.host"},{"name":"Drush site aliases","description":"JSON Schema for Drush 9 site aliases file","fileMatch":["sites/*.site.yml"],"url":"http://json.schemastore.org/drush.site.yml"},{"name":"dss-2.0.0.json","description":"Digital Signature Service Core Protocols, Elements, and Bindings Version 2.0","url":"http://json.schemastore.org/dss-2.0.0.json"},{"name":"epr-manifest.json","description":"Entry Point Regulation manifest file","fileMatch":["epr-manifest.json"],"url":"http://json.schemastore.org/epr-manifest"},{"name":"electron-builder configuration file.","description":"JSON schema for electron-build configuration file.","fileMatch":["electron-builder.json"],"url":"http://json.schemastore.org/electron-builder"},{"name":".eslintrc","description":"JSON schema for ESLint configuration files","fileMatch":[".eslintrc",".eslintrc.json",".eslintrc.yml",".eslintrc.yaml"],"url":"http://json.schemastore.org/eslintrc"},{"name":"function.json","description":"JSON schema for Azure Functions function.json files","fileMatch":["function.json"],"url":"http://json.schemastore.org/function"},{"name":"geojson.json","description":"GeoJSON format for representing geographic data.","url":"http://json.schemastore.org/geojson"},{"name":"gitlab-ci","description":"JSON schema for configuring Gitlab CI","fileMatch":[".gitlab-ci.yml"],"url":"http://json.schemastore.org/gitlab-ci"},{"name":"global.json","description":"ASP.NET global configuration file","fileMatch":["global.json"],"url":"http://json.schemastore.org/global"},{"name":"Grunt copy task","description":"Grunt copy task configuration file","fileMatch":["copy.json"],"url":"http://json.schemastore.org/grunt-copy-task"},{"name":"Grunt clean task","description":"Grunt clean task configuration file","fileMatch":["clean.json"],"url":"http://json.schemastore.org/grunt-clean-task"},{"name":"Grunt cssmin task","description":"Grunt cssmin task configuration file","fileMatch":["cssmin.json"],"url":"http://json.schemastore.org/grunt-cssmin-task"},{"name":"Grunt JSHint task","description":"Grunt JSHint task configuration file","fileMatch":["jshint.json"],"url":"http://json.schemastore.org/grunt-jshint-task"},{"name":"Grunt Watch task","description":"Grunt Watch task configuration file","fileMatch":["watch.json"],"url":"http://json.schemastore.org/grunt-watch-task"},{"name":"Grunt base task","description":"Schema for standard Grunt tasks","fileMatch":["grunt/*.json","*-tasks.json"],"url":"http://json.schemastore.org/grunt-task"},{"name":"haxelib.json","description":"Haxelib manifest","fileMatch":["haxelib.json"],"url":"http://json.schemastore.org/haxelib"},{"name":"host.json","description":"JSON schema for Azure Functions host.json files","fileMatch":["host.json"],"url":"http://json.schemastore.org/host"},{"name":"host-meta.json","description":"Schema for host-meta JDR files","fileMatch":["host-meta.json"],"url":"http://json.schemastore.org/host-meta"},{"name":".htmlhintrc","description":"HTML Hint configuration file","fileMatch":[".htmlhintrc"],"url":"http://json.schemastore.org/htmlhint"},{"name":"imageoptimizer.json","description":"Schema for imageoptimizer.json files","fileMatch":["imageoptimizer.json"],"url":"http://json.schemastore.org/imageoptimizer"},{"name":"Jenkins X Pipelines","description":"Jenkins X Pipeline YAML configuration files","fileMatch":["jenkins-x*.yml"],"url":"https://jenkins-x.io/schemas/jx-schema.json"},{"name":".jsbeautifyrc","description":"js-beautify configuration file","fileMatch":[".jsbeautifyrc"],"url":"http://json.schemastore.org/jsbeautifyrc"},{"name":".jsbeautifyrc-nested","description":"js-beautify configuration file allowing nested `js`, `css`, and `html` attributes","fileMatch":[".jsbeautifyrc"],"url":"http://json.schemastore.org/jsbeautifyrc-nested"},{"name":".jscsrc","description":"JSCS configuration file","fileMatch":[".jscsrc","jscsrc.json"],"url":"http://json.schemastore.org/jscsrc"},{"name":".jshintrc","description":"JSHint configuration file","fileMatch":[".jshintrc"],"url":"http://json.schemastore.org/jshintrc"},{"name":".jsinspectrc","description":"JSInspect configuration file","fileMatch":[".jsinspectrc"],"url":"http://json.schemastore.org/jsinspectrc"},{"name":"JSON-API","description":"JSON API document","fileMatch":["*.schema.json"],"url":"http://jsonapi.org/schema"},{"name":"JSON Document Transform","description":"JSON Document Transofrm","url":"http://json.schemastore.org/jdt"},{"name":"JSON Feed","description":"JSON schema for the JSON Feed format","fileMatch":["feed.json"],"url":"http://json.schemastore.org/feed"},{"name":"*.jsonld","description":"JSON Linked Data files","fileMatch":["*.jsonld"],"url":"http://json.schemastore.org/jsonld"},{"name":"JSONPatch","description":"JSONPatch files","fileMatch":["*.patch"],"url":"http://json.schemastore.org/json-patch"},{"name":"jsconfig.json","description":"JavaScript project configuration file","fileMatch":["jsconfig.json"],"url":"http://json.schemastore.org/jsconfig"},{"name":"kustomization.yaml","description":"Kubernetes native configuration management","fileMatch":["kustomization.yaml","kustomization.yml"],"url":"http://json.schemastore.org/kustomization"},{"name":"launchsettings.json","description":"A JSON schema for the ASP.NET LaunchSettings.json files","fileMatch":["launchsettings.json"],"url":"http://json.schemastore.org/launchsettings"},{"name":"lerna.json","description":"A JSON schema for lerna.json files","fileMatch":["lerna.json"],"url":"http://json.schemastore.org/lerna"},{"name":"libman.json","description":"JSON schema for client-side library config files","fileMatch":["libman.json"],"url":"http://json.schemastore.org/libman"},{"name":"lsdlschema.json","description":"JSON schema for Linguistic Schema Definition Language files","fileMatch":["*.lsdl.yaml","*.lsdl.json"],"url":"http://json.schemastore.org/lsdlschema"},{"name":"Microsoft Band Web Tile","description":"Microsoft Band Web Tile manifest file","url":"http://json.schemastore.org/band-manifest"},{"name":"mimetypes.json","description":"JSON Schema for mime type collections","fileMatch":["mimetypes.json"],"url":"http://json.schemastore.org/mimetypes"},{"name":".modernizrrc","description":"Webpack modernizr-loader configuration file","fileMatch":[".modernizrrc"],"url":"http://json.schemastore.org/modernizrrc"},{"name":"mycode.json","description":"JSON schema for mycode.js files","fileMatch":["mycode.json"],"url":"http://json.schemastore.org/mycode"},{"name":"news in JSON","description":"A JSON Schema for ninjs by the IPTC. News and publishing information. See http://dev.iptc.org/ninjs","fileMatch":["ninjs.json"],"url":"http://json.schemastore.org/ninjs"},{"name":"nodemon.json","description":"JSON schema for nodemon.json configuration files.","url":"http://json.schemastore.org/nodemon","fileMatch":["nodemon.json"]},{"name":".npmpackagejsonlintrc","description":"Configuration file for npm-package-json-lint","fileMatch":[".npmpackagejsonlintrc","npmpackagejsonlintrc.json",".npmpackagejsonlintrc.json"],"url":"http://json.schemastore.org/npmpackagejsonlintrc"},{"name":"nuget-project.json","description":"JSON schema for NuGet project.json files.","url":"http://json.schemastore.org/nuget-project","versions":{"3.3.0":"http://json.schemastore.org/nuget-project-3.3.0"}},{"name":"nswag.json","description":"JSON schema for nswag configuration","url":"http://json.schemastore.org/nswag","fileMatch":["nswag.json"]},{"name":"ocelot.json","description":"JSON schema for the Ocelot Api Gateway.","fileMatch":["ocelot.json"],"url":"http://json.schemastore.org/ocelot"},{"name":"omnisharp.json","description":"Omnisharp Configuration file","fileMatch":["omnisharp.json"],"url":"http://json.schemastore.org/omnisharp"},{"name":"openapi.json","description":"A JSON schema for Open API documentation files","fileMatch":["openapi.json","openapi.yml","openapi.yaml"],"url":"https://raw.githubusercontent.com/kogosoftwarellc/open-api/master/packages/openapi-schema-validator/resources/openapi-3.0.json"},{"name":"openfin.json","description":"OpenFin application configuration file","url":"http://json.schemastore.org/openfin"},{"name":"package.json","description":"NPM configuration file","fileMatch":["package.json"],"url":"http://json.schemastore.org/package"},{"name":"package.manifest","description":"Umbraco package configuration file","fileMatch":["package.manifest"],"url":"http://json.schemastore.org/package.manifest","versions":{"8.0.0":"http://json.schemastore.org/package.manifest-8.0.0","7.0.0":"http://json.schemastore.org/package.manifest-7.0.0"}},{"name":"pattern.json","description":"Patternplate pattern manifest file","fileMatch":["pattern.json"],"url":"http://json.schemastore.org/pattern"},{"name":"PocketMine plugin.yml","description":"PocketMine plugin manifest file","fileMatch":["plugin.yml"],"url":"http://json.schemastore.org/pocketmine-plugin"},{"name":".phraseapp.yml","description":"PhraseApp configuration file","fileMatch":[".phraseapp.yml"],"url":"http://json.schemastore.org/phraseapp"},{"name":"prettierrc.json","description":".prettierrc configuration file","fileMatch":[".prettierrc",".prettierrc.json"],"url":"http://json.schemastore.org/prettierrc","versions":{"1.8.2":"http://json.schemastore.org/prettierrc-1.8.2"}},{"name":"prisma.yml","description":"prisma.yml service definition file","fileMatch":["prisma.yml"],"url":"http://json.schemastore.org/prisma"},{"name":"project.json","description":"ASP.NET vNext project configuration file","fileMatch":["project.json"],"url":"http://json.schemastore.org/project","versions":{"1.0.0-beta3":"http://json.schemastore.org/project-1.0.0-beta3","1.0.0-beta4":"http://json.schemastore.org/project-1.0.0-beta4","1.0.0-beta5":"http://json.schemastore.org/project-1.0.0-beta5","1.0.0-beta6":"http://json.schemastore.org/project-1.0.0-beta6","1.0.0-beta8":"http://json.schemastore.org/project-1.0.0-beta8","1.0.0-rc1":"http://json.schemastore.org/project-1.0.0-rc1","1.0.0-rc1-update1":"http://json.schemastore.org/project-1.0.0-rc1","1.0.0-rc2":"http://json.schemastore.org/project-1.0.0-rc2"}},{"name":"project-1.0.0-beta3.json","description":"ASP.NET vNext project configuration file","url":"http://json.schemastore.org/project-1.0.0-beta3"},{"name":"project-1.0.0-beta4.json","description":"ASP.NET vNext project configuration file","url":"http://json.schemastore.org/project-1.0.0-beta4"},{"name":"project-1.0.0-beta5.json","description":"ASP.NET vNext project configuration file","url":"http://json.schemastore.org/project-1.0.0-beta5"},{"name":"project-1.0.0-beta6.json","description":"ASP.NET vNext project configuration file","url":"http://json.schemastore.org/project-1.0.0-beta6"},{"name":"project-1.0.0-beta8.json","description":"ASP.NET vNext project configuration file","url":"http://json.schemastore.org/project-1.0.0-beta8"},{"name":"project-1.0.0-rc1.json","description":"ASP.NET vNext project configuration file","url":"http://json.schemastore.org/project-1.0.0-rc1"},{"name":"project-1.0.0-rc2.json","description":".NET Core project configuration file","url":"http://json.schemastore.org/project-1.0.0-rc2"},{"name":"proxies.json","description":"JSON schema for Azure Function Proxies proxies.json files","fileMatch":["proxies.json"],"url":"http://json.schemastore.org/proxies"},{"name":"pyrseas-0.8.json","description":"Pyrseas database schema versioning for Postgres databases, v0.8","fileMatch":["pyrseas-0.8.json"],"url":"http://json.schemastore.org/pyrseas-0.8"},{"name":"*.resjson","description":"Windows App localization file","fileMatch":["*.resjson"],"url":"http://json.schemastore.org/resjson"},{"name":"JSON Resume","description":"A JSON format to describe resumes","fileMatch":["resume.json"],"url":"http://json.schemastore.org/resume"},{"name":"Renovate","description":"Renovate config file (https://renovatebot.com/)","fileMatch":["renovate.json"],"url":"http://json.schemastore.org/renovate"},{"name":"sarif-1.0.0.json","description":"Static Analysis Results Interchange Format (SARIF) version 1","url":"http://json.schemastore.org/sarif-1.0.0.json"},{"name":"sarif-2.0.0.json","description":"Static Analysis Results Interchange Format (SARIF) version 2","url":"http://json.schemastore.org/sarif-2.0.0.json"},{"name":"2.0.0-csd.2.beta.2018-10-10","description":"Static Analysis Results Format (SARIF) Version 2.0.0-csd.2.beta-2018-10-10","url":"http://json.schemastore.org/2.0.0-csd.2.beta.2018-10-10.json"},{"name":"sarif-2.1.0-rtm.2","description":"Static Analysis Results Format (SARIF), Version 2.1.0-rtm.2","url":"http://json.schemastore.org/sarif-2.1.0-rtm.2.json"},{"name":"sarif-external-property-file-2.1.0-rtm.2","description":"Static Analysis Results Format (SARIF) External Property File Format, Version 2.1.0-rtm.2","url":"http://json.schemastore.org/sarif-external-property-file-2.1.0-rtm.2.json"},{"name":"sarif-2.1.0-rtm.3","description":"Static Analysis Results Format (SARIF), Version 2.1.0-rtm.3","url":"http://json.schemastore.org/sarif-2.1.0-rtm.3.json"},{"name":"sarif-external-property-file-2.1.0-rtm.3","description":"Static Analysis Results Format (SARIF) External Property File Format, Version 2.1.0-rtm.3","url":"http://json.schemastore.org/sarif-external-property-file-2.1.0-rtm.3.json"},{"name":"Schema Catalog","description":"JSON Schema catalog files compatible with SchemaStore.org","url":"http://json.schemastore.org/schema-catalog"},{"name":"schema.org - Action","description":"JSON Schema for Action as defined by schema.org","url":"http://json.schemastore.org/schema-org-action"},{"name":"schema.org - ContactPoint","description":"JSON Schema for ContactPoint as defined by schema.org","url":"http://json.schemastore.org/schema-org-contact-point"},{"name":"schema.org - Place","description":"JSON Schema for Place as defined by schema.org","url":"http://json.schemastore.org/schema-org-place"},{"name":"schema.org - Thing","description":"JSON Schema for Thing as defined by schema.org","url":"http://json.schemastore.org/schema-org-thing"},{"name":"settings.job","description":"Azure Webjob settings file","fileMatch":["settings.job"],"url":"http://json.schemastore.org/settings.job"},{"name":"skyuxconfig.json","description":"SKY UX CLI configuration file","fileMatch":["skyuxconfig.json","skyuxconfig.*.json"],"url":"https://raw.githubusercontent.com/blackbaud/skyux-builder/master/skyuxconfig-schema.json"},{"name":"snapcraft","description":"snapcraft project  (https://snapcraft.io)","fileMatch":[".snapcraft.yaml","snapcraft.yaml"],"url":"https://raw.githubusercontent.com/snapcore/snapcraft/master/schema/snapcraft.json"},{"name":"Solidarity","description":"CLI config for enforcing environment settings","fileMatch":[".solidarity",".solidarity.json"],"url":"http://json.schemastore.org/solidaritySchema"},{"name":"Source Maps v3","description":"Source Map files version 3","fileMatch":["*.map"],"url":"http://json.schemastore.org/sourcemap-v3"},{"name":".sprite files","description":"Schema for image sprite generation files","fileMatch":["*.sprite"],"url":"http://json.schemastore.org/sprite"},{"name":"StyleCop Analyzers Configuration","description":"Configuration file for StyleCop Analyzers","fileMatch":["stylecop.json"],"url":"https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json"},{"name":".stylelintrc","description":"Configuration file for stylelint","fileMatch":[".stylelintrc","stylelintrc.json",".stylelintrc.json"],"url":"http://json.schemastore.org/stylelintrc"},{"name":"Swagger API 2.0","description":"Swagger API 2.0 schema","fileMatch":["swagger.json"],"url":"http://json.schemastore.org/swagger-2.0"},{"name":"template.json","description":"JSON schema .NET template files","fileMatch":[".template.config/template.json"],"url":"http://json.schemastore.org/template"},{"name":"templatsources.json","description":"SideWaffle template source schema","fileMatch":["templatesources.json"],"url":"http://json.schemastore.org/templatesources"},{"name":"tmLanguage","description":"Language grammar description files in Textmate and compatible editors","fileMatch":["*.tmLanguage.json"],"url":"https://raw.githubusercontent.com/Septh/tmlanguage/master/tmLanguage.schema.json"},{"name":".travis.yml","description":"Travis CI configuration file","fileMatch":[".travis.yml"],"url":"http://json.schemastore.org/travis"},{"name":"tsconfig.json","description":"TypeScript compiler configuration file","fileMatch":["tsconfig.json"],"url":"http://json.schemastore.org/tsconfig"},{"name":"tsd.json","description":"JSON schema for DefinatelyTyped description manager (TSD)","fileMatch":["tsd.json"],"url":"http://json.schemastore.org/tsd"},{"name":"tsdrc.json","description":"TypeScript Definition manager (tsd) global settings file","fileMatch":[".tsdrc"],"url":"http://json.schemastore.org/tsdrc"},{"name":"ts-force-config.json","description":"Generated Typescript classes for Salesforce","fileMatch":["ts-force-config.json"],"url":"http://json.schemastore.org/ts-force-config"},{"name":"tslint.json","description":"TypeScript Lint configuration file","fileMatch":["tslint.json","tslint.yaml","tslint.yml"],"url":"http://json.schemastore.org/tslint"},{"name":"typewiz.json","description":"Typewiz configuration file","fileMatch":["typewiz.json"],"url":"http://json.schemastore.org/typewiz"},{"name":"typings.json","description":"Typings TypeScript definitions manager definition file","fileMatch":["typings.json"],"url":"http://json.schemastore.org/typings"},{"name":"typingsrc.json","description":"Typings TypeScript definitions manager configuration file","fileMatch":[".typingsrc"],"url":"http://json.schemastore.org/typingsrc"},{"name":"up.json","description":"Up configuration file","fileMatch":["up.json"],"url":"http://json.schemastore.org/up.json"},{"name":"ui5-manifest","description":"UI5/OPENUI5 descriptor file","fileMatch":[".manifest"],"url":"http://json.schemastore.org/ui5-manifest"},{"name":"vega.json","description":"Vega visualization specification file","fileMatch":["*.vg","*.vg.json"],"url":"http://json.schemastore.org/vega"},{"name":"vega-lite.json","description":"Vega-Lite visualization specification file","fileMatch":["*.vl","*.vl.json"],"url":"http://json.schemastore.org/vega-lite"},{"name":"version.json","description":"A project version descriptor file used by Nerdbank.GitVersioning","fileMatch":["version.json"],"url":"https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json"},{"name":"vsls.json","description":"Visual Studio Live Share configuration file","fileMatch":[".vsls.json"],"url":"http://json.schemastore.org/vsls"},{"name":"vs-2017.3.host.json","description":"JSON schema for Visual Studio template host file","fileMatch":["vs-2017.3.host.json"],"url":"http://json.schemastore.org/vs-2017.3.host"},{"name":"vs-nesting.json","description":"JSON schema for Visual Studio's file nesting feature","fileMatch":["*.filenesting.json",".filenesting.json"],"url":"http://json.schemastore.org/vs-nesting"},{"name":".vsconfig","description":"JSON schema for Visual Studio component configuration files","fileMatch":["*.vsconfig"],"url":"http://json.schemastore.org/vsconfig"},{"name":".vsext","description":"JSON schema for Visual Studio extension pack manifests","fileMatch":["*.vsext"],"url":"http://json.schemastore.org/vsext"},{"name":"VSIX CLI publishing","description":"JSON schema for Visual Studio extension publishing","fileMatch":["vs-publish.json"],"url":"http://json.schemastore.org/vsix-publish"},{"name":"WebExtensions","description":"JSON schema for WebExtension manifest files","fileMatch":["manifest.json"],"url":"http://json.schemastore.org/webextension"},{"name":"Web Manifest","description":"Web Application manifest file","fileMatch":["manifest.json","*.webmanifest"],"url":"http://json.schemastore.org/web-manifest"},{"name":"webjobs-list.json","description":"Azure Webjob list file","fileMatch":["webjobs-list.json"],"url":"http://json.schemastore.org/webjobs-list"},{"name":"webjobpublishsettings.json","description":"Azure Webjobs publish settings file","fileMatch":["webjobpublishsettings.json"],"url":"http://json.schemastore.org/webjob-publish-settings"},{"name":"JSON-stat 2.0","description":"JSON-stat 2.0 Schema","url":"https://json-stat.org/format/schema/2.0/"},{"name":"KSP-CKAN 1.26","description":"Metadata spec v1.26 for KSP-CKAN","fileMatch":["*.ckan"],"url":"http://json.schemastore.org/ksp-ckan"},{"name":"JSON Schema Draft 4","description":"Meta-validation schema for JSON Schema Draft 4","url":"http://json-schema.org/draft-04/schema"},{"name":"xunit.runner.json","description":"xUnit.net runner configuration file","fileMatch":["xunit.runner.json"],"url":"http://json.schemastore.org/xunit.runner.schema"},{"name":".cryproj engine-5.2","description":"A JSON schema for CRYENGINE projects (.cryproj files)","fileMatch":["*.cryproj"],"url":"http://json.schemastore.org/cryproj.52.schema"},{"name":".cryproj engine-5.3","description":"A JSON schema for CRYENGINE projects (.cryproj files)","fileMatch":["*.cryproj"],"url":"http://json.schemastore.org/cryproj.53.schema"},{"name":".cryproj engine-5.4","description":"A JSON schema for CRYENGINE projects (.cryproj files)","fileMatch":["*.cryproj"],"url":"http://json.schemastore.org/cryproj.54.schema"},{"name":".cryproj engine-5.5","description":"A JSON schema for CRYENGINE projects (.cryproj files)","fileMatch":["*.cryproj"],"url":"http://json.schemastore.org/cryproj.55.schema"},{"name":".cryproj engine-dev","description":"A JSON schema for CRYENGINE projects (.cryproj files)","fileMatch":["*.cryproj"],"url":"http://json.schemastore.org/cryproj.dev.schema"},{"name":".cryproj (generic)","description":"A JSON schema for CRYENGINE projects (.cryproj files)","fileMatch":["*.cryproj"],"url":"http://json.schemastore.org/cryproj"},{"name":"typedoc.json","description":"A JSON schema for the Typedoc configuration file","fileMatch":["typedoc.json"],"url":"http://json.schemastore.org/typedoc"},{"name":"huskyrc","description":"Husky can prevent bad `git commit`, `git push` and more 🐶 woof!","fileMatch":[".huskyrc",".huskyrc.json"],"url":"http://json.schemastore.org/huskyrc"},{"name":".lintstagedrc","description":"JSON schema for lint-staged config","fileMatch":[".lintstagedrc",".lintstagedrc.json"],"url":"http://json.schemastore.org/lintstagedrc.schema"},{"name":"mta","description":"A JSON schema for MTA projects (mta.yaml files)","fileMatch":["mta.yaml","mta.yml"],"url":"http://json.schemastore.org/mta-3.1"},{"name":"mtad.yaml","description":"A JSON schema for MTA deployment descriptors v3.3","fileMatch":["mtad.yaml","mtad.yml"],"url":"http://json.schemastore.org/mtad"},{"name":".mtaext","description":"A JSON schema for MTA extension descriptors v3.3","fileMatch":["*.mtaext"],"url":"http://json.schemastore.org/mtaext"}]};
+
+/***/ }),
+/* 31 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+Object.defineProperty(exports, "__esModule", { value: true });
+/**
+ * Return a hash value for an object.
+ */
+function hash(obj, hashVal = 0) {
+    switch (typeof obj) {
+        case 'object':
+            if (obj === null) {
+                return numberHash(349, hashVal);
+            }
+            else if (Array.isArray(obj)) {
+                return arrayHash(obj, hashVal);
+            }
+            return objectHash(obj, hashVal);
+        case 'string':
+            return stringHash(obj, hashVal);
+        case 'boolean':
+            return booleanHash(obj, hashVal);
+        case 'number':
+            return numberHash(obj, hashVal);
+        case 'undefined':
+            return numberHash(obj, 937);
+        default:
+            return numberHash(obj, 617);
+    }
+}
+exports.hash = hash;
+function numberHash(val, initialHashVal) {
+    return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32
+}
+function booleanHash(b, initialHashVal) {
+    return numberHash(b ? 433 : 863, initialHashVal);
+}
+function stringHash(s, hashVal) {
+    hashVal = numberHash(149417, hashVal);
+    for (let i = 0, length = s.length; i < length; i++) {
+        hashVal = numberHash(s.charCodeAt(i), hashVal);
+    }
+    return hashVal;
+}
+function arrayHash(arr, initialHashVal) {
+    initialHashVal = numberHash(104579, initialHashVal);
+    return arr.reduce((hashVal, item) => hash(item, hashVal), initialHashVal);
+}
+function objectHash(obj, initialHashVal) {
+    initialHashVal = numberHash(181387, initialHashVal);
+    return Object.keys(obj).sort().reduce((hashVal, key) => {
+        hashVal = stringHash(key, hashVal);
+        return hash(obj[key], hashVal);
+    }, initialHashVal);
+}
+
+
+/***/ }),
+/* 32 */
+/***/ (function(module, exports) {
+
+module.exports = require("coc.nvim");
+
+/***/ })
+/******/ ])));
\ No newline at end of file