From 4e2fb5d761105392afa91c37ef19655cccfe5b85 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Fri, 12 Feb 2021 11:24:32 +0100
Subject: [PATCH 01/14] first beta notebook

---
 myTests/test.moosebook         |    1 +
 package-lock.json              | 5538 ++++++++++++++++++++++++++++----
 package.json                   |   35 +-
 src/debugFactory.ts            |    2 -
 src/extension.ts               |    5 +
 src/moosebook.ts               |   44 +
 src/moosebookProvider.ts       |  186 ++
 src/types/vscode.proposed.d.ts | 2663 +++++++++++++++
 8 files changed, 7774 insertions(+), 700 deletions(-)
 create mode 100644 myTests/test.moosebook
 create mode 100644 src/moosebook.ts
 create mode 100644 src/moosebookProvider.ts
 create mode 100644 src/types/vscode.proposed.d.ts

diff --git a/myTests/test.moosebook b/myTests/test.moosebook
new file mode 100644
index 0000000..4253b42
--- /dev/null
+++ b/myTests/test.moosebook
@@ -0,0 +1 @@
+[{"kind":1,"language":"markdown","value":"# Test Moose"},{"kind":1,"language":"markdown","value":"## Utiliser Pharo\r\n\r\n### Faire des calculs"},{"kind":2,"language":"pharo","value":"1 + 1"},{"kind":1,"language":"markdown","value":"### Des calculs compliqués"},{"kind":2,"language":"pharo","value":"13 factorial"},{"kind":1,"language":"markdown","value":"### Et des String "},{"kind":2,"language":"pharo","value":"hello := 'hello'.\r\nhello := hello , ' '.\r\nhello := hello, 'world'"}]
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index bc5cb6b..f87379c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,16 +1,4099 @@
 {
 	"name": "pharo-language-server",
-	"version": "0.0.5",
-	"lockfileVersion": 1,
+	"version": "0.0.7",
+	"lockfileVersion": 2,
 	"requires": true,
+	"packages": {
+		"": {
+			"name": "pharo-language-server",
+			"version": "0.0.7",
+			"license": "MIT",
+			"dependencies": {
+				"vscode-debugadapter": "^1.43.0",
+				"vscode-dts": "^0.3.1",
+				"vscode-languageclient": "^6.1.3",
+				"vscode-languageserver-protocol": "3.15.3"
+			},
+			"devDependencies": {
+				"@types/mocha": "^8.0.3",
+				"@types/node": "^12.12.0",
+				"@types/vscode": "1.49.0",
+				"@typescript-eslint/parser": "^2.3.0",
+				"eslint": "^6.4.0",
+				"mocha": "^8.1.1",
+				"ts-loader": "^8.0.12",
+				"typescript": "^4.0.2",
+				"vscode-debugadapter-testsupport": "^1.43.0",
+				"vscode-test": "^1.3.0",
+				"webpack": "^5.11.1",
+				"webpack-cli": "^4.3.0"
+			},
+			"engines": {
+				"vscode": "^1.49.0"
+			}
+		},
+		"node_modules/@babel/code-frame": {
+			"version": "7.12.13",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+			"integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+			"dev": true,
+			"dependencies": {
+				"@babel/highlight": "^7.12.13"
+			}
+		},
+		"node_modules/@babel/helper-validator-identifier": {
+			"version": "7.12.11",
+			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
+			"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==",
+			"dev": true
+		},
+		"node_modules/@babel/highlight": {
+			"version": "7.12.13",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
+			"integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
+			"dev": true,
+			"dependencies": {
+				"@babel/helper-validator-identifier": "^7.12.11",
+				"chalk": "^2.0.0",
+				"js-tokens": "^4.0.0"
+			}
+		},
+		"node_modules/@discoveryjs/json-ext": {
+			"version": "0.5.2",
+			"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
+			"integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
+			"dev": true,
+			"engines": {
+				"node": ">=10.0.0"
+			}
+		},
+		"node_modules/@tootallnate/once": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+			"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+			"dev": true,
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/@types/eslint": {
+			"version": "7.2.6",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
+			"integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==",
+			"dev": true,
+			"dependencies": {
+				"@types/estree": "*",
+				"@types/json-schema": "*"
+			}
+		},
+		"node_modules/@types/eslint-scope": {
+			"version": "3.7.0",
+			"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
+			"integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
+			"dev": true,
+			"dependencies": {
+				"@types/eslint": "*",
+				"@types/estree": "*"
+			}
+		},
+		"node_modules/@types/eslint-visitor-keys": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+			"integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
+			"dev": true
+		},
+		"node_modules/@types/estree": {
+			"version": "0.0.46",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
+			"integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
+			"dev": true
+		},
+		"node_modules/@types/json-schema": {
+			"version": "7.0.7",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
+			"integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
+			"dev": true
+		},
+		"node_modules/@types/mocha": {
+			"version": "8.2.0",
+			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.0.tgz",
+			"integrity": "sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==",
+			"dev": true
+		},
+		"node_modules/@types/node": {
+			"version": "12.19.16",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz",
+			"integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==",
+			"dev": true
+		},
+		"node_modules/@types/vscode": {
+			"version": "1.49.0",
+			"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.49.0.tgz",
+			"integrity": "sha512-wfNQmLmm1VdMBr6iuNdprWmC1YdrgZ9dQzadv+l2eSjJlElOdJw8OTm4RU4oGTBcfvG6RZI2jOcppkdSS18mZw==",
+			"dev": true
+		},
+		"node_modules/@typescript-eslint/experimental-utils": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
+			"integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==",
+			"dev": true,
+			"dependencies": {
+				"@types/json-schema": "^7.0.3",
+				"@typescript-eslint/typescript-estree": "2.34.0",
+				"eslint-scope": "^5.0.0",
+				"eslint-utils": "^2.0.0"
+			},
+			"engines": {
+				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "*"
+			}
+		},
+		"node_modules/@typescript-eslint/parser": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
+			"integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
+			"dev": true,
+			"dependencies": {
+				"@types/eslint-visitor-keys": "^1.0.0",
+				"@typescript-eslint/experimental-utils": "2.34.0",
+				"@typescript-eslint/typescript-estree": "2.34.0",
+				"eslint-visitor-keys": "^1.1.0"
+			},
+			"engines": {
+				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"eslint": "^5.0.0 || ^6.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@typescript-eslint/typescript-estree": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz",
+			"integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==",
+			"dev": true,
+			"dependencies": {
+				"debug": "^4.1.1",
+				"eslint-visitor-keys": "^1.1.0",
+				"glob": "^7.1.6",
+				"is-glob": "^4.0.1",
+				"lodash": "^4.17.15",
+				"semver": "^7.3.2",
+				"tsutils": "^3.17.1"
+			},
+			"engines": {
+				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@ungap/promise-all-settled": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+			"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
+			"dev": true
+		},
+		"node_modules/@webassemblyjs/ast": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
+			"integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/helper-numbers": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0"
+			}
+		},
+		"node_modules/@webassemblyjs/floating-point-hex-parser": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
+			"integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
+			"dev": true
+		},
+		"node_modules/@webassemblyjs/helper-api-error": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
+			"integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
+			"dev": true
+		},
+		"node_modules/@webassemblyjs/helper-buffer": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
+			"integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
+			"dev": true
+		},
+		"node_modules/@webassemblyjs/helper-numbers": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
+			"integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/floating-point-hex-parser": "1.11.0",
+				"@webassemblyjs/helper-api-error": "1.11.0",
+				"@xtuc/long": "4.2.2"
+			}
+		},
+		"node_modules/@webassemblyjs/helper-wasm-bytecode": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
+			"integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
+			"dev": true
+		},
+		"node_modules/@webassemblyjs/helper-wasm-section": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
+			"integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-buffer": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/wasm-gen": "1.11.0"
+			}
+		},
+		"node_modules/@webassemblyjs/ieee754": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
+			"integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
+			"dev": true,
+			"dependencies": {
+				"@xtuc/ieee754": "^1.2.0"
+			}
+		},
+		"node_modules/@webassemblyjs/leb128": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
+			"integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
+			"dev": true,
+			"dependencies": {
+				"@xtuc/long": "4.2.2"
+			}
+		},
+		"node_modules/@webassemblyjs/utf8": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
+			"integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
+			"dev": true
+		},
+		"node_modules/@webassemblyjs/wasm-edit": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
+			"integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-buffer": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/helper-wasm-section": "1.11.0",
+				"@webassemblyjs/wasm-gen": "1.11.0",
+				"@webassemblyjs/wasm-opt": "1.11.0",
+				"@webassemblyjs/wasm-parser": "1.11.0",
+				"@webassemblyjs/wast-printer": "1.11.0"
+			}
+		},
+		"node_modules/@webassemblyjs/wasm-gen": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
+			"integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/ieee754": "1.11.0",
+				"@webassemblyjs/leb128": "1.11.0",
+				"@webassemblyjs/utf8": "1.11.0"
+			}
+		},
+		"node_modules/@webassemblyjs/wasm-opt": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
+			"integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-buffer": "1.11.0",
+				"@webassemblyjs/wasm-gen": "1.11.0",
+				"@webassemblyjs/wasm-parser": "1.11.0"
+			}
+		},
+		"node_modules/@webassemblyjs/wasm-parser": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
+			"integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-api-error": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/ieee754": "1.11.0",
+				"@webassemblyjs/leb128": "1.11.0",
+				"@webassemblyjs/utf8": "1.11.0"
+			}
+		},
+		"node_modules/@webassemblyjs/wast-printer": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
+			"integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
+			"dev": true,
+			"dependencies": {
+				"@webassemblyjs/ast": "1.11.0",
+				"@xtuc/long": "4.2.2"
+			}
+		},
+		"node_modules/@webpack-cli/configtest": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz",
+			"integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==",
+			"dev": true,
+			"peerDependencies": {
+				"webpack": "4.x.x || 5.x.x",
+				"webpack-cli": "4.x.x"
+			}
+		},
+		"node_modules/@webpack-cli/info": {
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz",
+			"integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==",
+			"dev": true,
+			"dependencies": {
+				"envinfo": "^7.7.3"
+			},
+			"peerDependencies": {
+				"webpack-cli": "4.x.x"
+			}
+		},
+		"node_modules/@webpack-cli/serve": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz",
+			"integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==",
+			"dev": true,
+			"peerDependencies": {
+				"webpack-cli": "4.x.x"
+			},
+			"peerDependenciesMeta": {
+				"webpack-dev-server": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/@xtuc/ieee754": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+			"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+			"dev": true
+		},
+		"node_modules/@xtuc/long": {
+			"version": "4.2.2",
+			"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+			"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+			"dev": true
+		},
+		"node_modules/acorn": {
+			"version": "7.4.1",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+			"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+			"dev": true,
+			"bin": {
+				"acorn": "bin/acorn"
+			},
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/acorn-jsx": {
+			"version": "5.3.1",
+			"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
+			"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
+			"dev": true,
+			"peerDependencies": {
+				"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+			}
+		},
+		"node_modules/agent-base": {
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+			"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+			"dev": true,
+			"dependencies": {
+				"debug": "4"
+			},
+			"engines": {
+				"node": ">= 6.0.0"
+			}
+		},
+		"node_modules/ajv": {
+			"version": "6.12.6",
+			"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+			"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+			"dev": true,
+			"dependencies": {
+				"fast-deep-equal": "^3.1.1",
+				"fast-json-stable-stringify": "^2.0.0",
+				"json-schema-traverse": "^0.4.1",
+				"uri-js": "^4.2.2"
+			},
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/epoberezkin"
+			}
+		},
+		"node_modules/ajv-keywords": {
+			"version": "3.5.2",
+			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+			"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+			"dev": true,
+			"peerDependencies": {
+				"ajv": "^6.9.1"
+			}
+		},
+		"node_modules/ansi-colors": {
+			"version": "4.1.1",
+			"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+			"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/ansi-escapes": {
+			"version": "4.3.1",
+			"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
+			"integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+			"dev": true,
+			"dependencies": {
+				"type-fest": "^0.11.0"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/ansi-escapes/node_modules/type-fest": {
+			"version": "0.11.0",
+			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
+			"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/ansi-regex": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+			"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/ansi-styles": {
+			"version": "3.2.1",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+			"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+			"dev": true,
+			"dependencies": {
+				"color-convert": "^1.9.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/anymatch": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+			"integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+			"dev": true,
+			"dependencies": {
+				"normalize-path": "^3.0.0",
+				"picomatch": "^2.0.4"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/argparse": {
+			"version": "1.0.10",
+			"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+			"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+			"dev": true,
+			"dependencies": {
+				"sprintf-js": "~1.0.2"
+			}
+		},
+		"node_modules/astral-regex": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+			"integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/balanced-match": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+			"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+		},
+		"node_modules/big-integer": {
+			"version": "1.6.48",
+			"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
+			"integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.6"
+			}
+		},
+		"node_modules/big.js": {
+			"version": "5.2.2",
+			"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+			"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+			"dev": true,
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/binary": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+			"integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+			"dev": true,
+			"dependencies": {
+				"buffers": "~0.1.1",
+				"chainsaw": "~0.1.0"
+			}
+		},
+		"node_modules/binary-extensions": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+			"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/bluebird": {
+			"version": "3.4.7",
+			"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+			"integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=",
+			"dev": true
+		},
+		"node_modules/brace-expansion": {
+			"version": "1.1.11",
+			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+			"dependencies": {
+				"balanced-match": "^1.0.0",
+				"concat-map": "0.0.1"
+			}
+		},
+		"node_modules/braces": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+			"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+			"dev": true,
+			"dependencies": {
+				"fill-range": "^7.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/browser-stdout": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+			"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+			"dev": true
+		},
+		"node_modules/browserslist": {
+			"version": "4.16.3",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
+			"integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
+			"dev": true,
+			"dependencies": {
+				"caniuse-lite": "^1.0.30001181",
+				"colorette": "^1.2.1",
+				"electron-to-chromium": "^1.3.649",
+				"escalade": "^3.1.1",
+				"node-releases": "^1.1.70"
+			},
+			"bin": {
+				"browserslist": "cli.js"
+			},
+			"engines": {
+				"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/browserslist"
+			}
+		},
+		"node_modules/buffer-from": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+			"dev": true
+		},
+		"node_modules/buffer-indexof-polyfill": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+			"integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/buffers": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+			"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.2.0"
+			}
+		},
+		"node_modules/callsites": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+			"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/camelcase": {
+			"version": "6.2.0",
+			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+			"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/caniuse-lite": {
+			"version": "1.0.30001185",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
+			"integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
+			"dev": true
+		},
+		"node_modules/chainsaw": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+			"integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+			"dev": true,
+			"dependencies": {
+				"traverse": ">=0.3.0 <0.4"
+			}
+		},
+		"node_modules/chalk": {
+			"version": "2.4.2",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+			"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^3.2.1",
+				"escape-string-regexp": "^1.0.5",
+				"supports-color": "^5.3.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/chardet": {
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+			"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+			"dev": true
+		},
+		"node_modules/chokidar": {
+			"version": "3.5.1",
+			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+			"integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+			"dev": true,
+			"dependencies": {
+				"anymatch": "~3.1.1",
+				"braces": "~3.0.2",
+				"fsevents": "~2.3.1",
+				"glob-parent": "~5.1.0",
+				"is-binary-path": "~2.1.0",
+				"is-glob": "~4.0.1",
+				"normalize-path": "~3.0.0",
+				"readdirp": "~3.5.0"
+			},
+			"engines": {
+				"node": ">= 8.10.0"
+			},
+			"optionalDependencies": {
+				"fsevents": "~2.3.1"
+			}
+		},
+		"node_modules/chrome-trace-event": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+			"integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+			"dev": true,
+			"dependencies": {
+				"tslib": "^1.9.0"
+			},
+			"engines": {
+				"node": ">=6.0"
+			}
+		},
+		"node_modules/cli-cursor": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+			"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+			"dev": true,
+			"dependencies": {
+				"restore-cursor": "^3.1.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/cli-width": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+			"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+			"dev": true,
+			"engines": {
+				"node": ">= 10"
+			}
+		},
+		"node_modules/cliui": {
+			"version": "7.0.4",
+			"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+			"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+			"dev": true,
+			"dependencies": {
+				"string-width": "^4.2.0",
+				"strip-ansi": "^6.0.0",
+				"wrap-ansi": "^7.0.0"
+			}
+		},
+		"node_modules/cliui/node_modules/ansi-regex": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/cliui/node_modules/strip-ansi": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/clone-deep": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+			"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+			"dev": true,
+			"dependencies": {
+				"is-plain-object": "^2.0.4",
+				"kind-of": "^6.0.2",
+				"shallow-clone": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/color-convert": {
+			"version": "1.9.3",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+			"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+			"dev": true,
+			"dependencies": {
+				"color-name": "1.1.3"
+			}
+		},
+		"node_modules/color-name": {
+			"version": "1.1.3",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+			"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+			"dev": true
+		},
+		"node_modules/colorette": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
+			"integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+			"dev": true
+		},
+		"node_modules/commander": {
+			"version": "2.20.3",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+			"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+			"dev": true
+		},
+		"node_modules/concat-map": {
+			"version": "0.0.1",
+			"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+		},
+		"node_modules/core-util-is": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+			"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+			"dev": true
+		},
+		"node_modules/cross-spawn": {
+			"version": "6.0.5",
+			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+			"integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+			"dev": true,
+			"dependencies": {
+				"nice-try": "^1.0.4",
+				"path-key": "^2.0.1",
+				"semver": "^5.5.0",
+				"shebang-command": "^1.2.0",
+				"which": "^1.2.9"
+			},
+			"engines": {
+				"node": ">=4.8"
+			}
+		},
+		"node_modules/cross-spawn/node_modules/semver": {
+			"version": "5.7.1",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+			"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+			"dev": true,
+			"bin": {
+				"semver": "bin/semver"
+			}
+		},
+		"node_modules/debug": {
+			"version": "4.3.1",
+			"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+			"integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+			"dev": true,
+			"dependencies": {
+				"ms": "2.1.2"
+			},
+			"engines": {
+				"node": ">=6.0"
+			},
+			"peerDependenciesMeta": {
+				"supports-color": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/decamelize": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+			"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/deep-is": {
+			"version": "0.1.3",
+			"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+			"integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+			"dev": true
+		},
+		"node_modules/diff": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+			"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.3.1"
+			}
+		},
+		"node_modules/doctrine": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+			"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+			"dev": true,
+			"dependencies": {
+				"esutils": "^2.0.2"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/duplexer2": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+			"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+			"dev": true,
+			"dependencies": {
+				"readable-stream": "^2.0.2"
+			}
+		},
+		"node_modules/electron-to-chromium": {
+			"version": "1.3.663",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz",
+			"integrity": "sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw==",
+			"dev": true
+		},
+		"node_modules/emoji-regex": {
+			"version": "8.0.0",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+			"dev": true
+		},
+		"node_modules/emojis-list": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+			"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+			"dev": true,
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/enhanced-resolve": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+			"integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+			"dev": true,
+			"dependencies": {
+				"graceful-fs": "^4.1.2",
+				"memory-fs": "^0.5.0",
+				"tapable": "^1.0.0"
+			},
+			"engines": {
+				"node": ">=6.9.0"
+			}
+		},
+		"node_modules/enquirer": {
+			"version": "2.3.6",
+			"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+			"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+			"dev": true,
+			"dependencies": {
+				"ansi-colors": "^4.1.1"
+			},
+			"engines": {
+				"node": ">=8.6"
+			}
+		},
+		"node_modules/envinfo": {
+			"version": "7.7.4",
+			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
+			"integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
+			"dev": true,
+			"bin": {
+				"envinfo": "dist/cli.js"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/errno": {
+			"version": "0.1.8",
+			"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
+			"integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+			"dev": true,
+			"dependencies": {
+				"prr": "~1.0.1"
+			},
+			"bin": {
+				"errno": "cli.js"
+			}
+		},
+		"node_modules/es-module-lexer": {
+			"version": "0.3.26",
+			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz",
+			"integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==",
+			"dev": true
+		},
+		"node_modules/escalade": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+			"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/escape-string-regexp": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+			"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.8.0"
+			}
+		},
+		"node_modules/eslint": {
+			"version": "6.8.0",
+			"resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
+			"integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+			"dev": true,
+			"dependencies": {
+				"@babel/code-frame": "^7.0.0",
+				"ajv": "^6.10.0",
+				"chalk": "^2.1.0",
+				"cross-spawn": "^6.0.5",
+				"debug": "^4.0.1",
+				"doctrine": "^3.0.0",
+				"eslint-scope": "^5.0.0",
+				"eslint-utils": "^1.4.3",
+				"eslint-visitor-keys": "^1.1.0",
+				"espree": "^6.1.2",
+				"esquery": "^1.0.1",
+				"esutils": "^2.0.2",
+				"file-entry-cache": "^5.0.1",
+				"functional-red-black-tree": "^1.0.1",
+				"glob-parent": "^5.0.0",
+				"globals": "^12.1.0",
+				"ignore": "^4.0.6",
+				"import-fresh": "^3.0.0",
+				"imurmurhash": "^0.1.4",
+				"inquirer": "^7.0.0",
+				"is-glob": "^4.0.0",
+				"js-yaml": "^3.13.1",
+				"json-stable-stringify-without-jsonify": "^1.0.1",
+				"levn": "^0.3.0",
+				"lodash": "^4.17.14",
+				"minimatch": "^3.0.4",
+				"mkdirp": "^0.5.1",
+				"natural-compare": "^1.4.0",
+				"optionator": "^0.8.3",
+				"progress": "^2.0.0",
+				"regexpp": "^2.0.1",
+				"semver": "^6.1.2",
+				"strip-ansi": "^5.2.0",
+				"strip-json-comments": "^3.0.1",
+				"table": "^5.2.3",
+				"text-table": "^0.2.0",
+				"v8-compile-cache": "^2.0.3"
+			},
+			"bin": {
+				"eslint": "bin/eslint.js"
+			},
+			"engines": {
+				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+			},
+			"funding": {
+				"url": "https://opencollective.com/eslint"
+			}
+		},
+		"node_modules/eslint-scope": {
+			"version": "5.1.1",
+			"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+			"integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+			"dev": true,
+			"dependencies": {
+				"esrecurse": "^4.3.0",
+				"estraverse": "^4.1.1"
+			},
+			"engines": {
+				"node": ">=8.0.0"
+			}
+		},
+		"node_modules/eslint-utils": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+			"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+			"dev": true,
+			"dependencies": {
+				"eslint-visitor-keys": "^1.1.0"
+			},
+			"engines": {
+				"node": ">=6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
+			}
+		},
+		"node_modules/eslint-visitor-keys": {
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+			"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/eslint/node_modules/eslint-utils": {
+			"version": "1.4.3",
+			"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
+			"integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+			"dev": true,
+			"dependencies": {
+				"eslint-visitor-keys": "^1.1.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/eslint/node_modules/semver": {
+			"version": "6.3.0",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+			"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+			"dev": true,
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/espree": {
+			"version": "6.2.1",
+			"resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
+			"integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+			"dev": true,
+			"dependencies": {
+				"acorn": "^7.1.1",
+				"acorn-jsx": "^5.2.0",
+				"eslint-visitor-keys": "^1.1.0"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/esprima": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+			"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+			"dev": true,
+			"bin": {
+				"esparse": "bin/esparse.js",
+				"esvalidate": "bin/esvalidate.js"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/esquery": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+			"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+			"dev": true,
+			"dependencies": {
+				"estraverse": "^5.1.0"
+			},
+			"engines": {
+				"node": ">=0.10"
+			}
+		},
+		"node_modules/esquery/node_modules/estraverse": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+			"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/esrecurse": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+			"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+			"dev": true,
+			"dependencies": {
+				"estraverse": "^5.2.0"
+			},
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/esrecurse/node_modules/estraverse": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+			"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/estraverse": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+			"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+			"dev": true,
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
+		"node_modules/esutils": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/events": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+			"integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.8.x"
+			}
+		},
+		"node_modules/execa": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+			"integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
+			"dev": true,
+			"dependencies": {
+				"cross-spawn": "^7.0.3",
+				"get-stream": "^6.0.0",
+				"human-signals": "^2.1.0",
+				"is-stream": "^2.0.0",
+				"merge-stream": "^2.0.0",
+				"npm-run-path": "^4.0.1",
+				"onetime": "^5.1.2",
+				"signal-exit": "^3.0.3",
+				"strip-final-newline": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sindresorhus/execa?sponsor=1"
+			}
+		},
+		"node_modules/execa/node_modules/cross-spawn": {
+			"version": "7.0.3",
+			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+			"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+			"dev": true,
+			"dependencies": {
+				"path-key": "^3.1.0",
+				"shebang-command": "^2.0.0",
+				"which": "^2.0.1"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/execa/node_modules/path-key": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+			"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/execa/node_modules/shebang-command": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+			"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+			"dev": true,
+			"dependencies": {
+				"shebang-regex": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/execa/node_modules/shebang-regex": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/execa/node_modules/which": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+			"dev": true,
+			"dependencies": {
+				"isexe": "^2.0.0"
+			},
+			"bin": {
+				"node-which": "bin/node-which"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/external-editor": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+			"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+			"dev": true,
+			"dependencies": {
+				"chardet": "^0.7.0",
+				"iconv-lite": "^0.4.24",
+				"tmp": "^0.0.33"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/fast-deep-equal": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+			"dev": true
+		},
+		"node_modules/fast-json-stable-stringify": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+			"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+			"dev": true
+		},
+		"node_modules/fast-levenshtein": {
+			"version": "2.0.6",
+			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"dev": true
+		},
+		"node_modules/fastest-levenshtein": {
+			"version": "1.0.12",
+			"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
+			"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+			"dev": true
+		},
+		"node_modules/figures": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+			"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+			"dev": true,
+			"dependencies": {
+				"escape-string-regexp": "^1.0.5"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/file-entry-cache": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+			"integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+			"dev": true,
+			"dependencies": {
+				"flat-cache": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/fill-range": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+			"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+			"dev": true,
+			"dependencies": {
+				"to-regex-range": "^5.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/find-up": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+			"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+			"dev": true,
+			"dependencies": {
+				"locate-path": "^6.0.0",
+				"path-exists": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/flat": {
+			"version": "5.0.2",
+			"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+			"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+			"dev": true,
+			"bin": {
+				"flat": "cli.js"
+			}
+		},
+		"node_modules/flat-cache": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+			"integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+			"dev": true,
+			"dependencies": {
+				"flatted": "^2.0.0",
+				"rimraf": "2.6.3",
+				"write": "1.0.3"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/flatted": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+			"integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+			"dev": true
+		},
+		"node_modules/fs.realpath": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+		},
+		"node_modules/fsevents": {
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+			"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+			"dev": true,
+			"hasInstallScript": true,
+			"optional": true,
+			"os": [
+				"darwin"
+			],
+			"engines": {
+				"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+			}
+		},
+		"node_modules/fstream": {
+			"version": "1.0.12",
+			"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+			"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+			"dev": true,
+			"dependencies": {
+				"graceful-fs": "^4.1.2",
+				"inherits": "~2.0.0",
+				"mkdirp": ">=0.5 0",
+				"rimraf": "2"
+			},
+			"engines": {
+				"node": ">=0.6"
+			}
+		},
+		"node_modules/function-bind": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+			"dev": true
+		},
+		"node_modules/functional-red-black-tree": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+			"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+			"dev": true
+		},
+		"node_modules/get-caller-file": {
+			"version": "2.0.5",
+			"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+			"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+			"dev": true,
+			"engines": {
+				"node": "6.* || 8.* || >= 10.*"
+			}
+		},
+		"node_modules/get-stream": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
+			"integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/glob": {
+			"version": "7.1.6",
+			"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+			"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+			"dependencies": {
+				"fs.realpath": "^1.0.0",
+				"inflight": "^1.0.4",
+				"inherits": "2",
+				"minimatch": "^3.0.4",
+				"once": "^1.3.0",
+				"path-is-absolute": "^1.0.0"
+			},
+			"engines": {
+				"node": "*"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/glob-parent": {
+			"version": "5.1.1",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+			"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+			"dev": true,
+			"dependencies": {
+				"is-glob": "^4.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/glob-to-regexp": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+			"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+			"dev": true
+		},
+		"node_modules/globals": {
+			"version": "12.4.0",
+			"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
+			"integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+			"dev": true,
+			"dependencies": {
+				"type-fest": "^0.8.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/graceful-fs": {
+			"version": "4.2.6",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+			"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
+			"dev": true
+		},
+		"node_modules/growl": {
+			"version": "1.10.5",
+			"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+			"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+			"dev": true,
+			"engines": {
+				"node": ">=4.x"
+			}
+		},
+		"node_modules/has": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+			"dev": true,
+			"dependencies": {
+				"function-bind": "^1.1.1"
+			},
+			"engines": {
+				"node": ">= 0.4.0"
+			}
+		},
+		"node_modules/has-flag": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+			"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/he": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+			"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+			"dev": true,
+			"bin": {
+				"he": "bin/he"
+			}
+		},
+		"node_modules/http-proxy-agent": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+			"integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+			"dev": true,
+			"dependencies": {
+				"@tootallnate/once": "1",
+				"agent-base": "6",
+				"debug": "4"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/https-proxy-agent": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+			"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+			"dev": true,
+			"dependencies": {
+				"agent-base": "6",
+				"debug": "4"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/human-signals": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+			"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+			"dev": true,
+			"engines": {
+				"node": ">=10.17.0"
+			}
+		},
+		"node_modules/iconv-lite": {
+			"version": "0.4.24",
+			"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+			"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+			"dev": true,
+			"dependencies": {
+				"safer-buffer": ">= 2.1.2 < 3"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/ignore": {
+			"version": "4.0.6",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+			"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/import-fresh": {
+			"version": "3.3.0",
+			"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+			"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+			"dev": true,
+			"dependencies": {
+				"parent-module": "^1.0.0",
+				"resolve-from": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/import-local": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
+			"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+			"dev": true,
+			"dependencies": {
+				"pkg-dir": "^4.2.0",
+				"resolve-cwd": "^3.0.0"
+			},
+			"bin": {
+				"import-local-fixture": "fixtures/cli.js"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/imurmurhash": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+			"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.8.19"
+			}
+		},
+		"node_modules/inflight": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+			"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+			"dependencies": {
+				"once": "^1.3.0",
+				"wrappy": "1"
+			}
+		},
+		"node_modules/inherits": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+		},
+		"node_modules/inquirer": {
+			"version": "7.3.3",
+			"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+			"integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+			"dev": true,
+			"dependencies": {
+				"ansi-escapes": "^4.2.1",
+				"chalk": "^4.1.0",
+				"cli-cursor": "^3.1.0",
+				"cli-width": "^3.0.0",
+				"external-editor": "^3.0.3",
+				"figures": "^3.0.0",
+				"lodash": "^4.17.19",
+				"mute-stream": "0.0.8",
+				"run-async": "^2.4.0",
+				"rxjs": "^6.6.0",
+				"string-width": "^4.1.0",
+				"strip-ansi": "^6.0.0",
+				"through": "^2.3.6"
+			},
+			"engines": {
+				"node": ">=8.0.0"
+			}
+		},
+		"node_modules/inquirer/node_modules/ansi-regex": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/inquirer/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/inquirer/node_modules/chalk": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+			"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^4.1.0",
+				"supports-color": "^7.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
+		"node_modules/inquirer/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/inquirer/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true
+		},
+		"node_modules/inquirer/node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/inquirer/node_modules/strip-ansi": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/inquirer/node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/interpret": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
+			"integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.10"
+			}
+		},
+		"node_modules/is-binary-path": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+			"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+			"dev": true,
+			"dependencies": {
+				"binary-extensions": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-core-module": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
+			"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
+			"dev": true,
+			"dependencies": {
+				"has": "^1.0.3"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/is-extglob": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+			"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-fullwidth-code-point": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+			"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-glob": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+			"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+			"dev": true,
+			"dependencies": {
+				"is-extglob": "^2.1.1"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-number": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+			"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.12.0"
+			}
+		},
+		"node_modules/is-plain-obj": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+			"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/is-plain-object": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+			"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+			"dev": true,
+			"dependencies": {
+				"isobject": "^3.0.1"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/is-stream": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+			"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/isarray": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+			"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+			"dev": true
+		},
+		"node_modules/isexe": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+			"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+			"dev": true
+		},
+		"node_modules/isobject": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+			"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/jest-worker": {
+			"version": "26.6.2",
+			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
+			"integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+			"dev": true,
+			"dependencies": {
+				"@types/node": "*",
+				"merge-stream": "^2.0.0",
+				"supports-color": "^7.0.0"
+			},
+			"engines": {
+				"node": ">= 10.13.0"
+			}
+		},
+		"node_modules/jest-worker/node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/jest-worker/node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/js-tokens": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+			"dev": true
+		},
+		"node_modules/js-yaml": {
+			"version": "3.14.1",
+			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+			"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+			"dev": true,
+			"dependencies": {
+				"argparse": "^1.0.7",
+				"esprima": "^4.0.0"
+			},
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
+			}
+		},
+		"node_modules/json-parse-better-errors": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+			"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+			"dev": true
+		},
+		"node_modules/json-schema-traverse": {
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+			"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+			"dev": true
+		},
+		"node_modules/json-stable-stringify-without-jsonify": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+			"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+			"dev": true
+		},
+		"node_modules/json5": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+			"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+			"dev": true,
+			"dependencies": {
+				"minimist": "^1.2.5"
+			},
+			"bin": {
+				"json5": "lib/cli.js"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/kind-of": {
+			"version": "6.0.3",
+			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/kleur": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+			"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/levn": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+			"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+			"dev": true,
+			"dependencies": {
+				"prelude-ls": "~1.1.2",
+				"type-check": "~0.3.2"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/listenercount": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
+			"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=",
+			"dev": true
+		},
+		"node_modules/loader-runner": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+			"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.11.5"
+			}
+		},
+		"node_modules/loader-utils": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+			"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+			"dev": true,
+			"dependencies": {
+				"big.js": "^5.2.2",
+				"emojis-list": "^3.0.0",
+				"json5": "^2.1.2"
+			},
+			"engines": {
+				"node": ">=8.9.0"
+			}
+		},
+		"node_modules/locate-path": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+			"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+			"dev": true,
+			"dependencies": {
+				"p-locate": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/lodash": {
+			"version": "4.17.20",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+			"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+			"dev": true
+		},
+		"node_modules/log-symbols": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+			"integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+			"dev": true,
+			"dependencies": {
+				"chalk": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/log-symbols/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/log-symbols/node_modules/chalk": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+			"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^4.1.0",
+				"supports-color": "^7.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
+		"node_modules/log-symbols/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/log-symbols/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true
+		},
+		"node_modules/log-symbols/node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/log-symbols/node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/lru-cache": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+			"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+			"dev": true,
+			"dependencies": {
+				"yallist": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/memory-fs": {
+			"version": "0.5.0",
+			"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
+			"integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+			"dev": true,
+			"dependencies": {
+				"errno": "^0.1.3",
+				"readable-stream": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=4.3.0 <5.0.0 || >=5.10"
+			}
+		},
+		"node_modules/merge-stream": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+			"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+			"dev": true
+		},
+		"node_modules/micromatch": {
+			"version": "4.0.2",
+			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+			"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+			"dev": true,
+			"dependencies": {
+				"braces": "^3.0.1",
+				"picomatch": "^2.0.5"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/mime-db": {
+			"version": "1.45.0",
+			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
+			"integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/mime-types": {
+			"version": "2.1.28",
+			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
+			"integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+			"dev": true,
+			"dependencies": {
+				"mime-db": "1.45.0"
+			},
+			"engines": {
+				"node": ">= 0.6"
+			}
+		},
+		"node_modules/mimic-fn": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+			"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/minimatch": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+			"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+			"dependencies": {
+				"brace-expansion": "^1.1.7"
+			},
+			"engines": {
+				"node": "*"
+			}
+		},
+		"node_modules/minimist": {
+			"version": "1.2.5",
+			"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+			"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+		},
+		"node_modules/mkdirp": {
+			"version": "0.5.5",
+			"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
+			"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
+			"dependencies": {
+				"minimist": "^1.2.5"
+			},
+			"bin": {
+				"mkdirp": "bin/cmd.js"
+			}
+		},
+		"node_modules/mocha": {
+			"version": "8.3.0",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
+			"integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==",
+			"dev": true,
+			"dependencies": {
+				"@ungap/promise-all-settled": "1.1.2",
+				"ansi-colors": "4.1.1",
+				"browser-stdout": "1.3.1",
+				"chokidar": "3.5.1",
+				"debug": "4.3.1",
+				"diff": "5.0.0",
+				"escape-string-regexp": "4.0.0",
+				"find-up": "5.0.0",
+				"glob": "7.1.6",
+				"growl": "1.10.5",
+				"he": "1.2.0",
+				"js-yaml": "4.0.0",
+				"log-symbols": "4.0.0",
+				"minimatch": "3.0.4",
+				"ms": "2.1.3",
+				"nanoid": "3.1.20",
+				"serialize-javascript": "5.0.1",
+				"strip-json-comments": "3.1.1",
+				"supports-color": "8.1.1",
+				"which": "2.0.2",
+				"wide-align": "1.1.3",
+				"workerpool": "6.1.0",
+				"yargs": "16.2.0",
+				"yargs-parser": "20.2.4",
+				"yargs-unparser": "2.0.0"
+			},
+			"bin": {
+				"_mocha": "bin/_mocha",
+				"mocha": "bin/mocha"
+			},
+			"engines": {
+				"node": ">= 10.12.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/mochajs"
+			}
+		},
+		"node_modules/mocha/node_modules/argparse": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+			"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+			"dev": true
+		},
+		"node_modules/mocha/node_modules/escape-string-regexp": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+			"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/mocha/node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/mocha/node_modules/js-yaml": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
+			"integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
+			"dev": true,
+			"dependencies": {
+				"argparse": "^2.0.1"
+			},
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
+			}
+		},
+		"node_modules/mocha/node_modules/ms": {
+			"version": "2.1.3",
+			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+			"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+			"dev": true
+		},
+		"node_modules/mocha/node_modules/supports-color": {
+			"version": "8.1.1",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+			"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/supports-color?sponsor=1"
+			}
+		},
+		"node_modules/mocha/node_modules/which": {
+			"version": "2.0.2",
+			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+			"dev": true,
+			"dependencies": {
+				"isexe": "^2.0.0"
+			},
+			"bin": {
+				"node-which": "bin/node-which"
+			},
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/ms": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+			"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+			"dev": true
+		},
+		"node_modules/mute-stream": {
+			"version": "0.0.8",
+			"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+			"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+			"dev": true
+		},
+		"node_modules/nanoid": {
+			"version": "3.1.20",
+			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
+			"integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
+			"dev": true,
+			"bin": {
+				"nanoid": "bin/nanoid.cjs"
+			},
+			"engines": {
+				"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+			}
+		},
+		"node_modules/natural-compare": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+			"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+			"dev": true
+		},
+		"node_modules/neo-async": {
+			"version": "2.6.2",
+			"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+			"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+			"dev": true
+		},
+		"node_modules/nice-try": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+			"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+			"dev": true
+		},
+		"node_modules/node-releases": {
+			"version": "1.1.70",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
+			"integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
+			"dev": true
+		},
+		"node_modules/normalize-path": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/npm-run-path": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+			"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
+			"dev": true,
+			"dependencies": {
+				"path-key": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/npm-run-path/node_modules/path-key": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+			"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/once": {
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+			"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+			"dependencies": {
+				"wrappy": "1"
+			}
+		},
+		"node_modules/onetime": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+			"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+			"dev": true,
+			"dependencies": {
+				"mimic-fn": "^2.1.0"
+			},
+			"engines": {
+				"node": ">=6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/optionator": {
+			"version": "0.8.3",
+			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+			"integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+			"dev": true,
+			"dependencies": {
+				"deep-is": "~0.1.3",
+				"fast-levenshtein": "~2.0.6",
+				"levn": "~0.3.0",
+				"prelude-ls": "~1.1.2",
+				"type-check": "~0.3.2",
+				"word-wrap": "~1.2.3"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/os-tmpdir": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+			"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/p-limit": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+			"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+			"dev": true,
+			"dependencies": {
+				"yocto-queue": "^0.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/p-locate": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+			"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+			"dev": true,
+			"dependencies": {
+				"p-limit": "^3.0.2"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/p-try": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+			"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/parent-module": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+			"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+			"dev": true,
+			"dependencies": {
+				"callsites": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/path-exists": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+			"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/path-is-absolute": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+			"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/path-key": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+			"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/path-parse": {
+			"version": "1.0.6",
+			"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+			"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+			"dev": true
+		},
+		"node_modules/picomatch": {
+			"version": "2.2.2",
+			"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+			"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+			"dev": true,
+			"engines": {
+				"node": ">=8.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/jonschlinkert"
+			}
+		},
+		"node_modules/pkg-dir": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+			"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+			"dev": true,
+			"dependencies": {
+				"find-up": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/pkg-dir/node_modules/find-up": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+			"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+			"dev": true,
+			"dependencies": {
+				"locate-path": "^5.0.0",
+				"path-exists": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/pkg-dir/node_modules/locate-path": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+			"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+			"dev": true,
+			"dependencies": {
+				"p-locate": "^4.1.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/pkg-dir/node_modules/p-limit": {
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+			"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+			"dev": true,
+			"dependencies": {
+				"p-try": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/pkg-dir/node_modules/p-locate": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+			"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+			"dev": true,
+			"dependencies": {
+				"p-limit": "^2.2.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/prelude-ls": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+			"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+			"dev": true,
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/process-nextick-args": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+			"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+			"dev": true
+		},
+		"node_modules/progress": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+			"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/prompts": {
+			"version": "2.4.0",
+			"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
+			"integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+			"dependencies": {
+				"kleur": "^3.0.3",
+				"sisteransi": "^1.0.5"
+			},
+			"engines": {
+				"node": ">= 6"
+			}
+		},
+		"node_modules/prr": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+			"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
+			"dev": true
+		},
+		"node_modules/punycode": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+			"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/randombytes": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+			"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+			"dev": true,
+			"dependencies": {
+				"safe-buffer": "^5.1.0"
+			}
+		},
+		"node_modules/readable-stream": {
+			"version": "2.3.7",
+			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+			"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+			"dev": true,
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/readable-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"dev": true
+		},
+		"node_modules/readdirp": {
+			"version": "3.5.0",
+			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+			"integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+			"dev": true,
+			"dependencies": {
+				"picomatch": "^2.2.1"
+			},
+			"engines": {
+				"node": ">=8.10.0"
+			}
+		},
+		"node_modules/rechoir": {
+			"version": "0.7.0",
+			"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
+			"integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
+			"dev": true,
+			"dependencies": {
+				"resolve": "^1.9.0"
+			},
+			"engines": {
+				"node": ">= 0.10"
+			}
+		},
+		"node_modules/regexpp": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+			"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.5.0"
+			}
+		},
+		"node_modules/require-directory": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+			"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/resolve": {
+			"version": "1.20.0",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+			"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+			"dev": true,
+			"dependencies": {
+				"is-core-module": "^2.2.0",
+				"path-parse": "^1.0.6"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/ljharb"
+			}
+		},
+		"node_modules/resolve-cwd": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+			"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
+			"dev": true,
+			"dependencies": {
+				"resolve-from": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/resolve-cwd/node_modules/resolve-from": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+			"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/resolve-from": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+			"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/restore-cursor": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+			"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+			"dev": true,
+			"dependencies": {
+				"onetime": "^5.1.0",
+				"signal-exit": "^3.0.2"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/rimraf": {
+			"version": "2.6.3",
+			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+			"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+			"dev": true,
+			"dependencies": {
+				"glob": "^7.1.3"
+			},
+			"bin": {
+				"rimraf": "bin.js"
+			}
+		},
+		"node_modules/run-async": {
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+			"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.12.0"
+			}
+		},
+		"node_modules/rxjs": {
+			"version": "6.6.3",
+			"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
+			"integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
+			"dev": true,
+			"dependencies": {
+				"tslib": "^1.9.0"
+			},
+			"engines": {
+				"npm": ">=2.0.0"
+			}
+		},
+		"node_modules/safe-buffer": {
+			"version": "5.2.1",
+			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			]
+		},
+		"node_modules/safer-buffer": {
+			"version": "2.1.2",
+			"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+			"dev": true
+		},
+		"node_modules/schema-utils": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
+			"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
+			"dev": true,
+			"dependencies": {
+				"@types/json-schema": "^7.0.6",
+				"ajv": "^6.12.5",
+				"ajv-keywords": "^3.5.2"
+			},
+			"engines": {
+				"node": ">= 10.13.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/webpack"
+			}
+		},
+		"node_modules/semver": {
+			"version": "7.3.4",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+			"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+			"dev": true,
+			"dependencies": {
+				"lru-cache": "^6.0.0"
+			},
+			"bin": {
+				"semver": "bin/semver.js"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/serialize-javascript": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+			"integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+			"dev": true,
+			"dependencies": {
+				"randombytes": "^2.1.0"
+			}
+		},
+		"node_modules/setimmediate": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+			"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+			"dev": true
+		},
+		"node_modules/shallow-clone": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+			"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+			"dev": true,
+			"dependencies": {
+				"kind-of": "^6.0.2"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/shebang-command": {
+			"version": "1.2.0",
+			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+			"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+			"dev": true,
+			"dependencies": {
+				"shebang-regex": "^1.0.0"
+			},
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/shebang-regex": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+			"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/signal-exit": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+			"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+			"dev": true
+		},
+		"node_modules/sisteransi": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+			"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+		},
+		"node_modules/slice-ansi": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+			"integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^3.2.0",
+				"astral-regex": "^1.0.0",
+				"is-fullwidth-code-point": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+			"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/source-list-map": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+			"integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+			"dev": true
+		},
+		"node_modules/source-map": {
+			"version": "0.6.1",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+			"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/source-map-support": {
+			"version": "0.5.19",
+			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+			"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+			"dev": true,
+			"dependencies": {
+				"buffer-from": "^1.0.0",
+				"source-map": "^0.6.0"
+			}
+		},
+		"node_modules/sprintf-js": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+			"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+			"dev": true
+		},
+		"node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dev": true,
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
+			}
+		},
+		"node_modules/string_decoder/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+			"dev": true
+		},
+		"node_modules/string-width": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+			"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+			"dev": true,
+			"dependencies": {
+				"emoji-regex": "^8.0.0",
+				"is-fullwidth-code-point": "^3.0.0",
+				"strip-ansi": "^6.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/string-width/node_modules/ansi-regex": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/string-width/node_modules/strip-ansi": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/strip-ansi": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+			"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^4.1.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/strip-final-newline": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+			"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/strip-json-comments": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+			"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/supports-color": {
+			"version": "5.5.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+			"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/table": {
+			"version": "5.4.6",
+			"resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+			"integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+			"dev": true,
+			"dependencies": {
+				"ajv": "^6.10.2",
+				"lodash": "^4.17.14",
+				"slice-ansi": "^2.1.0",
+				"string-width": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=6.0.0"
+			}
+		},
+		"node_modules/table/node_modules/emoji-regex": {
+			"version": "7.0.3",
+			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+			"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+			"dev": true
+		},
+		"node_modules/table/node_modules/is-fullwidth-code-point": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+			"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/table/node_modules/string-width": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+			"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+			"dev": true,
+			"dependencies": {
+				"emoji-regex": "^7.0.1",
+				"is-fullwidth-code-point": "^2.0.0",
+				"strip-ansi": "^5.1.0"
+			},
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/tapable": {
+			"version": "1.1.3",
+			"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+			"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/terser": {
+			"version": "5.5.1",
+			"resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz",
+			"integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==",
+			"dev": true,
+			"dependencies": {
+				"commander": "^2.20.0",
+				"source-map": "~0.7.2",
+				"source-map-support": "~0.5.19"
+			},
+			"bin": {
+				"terser": "bin/terser"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/terser-webpack-plugin": {
+			"version": "5.1.1",
+			"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
+			"integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
+			"dev": true,
+			"dependencies": {
+				"jest-worker": "^26.6.2",
+				"p-limit": "^3.1.0",
+				"schema-utils": "^3.0.0",
+				"serialize-javascript": "^5.0.1",
+				"source-map": "^0.6.1",
+				"terser": "^5.5.1"
+			},
+			"engines": {
+				"node": ">= 10.13.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/webpack"
+			},
+			"peerDependencies": {
+				"webpack": "^5.1.0"
+			}
+		},
+		"node_modules/terser/node_modules/source-map": {
+			"version": "0.7.3",
+			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+			"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+			"dev": true,
+			"engines": {
+				"node": ">= 8"
+			}
+		},
+		"node_modules/text-table": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+			"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+			"dev": true
+		},
+		"node_modules/through": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+			"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+			"dev": true
+		},
+		"node_modules/tmp": {
+			"version": "0.0.33",
+			"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+			"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+			"dev": true,
+			"dependencies": {
+				"os-tmpdir": "~1.0.2"
+			},
+			"engines": {
+				"node": ">=0.6.0"
+			}
+		},
+		"node_modules/to-regex-range": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+			"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+			"dev": true,
+			"dependencies": {
+				"is-number": "^7.0.0"
+			},
+			"engines": {
+				"node": ">=8.0"
+			}
+		},
+		"node_modules/traverse": {
+			"version": "0.3.9",
+			"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+			"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+			"dev": true
+		},
+		"node_modules/ts-loader": {
+			"version": "8.0.17",
+			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.17.tgz",
+			"integrity": "sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w==",
+			"dev": true,
+			"dependencies": {
+				"chalk": "^4.1.0",
+				"enhanced-resolve": "^4.0.0",
+				"loader-utils": "^2.0.0",
+				"micromatch": "^4.0.0",
+				"semver": "^7.3.4"
+			},
+			"engines": {
+				"node": ">=10.0.0"
+			},
+			"peerDependencies": {
+				"typescript": "*",
+				"webpack": "*"
+			}
+		},
+		"node_modules/ts-loader/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/ts-loader/node_modules/chalk": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+			"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^4.1.0",
+				"supports-color": "^7.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
+		"node_modules/ts-loader/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/ts-loader/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true
+		},
+		"node_modules/ts-loader/node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/ts-loader/node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/tslib": {
+			"version": "1.14.1",
+			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+			"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+			"dev": true
+		},
+		"node_modules/tsutils": {
+			"version": "3.20.0",
+			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
+			"integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
+			"dev": true,
+			"dependencies": {
+				"tslib": "^1.8.1"
+			},
+			"engines": {
+				"node": ">= 6"
+			},
+			"peerDependencies": {
+				"typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+			}
+		},
+		"node_modules/type-check": {
+			"version": "0.3.2",
+			"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+			"integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+			"dev": true,
+			"dependencies": {
+				"prelude-ls": "~1.1.2"
+			},
+			"engines": {
+				"node": ">= 0.8.0"
+			}
+		},
+		"node_modules/type-fest": {
+			"version": "0.8.1",
+			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+			"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/typescript": {
+			"version": "4.1.5",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
+			"integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
+			"dev": true,
+			"bin": {
+				"tsc": "bin/tsc",
+				"tsserver": "bin/tsserver"
+			},
+			"engines": {
+				"node": ">=4.2.0"
+			}
+		},
+		"node_modules/unzipper": {
+			"version": "0.10.11",
+			"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
+			"integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
+			"dev": true,
+			"dependencies": {
+				"big-integer": "^1.6.17",
+				"binary": "~0.3.0",
+				"bluebird": "~3.4.1",
+				"buffer-indexof-polyfill": "~1.0.0",
+				"duplexer2": "~0.1.4",
+				"fstream": "^1.0.12",
+				"graceful-fs": "^4.2.2",
+				"listenercount": "~1.0.1",
+				"readable-stream": "~2.3.6",
+				"setimmediate": "~1.0.4"
+			}
+		},
+		"node_modules/uri-js": {
+			"version": "4.4.1",
+			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+			"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+			"dev": true,
+			"dependencies": {
+				"punycode": "^2.1.0"
+			}
+		},
+		"node_modules/util-deprecate": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+			"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+			"dev": true
+		},
+		"node_modules/v8-compile-cache": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
+			"integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+			"dev": true
+		},
+		"node_modules/vscode-debugadapter": {
+			"version": "1.44.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.44.0.tgz",
+			"integrity": "sha512-cOYQiDLAdq64rKP1KYcEr7NOlOcNFv13NcW6fCnknX3RR5MKveORKPjgOFFV4HMp04kJ4GtjLm1PFxcrYgg9ZQ==",
+			"dependencies": {
+				"mkdirp": "^0.5.5",
+				"vscode-debugprotocol": "1.44.0"
+			}
+		},
+		"node_modules/vscode-debugadapter-testsupport": {
+			"version": "1.44.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.44.0.tgz",
+			"integrity": "sha512-5sPAQ4/OFPBvZoyx2nPI91Zv7CCZ63CS9XrsCaR1t2awEY+hv+yjwryaWpV0AQX6lrYOCO/PehYvzmDsGLEy6A==",
+			"dev": true,
+			"dependencies": {
+				"vscode-debugprotocol": "^1.44.0"
+			}
+		},
+		"node_modules/vscode-debugprotocol": {
+			"version": "1.44.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.44.0.tgz",
+			"integrity": "sha512-qf+eBnrDyR2MpP08y1JfzJnFZGHdkk86+SRGRp0XepDGNA6n/Nann5XhtAzdGX/yaZokjTAINK313S2yYhHoPQ=="
+		},
+		"node_modules/vscode-dts": {
+			"version": "0.3.1",
+			"resolved": "https://registry.npmjs.org/vscode-dts/-/vscode-dts-0.3.1.tgz",
+			"integrity": "sha512-8XZ+M7IQV5MnPXEhHLemGOk5FRBfT7HCBEughfDhn2i6wwPXlpv4OuQQdhs6XZVmF3GFdKqt+fXOgfsNBKP+fw==",
+			"dependencies": {
+				"minimist": "^1.2.0",
+				"prompts": "^2.1.0",
+				"rimraf": "^3.0.0"
+			},
+			"bin": {
+				"vscode-dts": "index.js"
+			}
+		},
+		"node_modules/vscode-dts/node_modules/rimraf": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+			"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+			"dependencies": {
+				"glob": "^7.1.3"
+			},
+			"bin": {
+				"rimraf": "bin.js"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/vscode-jsonrpc": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz",
+			"integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==",
+			"engines": {
+				"node": ">=8.0.0 || >=10.0.0"
+			}
+		},
+		"node_modules/vscode-languageclient": {
+			"version": "6.1.4",
+			"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.4.tgz",
+			"integrity": "sha512-EUOU+bJu6axmt0RFNo3nrglQLPXMfanbYViJee3Fbn2VuQoX0ZOI4uTYhSRvYLP2vfwTP/juV62P/mksCdTZMA==",
+			"dependencies": {
+				"semver": "^6.3.0",
+				"vscode-languageserver-protocol": "3.15.3"
+			},
+			"engines": {
+				"vscode": "^1.41.0"
+			}
+		},
+		"node_modules/vscode-languageclient/node_modules/semver": {
+			"version": "6.3.0",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+			"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+			"bin": {
+				"semver": "bin/semver.js"
+			}
+		},
+		"node_modules/vscode-languageserver-protocol": {
+			"version": "3.15.3",
+			"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz",
+			"integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==",
+			"dependencies": {
+				"vscode-jsonrpc": "^5.0.1",
+				"vscode-languageserver-types": "3.15.1"
+			}
+		},
+		"node_modules/vscode-languageserver-types": {
+			"version": "3.15.1",
+			"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
+			"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ=="
+		},
+		"node_modules/vscode-test": {
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.0.tgz",
+			"integrity": "sha512-svwE/mhBBqrB77C1U7pkUKfUmxnkzg0dLGi1vEmitsleu88oNsqZEhG3ANZrL/Ia4m0CW0oYEKRw2EojpFxLlQ==",
+			"dev": true,
+			"dependencies": {
+				"http-proxy-agent": "^4.0.1",
+				"https-proxy-agent": "^5.0.0",
+				"rimraf": "^3.0.2",
+				"unzipper": "^0.10.11"
+			},
+			"engines": {
+				"node": ">=8.9.3"
+			}
+		},
+		"node_modules/vscode-test/node_modules/rimraf": {
+			"version": "3.0.2",
+			"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+			"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+			"dev": true,
+			"dependencies": {
+				"glob": "^7.1.3"
+			},
+			"bin": {
+				"rimraf": "bin.js"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/isaacs"
+			}
+		},
+		"node_modules/watchpack": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
+			"integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
+			"dev": true,
+			"dependencies": {
+				"glob-to-regexp": "^0.4.1",
+				"graceful-fs": "^4.1.2"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
+		"node_modules/webpack": {
+			"version": "5.21.2",
+			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.21.2.tgz",
+			"integrity": "sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg==",
+			"dev": true,
+			"dependencies": {
+				"@types/eslint-scope": "^3.7.0",
+				"@types/estree": "^0.0.46",
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/wasm-edit": "1.11.0",
+				"@webassemblyjs/wasm-parser": "1.11.0",
+				"acorn": "^8.0.4",
+				"browserslist": "^4.14.5",
+				"chrome-trace-event": "^1.0.2",
+				"enhanced-resolve": "^5.7.0",
+				"es-module-lexer": "^0.3.26",
+				"eslint-scope": "^5.1.1",
+				"events": "^3.2.0",
+				"glob-to-regexp": "^0.4.1",
+				"graceful-fs": "^4.2.4",
+				"json-parse-better-errors": "^1.0.2",
+				"loader-runner": "^4.2.0",
+				"mime-types": "^2.1.27",
+				"neo-async": "^2.6.2",
+				"schema-utils": "^3.0.0",
+				"tapable": "^2.1.1",
+				"terser-webpack-plugin": "^5.1.1",
+				"watchpack": "^2.0.0",
+				"webpack-sources": "^2.1.1"
+			},
+			"bin": {
+				"webpack": "bin/webpack.js"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/webpack"
+			},
+			"peerDependenciesMeta": {
+				"webpack-cli": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/webpack-cli": {
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz",
+			"integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==",
+			"dev": true,
+			"dependencies": {
+				"@discoveryjs/json-ext": "^0.5.0",
+				"@webpack-cli/configtest": "^1.0.1",
+				"@webpack-cli/info": "^1.2.2",
+				"@webpack-cli/serve": "^1.3.0",
+				"colorette": "^1.2.1",
+				"commander": "^7.0.0",
+				"enquirer": "^2.3.6",
+				"execa": "^5.0.0",
+				"fastest-levenshtein": "^1.0.12",
+				"import-local": "^3.0.2",
+				"interpret": "^2.2.0",
+				"rechoir": "^0.7.0",
+				"v8-compile-cache": "^2.2.0",
+				"webpack-merge": "^5.7.3"
+			},
+			"bin": {
+				"webpack-cli": "bin/cli.js"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			},
+			"peerDependencies": {
+				"webpack": "4.x.x || 5.x.x"
+			},
+			"peerDependenciesMeta": {
+				"@webpack-cli/generators": {
+					"optional": true
+				},
+				"@webpack-cli/init": {
+					"optional": true
+				},
+				"@webpack-cli/migrate": {
+					"optional": true
+				},
+				"webpack-bundle-analyzer": {
+					"optional": true
+				},
+				"webpack-dev-server": {
+					"optional": true
+				}
+			}
+		},
+		"node_modules/webpack-cli/node_modules/commander": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz",
+			"integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==",
+			"dev": true,
+			"engines": {
+				"node": ">= 10"
+			}
+		},
+		"node_modules/webpack-merge": {
+			"version": "5.7.3",
+			"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
+			"integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
+			"dev": true,
+			"dependencies": {
+				"clone-deep": "^4.0.1",
+				"wildcard": "^2.0.0"
+			},
+			"engines": {
+				"node": ">=10.0.0"
+			}
+		},
+		"node_modules/webpack-sources": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
+			"integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
+			"dev": true,
+			"dependencies": {
+				"source-list-map": "^2.0.1",
+				"source-map": "^0.6.1"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
+		"node_modules/webpack/node_modules/acorn": {
+			"version": "8.0.5",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz",
+			"integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==",
+			"dev": true,
+			"bin": {
+				"acorn": "bin/acorn"
+			},
+			"engines": {
+				"node": ">=0.4.0"
+			}
+		},
+		"node_modules/webpack/node_modules/enhanced-resolve": {
+			"version": "5.7.0",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
+			"integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
+			"dev": true,
+			"dependencies": {
+				"graceful-fs": "^4.2.4",
+				"tapable": "^2.2.0"
+			},
+			"engines": {
+				"node": ">=10.13.0"
+			}
+		},
+		"node_modules/webpack/node_modules/tapable": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
+			"integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
+			"dev": true,
+			"engines": {
+				"node": ">=6"
+			}
+		},
+		"node_modules/which": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+			"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+			"dev": true,
+			"dependencies": {
+				"isexe": "^2.0.0"
+			},
+			"bin": {
+				"which": "bin/which"
+			}
+		},
+		"node_modules/wide-align": {
+			"version": "1.1.3",
+			"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+			"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+			"dev": true,
+			"dependencies": {
+				"string-width": "^1.0.2 || 2"
+			}
+		},
+		"node_modules/wide-align/node_modules/ansi-regex": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+			"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/wide-align/node_modules/is-fullwidth-code-point": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+			"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+			"dev": true,
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/wide-align/node_modules/string-width": {
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+			"integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+			"dev": true,
+			"dependencies": {
+				"is-fullwidth-code-point": "^2.0.0",
+				"strip-ansi": "^4.0.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/wide-align/node_modules/strip-ansi": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+			"integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^3.0.0"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/wildcard": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+			"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+			"dev": true
+		},
+		"node_modules/word-wrap": {
+			"version": "1.2.3",
+			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+			"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=0.10.0"
+			}
+		},
+		"node_modules/workerpool": {
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
+			"integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
+			"dev": true
+		},
+		"node_modules/wrap-ansi": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+			"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^4.0.0",
+				"string-width": "^4.1.0",
+				"strip-ansi": "^6.0.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/ansi-regex": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/wrap-ansi/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true
+		},
+		"node_modules/wrap-ansi/node_modules/strip-ansi": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+			"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^5.0.0"
+			},
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/wrappy": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+		},
+		"node_modules/write": {
+			"version": "1.0.3",
+			"resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+			"integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+			"dev": true,
+			"dependencies": {
+				"mkdirp": "^0.5.1"
+			},
+			"engines": {
+				"node": ">=4"
+			}
+		},
+		"node_modules/y18n": {
+			"version": "5.0.5",
+			"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
+			"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/yallist": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+			"dev": true
+		},
+		"node_modules/yargs": {
+			"version": "16.2.0",
+			"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+			"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+			"dev": true,
+			"dependencies": {
+				"cliui": "^7.0.2",
+				"escalade": "^3.1.1",
+				"get-caller-file": "^2.0.5",
+				"require-directory": "^2.1.1",
+				"string-width": "^4.2.0",
+				"y18n": "^5.0.5",
+				"yargs-parser": "^20.2.2"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/yargs-parser": {
+			"version": "20.2.4",
+			"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+			"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/yargs-unparser": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+			"integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+			"dev": true,
+			"dependencies": {
+				"camelcase": "^6.0.0",
+				"decamelize": "^4.0.0",
+				"flat": "^5.0.2",
+				"is-plain-obj": "^2.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
+		"node_modules/yocto-queue": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+			"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		}
+	},
 	"dependencies": {
 		"@babel/code-frame": {
-			"version": "7.12.11",
-			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
-			"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+			"version": "7.12.13",
+			"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
+			"integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
 			"dev": true,
 			"requires": {
-				"@babel/highlight": "^7.10.4"
+				"@babel/highlight": "^7.12.13"
 			}
 		},
 		"@babel/helper-validator-identifier": {
@@ -20,12 +4103,12 @@
 			"dev": true
 		},
 		"@babel/highlight": {
-			"version": "7.10.4",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
-			"integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+			"version": "7.12.13",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
+			"integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
 			"dev": true,
 			"requires": {
-				"@babel/helper-validator-identifier": "^7.10.4",
+				"@babel/helper-validator-identifier": "^7.12.11",
 				"chalk": "^2.0.0",
 				"js-tokens": "^4.0.0"
 			}
@@ -36,6 +4119,12 @@
 			"integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
 			"dev": true
 		},
+		"@tootallnate/once": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+			"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+			"dev": true
+		},
 		"@types/eslint": {
 			"version": "7.2.6",
 			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
@@ -63,15 +4152,15 @@
 			"dev": true
 		},
 		"@types/estree": {
-			"version": "0.0.45",
-			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz",
-			"integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==",
+			"version": "0.0.46",
+			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
+			"integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
 			"dev": true
 		},
 		"@types/json-schema": {
-			"version": "7.0.6",
-			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
-			"integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==",
+			"version": "7.0.7",
+			"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz",
+			"integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
 			"dev": true
 		},
 		"@types/mocha": {
@@ -81,15 +4170,15 @@
 			"dev": true
 		},
 		"@types/node": {
-			"version": "12.19.11",
-			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.11.tgz",
-			"integrity": "sha512-bwVfNTFZOrGXyiQ6t4B9sZerMSShWNsGRw8tC5DY1qImUNczS9SjT4G6PnzjCnxsu5Ubj6xjL2lgwddkxtQl5w==",
+			"version": "12.19.16",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz",
+			"integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==",
 			"dev": true
 		},
 		"@types/vscode": {
-			"version": "1.43.0",
-			"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.43.0.tgz",
-			"integrity": "sha512-kIaR9qzd80rJOxePKpCB/mdy00mz8Apt2QA5Y6rdrKFn13QNFNeP3Hzmsf37Bwh/3cS7QjtAeGSK7wSqAU0sYQ==",
+			"version": "1.49.0",
+			"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.49.0.tgz",
+			"integrity": "sha512-wfNQmLmm1VdMBr6iuNdprWmC1YdrgZ9dQzadv+l2eSjJlElOdJw8OTm4RU4oGTBcfvG6RZI2jOcppkdSS18mZw==",
 			"dev": true
 		},
 		"@typescript-eslint/experimental-utils": {
@@ -129,17 +4218,6 @@
 				"lodash": "^4.17.15",
 				"semver": "^7.3.2",
 				"tsutils": "^3.17.1"
-			},
-			"dependencies": {
-				"semver": {
-					"version": "7.3.4",
-					"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-					"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
-					"dev": true,
-					"requires": {
-						"lru-cache": "^6.0.0"
-					}
-				}
 			}
 		},
 		"@ungap/promise-all-settled": {
@@ -149,194 +4227,173 @@
 			"dev": true
 		},
 		"@webassemblyjs/ast": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.1.tgz",
-			"integrity": "sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
+			"integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/helper-module-context": "1.9.1",
-				"@webassemblyjs/helper-wasm-bytecode": "1.9.1",
-				"@webassemblyjs/wast-parser": "1.9.1"
+				"@webassemblyjs/helper-numbers": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0"
 			}
 		},
 		"@webassemblyjs/floating-point-hex-parser": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz",
-			"integrity": "sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
+			"integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
 			"dev": true
 		},
 		"@webassemblyjs/helper-api-error": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz",
-			"integrity": "sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
+			"integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
 			"dev": true
 		},
 		"@webassemblyjs/helper-buffer": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz",
-			"integrity": "sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
+			"integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
 			"dev": true
 		},
-		"@webassemblyjs/helper-code-frame": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz",
-			"integrity": "sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA==",
+		"@webassemblyjs/helper-numbers": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
+			"integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/wast-printer": "1.9.1"
-			}
-		},
-		"@webassemblyjs/helper-fsm": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz",
-			"integrity": "sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw==",
-			"dev": true
-		},
-		"@webassemblyjs/helper-module-context": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz",
-			"integrity": "sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/ast": "1.9.1"
+				"@webassemblyjs/floating-point-hex-parser": "1.11.0",
+				"@webassemblyjs/helper-api-error": "1.11.0",
+				"@xtuc/long": "4.2.2"
 			}
 		},
 		"@webassemblyjs/helper-wasm-bytecode": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz",
-			"integrity": "sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
+			"integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
 			"dev": true
 		},
 		"@webassemblyjs/helper-wasm-section": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz",
-			"integrity": "sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
+			"integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/helper-buffer": "1.9.1",
-				"@webassemblyjs/helper-wasm-bytecode": "1.9.1",
-				"@webassemblyjs/wasm-gen": "1.9.1"
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-buffer": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/wasm-gen": "1.11.0"
 			}
 		},
 		"@webassemblyjs/ieee754": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz",
-			"integrity": "sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
+			"integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
 			"dev": true,
 			"requires": {
 				"@xtuc/ieee754": "^1.2.0"
 			}
 		},
 		"@webassemblyjs/leb128": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.1.tgz",
-			"integrity": "sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
+			"integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
 			"dev": true,
 			"requires": {
 				"@xtuc/long": "4.2.2"
 			}
 		},
 		"@webassemblyjs/utf8": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.1.tgz",
-			"integrity": "sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
+			"integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
 			"dev": true
 		},
 		"@webassemblyjs/wasm-edit": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz",
-			"integrity": "sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
+			"integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/helper-buffer": "1.9.1",
-				"@webassemblyjs/helper-wasm-bytecode": "1.9.1",
-				"@webassemblyjs/helper-wasm-section": "1.9.1",
-				"@webassemblyjs/wasm-gen": "1.9.1",
-				"@webassemblyjs/wasm-opt": "1.9.1",
-				"@webassemblyjs/wasm-parser": "1.9.1",
-				"@webassemblyjs/wast-printer": "1.9.1"
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-buffer": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/helper-wasm-section": "1.11.0",
+				"@webassemblyjs/wasm-gen": "1.11.0",
+				"@webassemblyjs/wasm-opt": "1.11.0",
+				"@webassemblyjs/wasm-parser": "1.11.0",
+				"@webassemblyjs/wast-printer": "1.11.0"
 			}
 		},
 		"@webassemblyjs/wasm-gen": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz",
-			"integrity": "sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
+			"integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/helper-wasm-bytecode": "1.9.1",
-				"@webassemblyjs/ieee754": "1.9.1",
-				"@webassemblyjs/leb128": "1.9.1",
-				"@webassemblyjs/utf8": "1.9.1"
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/ieee754": "1.11.0",
+				"@webassemblyjs/leb128": "1.11.0",
+				"@webassemblyjs/utf8": "1.11.0"
 			}
 		},
 		"@webassemblyjs/wasm-opt": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz",
-			"integrity": "sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
+			"integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/helper-buffer": "1.9.1",
-				"@webassemblyjs/wasm-gen": "1.9.1",
-				"@webassemblyjs/wasm-parser": "1.9.1"
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-buffer": "1.11.0",
+				"@webassemblyjs/wasm-gen": "1.11.0",
+				"@webassemblyjs/wasm-parser": "1.11.0"
 			}
 		},
 		"@webassemblyjs/wasm-parser": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz",
-			"integrity": "sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw==",
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
+			"integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/helper-api-error": "1.9.1",
-				"@webassemblyjs/helper-wasm-bytecode": "1.9.1",
-				"@webassemblyjs/ieee754": "1.9.1",
-				"@webassemblyjs/leb128": "1.9.1",
-				"@webassemblyjs/utf8": "1.9.1"
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/helper-api-error": "1.11.0",
+				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
+				"@webassemblyjs/ieee754": "1.11.0",
+				"@webassemblyjs/leb128": "1.11.0",
+				"@webassemblyjs/utf8": "1.11.0"
 			}
 		},
-		"@webassemblyjs/wast-parser": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz",
-			"integrity": "sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw==",
+		"@webassemblyjs/wast-printer": {
+			"version": "1.11.0",
+			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
+			"integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/floating-point-hex-parser": "1.9.1",
-				"@webassemblyjs/helper-api-error": "1.9.1",
-				"@webassemblyjs/helper-code-frame": "1.9.1",
-				"@webassemblyjs/helper-fsm": "1.9.1",
+				"@webassemblyjs/ast": "1.11.0",
 				"@xtuc/long": "4.2.2"
 			}
 		},
-		"@webassemblyjs/wast-printer": {
-			"version": "1.9.1",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz",
-			"integrity": "sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w==",
+		"@webpack-cli/configtest": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz",
+			"integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==",
 			"dev": true,
-			"requires": {
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/wast-parser": "1.9.1",
-				"@xtuc/long": "4.2.2"
-			}
+			"requires": {}
 		},
 		"@webpack-cli/info": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.0.tgz",
-			"integrity": "sha512-+wA8lBKopgKmN76BSGJVJby5ZXDlsrO6p/nm7fUBsHznRNWB/ozotJP7Yfcz8JPfqeG2LxwYlTH2u6D9a/0XAw==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz",
+			"integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==",
 			"dev": true,
 			"requires": {
 				"envinfo": "^7.7.3"
 			}
 		},
 		"@webpack-cli/serve": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.2.0.tgz",
-			"integrity": "sha512-jI3P7jMp/AXDSPkM+ClwRcJZbxnlvNC8bVZBmyRr4scMMZ4p5WQcXkw3Q+Hc7RQekomJlBMN+UQGliT4hhG8Vw==",
-			"dev": true
+			"version": "1.3.0",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz",
+			"integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==",
+			"dev": true,
+			"requires": {}
 		},
 		"@xtuc/ieee754": {
 			"version": "1.2.0",
@@ -360,15 +4417,16 @@
 			"version": "5.3.1",
 			"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
 			"integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
-			"dev": true
+			"dev": true,
+			"requires": {}
 		},
 		"agent-base": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
-			"integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
+			"version": "6.0.2",
+			"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+			"integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
 			"dev": true,
 			"requires": {
-				"es6-promisify": "^5.0.0"
+				"debug": "4"
 			}
 		},
 		"ajv": {
@@ -387,7 +4445,8 @@
 			"version": "3.5.2",
 			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
 			"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-			"dev": true
+			"dev": true,
+			"requires": {}
 		},
 		"ansi-colors": {
 			"version": "4.1.1",
@@ -413,9 +4472,9 @@
 			}
 		},
 		"ansi-regex": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-			"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+			"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
 			"dev": true
 		},
 		"ansi-styles": {
@@ -455,7 +4514,12 @@
 		"balanced-match": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-			"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+			"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+		},
+		"big-integer": {
+			"version": "1.6.48",
+			"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
+			"integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
 			"dev": true
 		},
 		"big.js": {
@@ -464,17 +4528,32 @@
 			"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
 			"dev": true
 		},
+		"binary": {
+			"version": "0.3.0",
+			"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
+			"integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
+			"dev": true,
+			"requires": {
+				"buffers": "~0.1.1",
+				"chainsaw": "~0.1.0"
+			}
+		},
 		"binary-extensions": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
-			"integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+			"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+			"dev": true
+		},
+		"bluebird": {
+			"version": "3.4.7",
+			"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
+			"integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=",
 			"dev": true
 		},
 		"brace-expansion": {
 			"version": "1.1.11",
 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
 			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-			"dev": true,
 			"requires": {
 				"balanced-match": "^1.0.0",
 				"concat-map": "0.0.1"
@@ -496,22 +4575,34 @@
 			"dev": true
 		},
 		"browserslist": {
-			"version": "4.16.0",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz",
-			"integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==",
+			"version": "4.16.3",
+			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
+			"integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
 			"dev": true,
 			"requires": {
-				"caniuse-lite": "^1.0.30001165",
+				"caniuse-lite": "^1.0.30001181",
 				"colorette": "^1.2.1",
-				"electron-to-chromium": "^1.3.621",
+				"electron-to-chromium": "^1.3.649",
 				"escalade": "^3.1.1",
-				"node-releases": "^1.1.67"
+				"node-releases": "^1.1.70"
 			}
 		},
-		"buffer-from": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+		"buffer-from": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+			"dev": true
+		},
+		"buffer-indexof-polyfill": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
+			"integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
+			"dev": true
+		},
+		"buffers": {
+			"version": "0.1.1",
+			"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
+			"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=",
 			"dev": true
 		},
 		"callsites": {
@@ -521,17 +4612,26 @@
 			"dev": true
 		},
 		"camelcase": {
-			"version": "5.3.1",
-			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-			"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+			"version": "6.2.0",
+			"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+			"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
 			"dev": true
 		},
 		"caniuse-lite": {
-			"version": "1.0.30001171",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001171.tgz",
-			"integrity": "sha512-5Alrh8TTYPG9IH4UkRqEBZoEToWRLvPbSQokvzSz0lii8/FOWKG4keO1HoYfPWs8IF/NH/dyNPg1cmJGvV3Zlg==",
+			"version": "1.0.30001185",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
+			"integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
 			"dev": true
 		},
+		"chainsaw": {
+			"version": "0.1.0",
+			"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
+			"integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
+			"dev": true,
+			"requires": {
+				"traverse": ">=0.3.0 <0.4"
+			}
+		},
 		"chalk": {
 			"version": "2.4.2",
 			"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -550,14 +4650,14 @@
 			"dev": true
 		},
 		"chokidar": {
-			"version": "3.4.3",
-			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
-			"integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==",
+			"version": "3.5.1",
+			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+			"integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
 			"dev": true,
 			"requires": {
 				"anymatch": "~3.1.1",
 				"braces": "~3.0.2",
-				"fsevents": "~2.1.2",
+				"fsevents": "~2.3.1",
 				"glob-parent": "~5.1.0",
 				"is-binary-path": "~2.1.0",
 				"is-glob": "~4.0.1",
@@ -590,41 +4690,44 @@
 			"dev": true
 		},
 		"cliui": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
-			"integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+			"version": "7.0.4",
+			"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+			"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
 			"dev": true,
 			"requires": {
-				"string-width": "^3.1.0",
-				"strip-ansi": "^5.2.0",
-				"wrap-ansi": "^5.1.0"
+				"string-width": "^4.2.0",
+				"strip-ansi": "^6.0.0",
+				"wrap-ansi": "^7.0.0"
 			},
 			"dependencies": {
-				"emoji-regex": {
-					"version": "7.0.3",
-					"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-					"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-					"dev": true
-				},
-				"is-fullwidth-code-point": {
-					"version": "2.0.0",
-					"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-					"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+				"ansi-regex": {
+					"version": "5.0.0",
+					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
 					"dev": true
 				},
-				"string-width": {
-					"version": "3.1.0",
-					"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-					"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+				"strip-ansi": {
+					"version": "6.0.0",
+					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+					"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
 					"dev": true,
 					"requires": {
-						"emoji-regex": "^7.0.1",
-						"is-fullwidth-code-point": "^2.0.0",
-						"strip-ansi": "^5.1.0"
+						"ansi-regex": "^5.0.0"
 					}
 				}
 			}
 		},
+		"clone-deep": {
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+			"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+			"dev": true,
+			"requires": {
+				"is-plain-object": "^2.0.4",
+				"kind-of": "^6.0.2",
+				"shallow-clone": "^3.0.0"
+			}
+		},
 		"color-convert": {
 			"version": "1.9.3",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -655,8 +4758,7 @@
 		"concat-map": {
 			"version": "0.0.1",
 			"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-			"dev": true
+			"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
 		},
 		"core-util-is": {
 			"version": "1.0.2",
@@ -695,9 +4797,9 @@
 			}
 		},
 		"decamelize": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-			"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+			"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
 			"dev": true
 		},
 		"deep-is": {
@@ -707,9 +4809,9 @@
 			"dev": true
 		},
 		"diff": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
-			"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+			"integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
 			"dev": true
 		},
 		"doctrine": {
@@ -721,10 +4823,19 @@
 				"esutils": "^2.0.2"
 			}
 		},
+		"duplexer2": {
+			"version": "0.1.4",
+			"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+			"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+			"dev": true,
+			"requires": {
+				"readable-stream": "^2.0.2"
+			}
+		},
 		"electron-to-chromium": {
-			"version": "1.3.633",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz",
-			"integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==",
+			"version": "1.3.663",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz",
+			"integrity": "sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw==",
 			"dev": true
 		},
 		"emoji-regex": {
@@ -739,19 +4850,10 @@
 			"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
 			"dev": true
 		},
-		"end-of-stream": {
-			"version": "1.4.4",
-			"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
-			"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-			"dev": true,
-			"requires": {
-				"once": "^1.4.0"
-			}
-		},
 		"enhanced-resolve": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz",
-			"integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==",
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
+			"integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
 			"dev": true,
 			"requires": {
 				"graceful-fs": "^4.1.2",
@@ -769,9 +4871,9 @@
 			}
 		},
 		"envinfo": {
-			"version": "7.7.3",
-			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz",
-			"integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==",
+			"version": "7.7.4",
+			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
+			"integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
 			"dev": true
 		},
 		"errno": {
@@ -783,21 +4885,12 @@
 				"prr": "~1.0.1"
 			}
 		},
-		"es6-promise": {
-			"version": "4.2.8",
-			"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
-			"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
+		"es-module-lexer": {
+			"version": "0.3.26",
+			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz",
+			"integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==",
 			"dev": true
 		},
-		"es6-promisify": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
-			"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
-			"dev": true,
-			"requires": {
-				"es6-promise": "^4.0.3"
-			}
-		},
 		"escalade": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -863,6 +4956,12 @@
 					"requires": {
 						"eslint-visitor-keys": "^1.1.0"
 					}
+				},
+				"semver": {
+					"version": "6.3.0",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+					"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+					"dev": true
 				}
 			}
 		},
@@ -909,9 +5008,9 @@
 			"dev": true
 		},
 		"esquery": {
-			"version": "1.3.1",
-			"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
-			"integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+			"integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
 			"dev": true,
 			"requires": {
 				"estraverse": "^5.1.0"
@@ -961,19 +5060,19 @@
 			"dev": true
 		},
 		"execa": {
-			"version": "4.1.0",
-			"resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
-			"integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+			"integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
 			"dev": true,
 			"requires": {
-				"cross-spawn": "^7.0.0",
-				"get-stream": "^5.0.0",
-				"human-signals": "^1.1.1",
+				"cross-spawn": "^7.0.3",
+				"get-stream": "^6.0.0",
+				"human-signals": "^2.1.0",
 				"is-stream": "^2.0.0",
 				"merge-stream": "^2.0.0",
-				"npm-run-path": "^4.0.0",
-				"onetime": "^5.1.0",
-				"signal-exit": "^3.0.2",
+				"npm-run-path": "^4.0.1",
+				"onetime": "^5.1.2",
+				"signal-exit": "^3.0.3",
 				"strip-final-newline": "^2.0.0"
 			},
 			"dependencies": {
@@ -1118,16 +5217,27 @@
 		"fs.realpath": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-			"dev": true
+			"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
 		},
 		"fsevents": {
-			"version": "2.1.3",
-			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
-			"integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+			"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
 			"dev": true,
 			"optional": true
 		},
+		"fstream": {
+			"version": "1.0.12",
+			"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
+			"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
+			"dev": true,
+			"requires": {
+				"graceful-fs": "^4.1.2",
+				"inherits": "~2.0.0",
+				"mkdirp": ">=0.5 0",
+				"rimraf": "2"
+			}
+		},
 		"function-bind": {
 			"version": "1.1.1",
 			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -1147,19 +5257,15 @@
 			"dev": true
 		},
 		"get-stream": {
-			"version": "5.2.0",
-			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
-			"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
-			"dev": true,
-			"requires": {
-				"pump": "^3.0.0"
-			}
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
+			"integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
+			"dev": true
 		},
 		"glob": {
 			"version": "7.1.6",
 			"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
 			"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
-			"dev": true,
 			"requires": {
 				"fs.realpath": "^1.0.0",
 				"inflight": "^1.0.4",
@@ -1194,9 +5300,9 @@
 			}
 		},
 		"graceful-fs": {
-			"version": "4.2.4",
-			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
-			"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+			"version": "4.2.6",
+			"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
+			"integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==",
 			"dev": true
 		},
 		"growl": {
@@ -1227,57 +5333,30 @@
 			"dev": true
 		},
 		"http-proxy-agent": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
-			"integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
+			"version": "4.0.1",
+			"resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+			"integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
 			"dev": true,
 			"requires": {
-				"agent-base": "4",
-				"debug": "3.1.0"
-			},
-			"dependencies": {
-				"debug": {
-					"version": "3.1.0",
-					"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
-					"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
-					"dev": true,
-					"requires": {
-						"ms": "2.0.0"
-					}
-				},
-				"ms": {
-					"version": "2.0.0",
-					"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-					"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
-					"dev": true
-				}
+				"@tootallnate/once": "1",
+				"agent-base": "6",
+				"debug": "4"
 			}
 		},
 		"https-proxy-agent": {
-			"version": "2.2.4",
-			"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
-			"integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+			"integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
 			"dev": true,
 			"requires": {
-				"agent-base": "^4.3.0",
-				"debug": "^3.1.0"
-			},
-			"dependencies": {
-				"debug": {
-					"version": "3.2.7",
-					"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-					"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-					"dev": true,
-					"requires": {
-						"ms": "^2.1.1"
-					}
-				}
+				"agent-base": "6",
+				"debug": "4"
 			}
 		},
 		"human-signals": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
-			"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+			"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
 			"dev": true
 		},
 		"iconv-lite": {
@@ -1313,54 +5392,6 @@
 			"requires": {
 				"pkg-dir": "^4.2.0",
 				"resolve-cwd": "^3.0.0"
-			},
-			"dependencies": {
-				"find-up": {
-					"version": "4.1.0",
-					"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-					"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-					"dev": true,
-					"requires": {
-						"locate-path": "^5.0.0",
-						"path-exists": "^4.0.0"
-					}
-				},
-				"locate-path": {
-					"version": "5.0.0",
-					"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-					"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-					"dev": true,
-					"requires": {
-						"p-locate": "^4.1.0"
-					}
-				},
-				"p-limit": {
-					"version": "2.3.0",
-					"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-					"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-					"dev": true,
-					"requires": {
-						"p-try": "^2.0.0"
-					}
-				},
-				"p-locate": {
-					"version": "4.1.0",
-					"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-					"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-					"dev": true,
-					"requires": {
-						"p-limit": "^2.2.0"
-					}
-				},
-				"pkg-dir": {
-					"version": "4.2.0",
-					"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-					"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-					"dev": true,
-					"requires": {
-						"find-up": "^4.0.0"
-					}
-				}
 			}
 		},
 		"imurmurhash": {
@@ -1373,7 +5404,6 @@
 			"version": "1.0.6",
 			"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
 			"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-			"dev": true,
 			"requires": {
 				"once": "^1.3.0",
 				"wrappy": "1"
@@ -1382,8 +5412,7 @@
 		"inherits": {
 			"version": "2.0.4",
 			"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-			"dev": true
+			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
 		},
 		"inquirer": {
 			"version": "7.3.3",
@@ -1406,6 +5435,12 @@
 				"through": "^2.3.6"
 			},
 			"dependencies": {
+				"ansi-regex": {
+					"version": "5.0.0",
+					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+					"dev": true
+				},
 				"ansi-styles": {
 					"version": "4.3.0",
 					"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -1523,6 +5558,15 @@
 			"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
 			"dev": true
 		},
+		"is-plain-object": {
+			"version": "2.0.4",
+			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+			"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+			"dev": true,
+			"requires": {
+				"isobject": "^3.0.1"
+			}
+		},
 		"is-stream": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
@@ -1541,6 +5585,12 @@
 			"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
 			"dev": true
 		},
+		"isobject": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+			"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+			"dev": true
+		},
 		"jest-worker": {
 			"version": "26.6.2",
 			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
@@ -1604,14 +5654,25 @@
 			"dev": true
 		},
 		"json5": {
-			"version": "1.0.1",
-			"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
-			"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+			"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
 			"dev": true,
 			"requires": {
-				"minimist": "^1.2.0"
+				"minimist": "^1.2.5"
 			}
 		},
+		"kind-of": {
+			"version": "6.0.3",
+			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+			"dev": true
+		},
+		"kleur": {
+			"version": "3.0.3",
+			"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+			"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
+		},
 		"levn": {
 			"version": "0.3.0",
 			"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -1622,21 +5683,27 @@
 				"type-check": "~0.3.2"
 			}
 		},
+		"listenercount": {
+			"version": "1.0.1",
+			"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
+			"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=",
+			"dev": true
+		},
 		"loader-runner": {
-			"version": "4.1.0",
-			"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz",
-			"integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==",
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
+			"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
 			"dev": true
 		},
 		"loader-utils": {
-			"version": "1.4.0",
-			"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
-			"integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+			"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
 			"dev": true,
 			"requires": {
 				"big.js": "^5.2.2",
 				"emojis-list": "^3.0.0",
-				"json5": "^1.0.1"
+				"json5": "^2.1.2"
 			}
 		},
 		"locate-path": {
@@ -1750,18 +5817,18 @@
 			}
 		},
 		"mime-db": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-			"integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
+			"version": "1.45.0",
+			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
+			"integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
 			"dev": true
 		},
 		"mime-types": {
-			"version": "2.1.27",
-			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-			"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
+			"version": "2.1.28",
+			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
+			"integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
 			"dev": true,
 			"requires": {
-				"mime-db": "1.44.0"
+				"mime-db": "1.45.0"
 			}
 		},
 		"mimic-fn": {
@@ -1774,7 +5841,6 @@
 			"version": "3.0.4",
 			"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
 			"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-			"dev": true,
 			"requires": {
 				"brace-expansion": "^1.1.7"
 			}
@@ -1793,46 +5859,43 @@
 			}
 		},
 		"mocha": {
-			"version": "8.2.1",
-			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz",
-			"integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==",
+			"version": "8.3.0",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
+			"integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==",
 			"dev": true,
 			"requires": {
 				"@ungap/promise-all-settled": "1.1.2",
 				"ansi-colors": "4.1.1",
 				"browser-stdout": "1.3.1",
-				"chokidar": "3.4.3",
-				"debug": "4.2.0",
-				"diff": "4.0.2",
+				"chokidar": "3.5.1",
+				"debug": "4.3.1",
+				"diff": "5.0.0",
 				"escape-string-regexp": "4.0.0",
 				"find-up": "5.0.0",
 				"glob": "7.1.6",
 				"growl": "1.10.5",
 				"he": "1.2.0",
-				"js-yaml": "3.14.0",
+				"js-yaml": "4.0.0",
 				"log-symbols": "4.0.0",
 				"minimatch": "3.0.4",
-				"ms": "2.1.2",
-				"nanoid": "3.1.12",
+				"ms": "2.1.3",
+				"nanoid": "3.1.20",
 				"serialize-javascript": "5.0.1",
 				"strip-json-comments": "3.1.1",
-				"supports-color": "7.2.0",
+				"supports-color": "8.1.1",
 				"which": "2.0.2",
 				"wide-align": "1.1.3",
-				"workerpool": "6.0.2",
-				"yargs": "13.3.2",
-				"yargs-parser": "13.1.2",
+				"workerpool": "6.1.0",
+				"yargs": "16.2.0",
+				"yargs-parser": "20.2.4",
 				"yargs-unparser": "2.0.0"
 			},
 			"dependencies": {
-				"debug": {
-					"version": "4.2.0",
-					"resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
-					"integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
-					"dev": true,
-					"requires": {
-						"ms": "2.1.2"
-					}
+				"argparse": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+					"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+					"dev": true
 				},
 				"escape-string-regexp": {
 					"version": "4.0.0",
@@ -1847,19 +5910,24 @@
 					"dev": true
 				},
 				"js-yaml": {
-					"version": "3.14.0",
-					"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
-					"integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+					"version": "4.0.0",
+					"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
+					"integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
 					"dev": true,
 					"requires": {
-						"argparse": "^1.0.7",
-						"esprima": "^4.0.0"
+						"argparse": "^2.0.1"
 					}
 				},
+				"ms": {
+					"version": "2.1.3",
+					"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+					"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+					"dev": true
+				},
 				"supports-color": {
-					"version": "7.2.0",
-					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-					"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+					"version": "8.1.1",
+					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+					"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
 					"dev": true,
 					"requires": {
 						"has-flag": "^4.0.0"
@@ -1889,9 +5957,9 @@
 			"dev": true
 		},
 		"nanoid": {
-			"version": "3.1.12",
-			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz",
-			"integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==",
+			"version": "3.1.20",
+			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
+			"integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
 			"dev": true
 		},
 		"natural-compare": {
@@ -1913,9 +5981,9 @@
 			"dev": true
 		},
 		"node-releases": {
-			"version": "1.1.67",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
-			"integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==",
+			"version": "1.1.70",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
+			"integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
 			"dev": true
 		},
 		"normalize-path": {
@@ -1945,7 +6013,6 @@
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
 			"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-			"dev": true,
 			"requires": {
 				"wrappy": "1"
 			}
@@ -2021,8 +6088,7 @@
 		"path-is-absolute": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-			"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-			"dev": true
+			"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
 		},
 		"path-key": {
 			"version": "2.0.1",
@@ -2043,12 +6109,51 @@
 			"dev": true
 		},
 		"pkg-dir": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
-			"integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+			"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
 			"dev": true,
 			"requires": {
-				"find-up": "^5.0.0"
+				"find-up": "^4.0.0"
+			},
+			"dependencies": {
+				"find-up": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+					"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+					"dev": true,
+					"requires": {
+						"locate-path": "^5.0.0",
+						"path-exists": "^4.0.0"
+					}
+				},
+				"locate-path": {
+					"version": "5.0.0",
+					"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+					"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+					"dev": true,
+					"requires": {
+						"p-locate": "^4.1.0"
+					}
+				},
+				"p-limit": {
+					"version": "2.3.0",
+					"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+					"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+					"dev": true,
+					"requires": {
+						"p-try": "^2.0.0"
+					}
+				},
+				"p-locate": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+					"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+					"dev": true,
+					"requires": {
+						"p-limit": "^2.2.0"
+					}
+				}
 			}
 		},
 		"prelude-ls": {
@@ -2069,22 +6174,21 @@
 			"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
 			"dev": true
 		},
+		"prompts": {
+			"version": "2.4.0",
+			"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
+			"integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+			"requires": {
+				"kleur": "^3.0.3",
+				"sisteransi": "^1.0.5"
+			}
+		},
 		"prr": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
 			"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
 			"dev": true
 		},
-		"pump": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-			"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
-			"dev": true,
-			"requires": {
-				"end-of-stream": "^1.1.0",
-				"once": "^1.3.1"
-			}
-		},
 		"punycode": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -2153,19 +6257,13 @@
 			"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
 			"dev": true
 		},
-		"require-main-filename": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
-			"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
-			"dev": true
-		},
 		"resolve": {
-			"version": "1.19.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
-			"integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
+			"version": "1.20.0",
+			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+			"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
 			"dev": true,
 			"requires": {
-				"is-core-module": "^2.1.0",
+				"is-core-module": "^2.2.0",
 				"path-parse": "^1.0.6"
 			}
 		},
@@ -2250,9 +6348,13 @@
 			}
 		},
 		"semver": {
-			"version": "6.3.0",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-			"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+			"version": "7.3.4",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+			"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+			"dev": true,
+			"requires": {
+				"lru-cache": "^6.0.0"
+			}
 		},
 		"serialize-javascript": {
 			"version": "5.0.1",
@@ -2263,12 +6365,21 @@
 				"randombytes": "^2.1.0"
 			}
 		},
-		"set-blocking": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-			"integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+		"setimmediate": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+			"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
 			"dev": true
 		},
+		"shallow-clone": {
+			"version": "3.0.1",
+			"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+			"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+			"dev": true,
+			"requires": {
+				"kind-of": "^6.0.2"
+			}
+		},
 		"shebang-command": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -2290,6 +6401,11 @@
 			"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
 			"dev": true
 		},
+		"sisteransi": {
+			"version": "1.0.5",
+			"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+			"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
+		},
 		"slice-ansi": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
@@ -2337,6 +6453,23 @@
 			"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
 			"dev": true
 		},
+		"string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dev": true,
+			"requires": {
+				"safe-buffer": "~5.1.0"
+			},
+			"dependencies": {
+				"safe-buffer": {
+					"version": "5.1.2",
+					"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+					"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+					"dev": true
+				}
+			}
+		},
 		"string-width": {
 			"version": "4.2.0",
 			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
@@ -2348,6 +6481,12 @@
 				"strip-ansi": "^6.0.0"
 			},
 			"dependencies": {
+				"ansi-regex": {
+					"version": "5.0.0",
+					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+					"dev": true
+				},
 				"strip-ansi": {
 					"version": "6.0.0",
 					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -2359,23 +6498,6 @@
 				}
 			}
 		},
-		"string_decoder": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-			"dev": true,
-			"requires": {
-				"safe-buffer": "~5.1.0"
-			},
-			"dependencies": {
-				"safe-buffer": {
-					"version": "5.1.2",
-					"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-					"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-					"dev": true
-				}
-			}
-		},
 		"strip-ansi": {
 			"version": "5.2.0",
 			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
@@ -2383,14 +6505,6 @@
 			"dev": true,
 			"requires": {
 				"ansi-regex": "^4.1.0"
-			},
-			"dependencies": {
-				"ansi-regex": {
-					"version": "4.1.0",
-					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
-					"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
-					"dev": true
-				}
 			}
 		},
 		"strip-final-newline": {
@@ -2477,17 +6591,17 @@
 			}
 		},
 		"terser-webpack-plugin": {
-			"version": "5.0.3",
-			"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz",
-			"integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==",
+			"version": "5.1.1",
+			"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
+			"integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
 			"dev": true,
 			"requires": {
-				"jest-worker": "^26.6.1",
-				"p-limit": "^3.0.2",
+				"jest-worker": "^26.6.2",
+				"p-limit": "^3.1.0",
 				"schema-utils": "^3.0.0",
 				"serialize-javascript": "^5.0.1",
 				"source-map": "^0.6.1",
-				"terser": "^5.3.8"
+				"terser": "^5.5.1"
 			}
 		},
 		"text-table": {
@@ -2520,17 +6634,74 @@
 				"is-number": "^7.0.0"
 			}
 		},
+		"traverse": {
+			"version": "0.3.9",
+			"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+			"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+			"dev": true
+		},
 		"ts-loader": {
-			"version": "8.0.12",
-			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.12.tgz",
-			"integrity": "sha512-UIivVfGVJDdwwjgSrbtcL9Nf10c1BWnL1mxAQUVcnhNIn/P9W3nP5v60Z0aBMtc7ZrE11lMmU6+5jSgAXmGaYw==",
+			"version": "8.0.17",
+			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.17.tgz",
+			"integrity": "sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w==",
 			"dev": true,
 			"requires": {
-				"chalk": "^2.3.0",
+				"chalk": "^4.1.0",
 				"enhanced-resolve": "^4.0.0",
-				"loader-utils": "^1.0.2",
+				"loader-utils": "^2.0.0",
 				"micromatch": "^4.0.0",
-				"semver": "^6.0.0"
+				"semver": "^7.3.4"
+			},
+			"dependencies": {
+				"ansi-styles": {
+					"version": "4.3.0",
+					"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+					"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+					"dev": true,
+					"requires": {
+						"color-convert": "^2.0.1"
+					}
+				},
+				"chalk": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+					"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+					"dev": true,
+					"requires": {
+						"ansi-styles": "^4.1.0",
+						"supports-color": "^7.1.0"
+					}
+				},
+				"color-convert": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+					"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+					"dev": true,
+					"requires": {
+						"color-name": "~1.1.4"
+					}
+				},
+				"color-name": {
+					"version": "1.1.4",
+					"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+					"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+					"dev": true
+				},
+				"has-flag": {
+					"version": "4.0.0",
+					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+					"dev": true
+				},
+				"supports-color": {
+					"version": "7.2.0",
+					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+					"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+					"dev": true,
+					"requires": {
+						"has-flag": "^4.0.0"
+					}
+				}
 			}
 		},
 		"tslib": {
@@ -2540,9 +6711,9 @@
 			"dev": true
 		},
 		"tsutils": {
-			"version": "3.17.1",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
-			"integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+			"version": "3.20.0",
+			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
+			"integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
 			"dev": true,
 			"requires": {
 				"tslib": "^1.8.1"
@@ -2564,15 +6735,33 @@
 			"dev": true
 		},
 		"typescript": {
-			"version": "4.1.3",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.3.tgz",
-			"integrity": "sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg==",
+			"version": "4.1.5",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
+			"integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
 			"dev": true
 		},
+		"unzipper": {
+			"version": "0.10.11",
+			"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
+			"integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
+			"dev": true,
+			"requires": {
+				"big-integer": "^1.6.17",
+				"binary": "~0.3.0",
+				"bluebird": "~3.4.1",
+				"buffer-indexof-polyfill": "~1.0.0",
+				"duplexer2": "~0.1.4",
+				"fstream": "^1.0.12",
+				"graceful-fs": "^4.2.2",
+				"listenercount": "~1.0.1",
+				"readable-stream": "~2.3.6",
+				"setimmediate": "~1.0.4"
+			}
+		},
 		"uri-js": {
-			"version": "4.4.0",
-			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
-			"integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
+			"version": "4.4.1",
+			"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+			"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
 			"dev": true,
 			"requires": {
 				"punycode": "^2.1.0"
@@ -2591,26 +6780,47 @@
 			"dev": true
 		},
 		"vscode-debugadapter": {
-			"version": "1.43.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.43.0.tgz",
-			"integrity": "sha512-OVhJy2W6sU2HctEMiwh6CHWl347Hm+0eCmLFCcnNvV0vjOm65/BssSYeqYA3UrkDZCZqbBiB6jEeh18CioASmg==",
+			"version": "1.44.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.44.0.tgz",
+			"integrity": "sha512-cOYQiDLAdq64rKP1KYcEr7NOlOcNFv13NcW6fCnknX3RR5MKveORKPjgOFFV4HMp04kJ4GtjLm1PFxcrYgg9ZQ==",
 			"requires": {
 				"mkdirp": "^0.5.5",
-				"vscode-debugprotocol": "1.43.0"
+				"vscode-debugprotocol": "1.44.0"
 			}
 		},
 		"vscode-debugadapter-testsupport": {
-			"version": "1.43.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.43.0.tgz",
-			"integrity": "sha512-dxTu7xgNDipoIKf7H2mrVBhp9Vxx2czrnn1N7eIvmg3CYOLPOq3AGrzHoCwMOZNJX1rVttdYZet1f0bEjrDyjg==",
+			"version": "1.44.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.44.0.tgz",
+			"integrity": "sha512-5sPAQ4/OFPBvZoyx2nPI91Zv7CCZ63CS9XrsCaR1t2awEY+hv+yjwryaWpV0AQX6lrYOCO/PehYvzmDsGLEy6A==",
+			"dev": true,
 			"requires": {
-				"vscode-debugprotocol": "^1.43.0"
+				"vscode-debugprotocol": "^1.44.0"
 			}
 		},
 		"vscode-debugprotocol": {
-			"version": "1.43.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.43.0.tgz",
-			"integrity": "sha512-pnj+9wVS3yPYz/RXoYSN1tCv+D4139ueaY2WC7V6fUd9QZU8IE5s4r/lZUMJ9gAEGz2km/Iv4qcI7Fdlz5xS9w=="
+			"version": "1.44.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.44.0.tgz",
+			"integrity": "sha512-qf+eBnrDyR2MpP08y1JfzJnFZGHdkk86+SRGRp0XepDGNA6n/Nann5XhtAzdGX/yaZokjTAINK313S2yYhHoPQ=="
+		},
+		"vscode-dts": {
+			"version": "0.3.1",
+			"resolved": "https://registry.npmjs.org/vscode-dts/-/vscode-dts-0.3.1.tgz",
+			"integrity": "sha512-8XZ+M7IQV5MnPXEhHLemGOk5FRBfT7HCBEughfDhn2i6wwPXlpv4OuQQdhs6XZVmF3GFdKqt+fXOgfsNBKP+fw==",
+			"requires": {
+				"minimist": "^1.2.0",
+				"prompts": "^2.1.0",
+				"rimraf": "^3.0.0"
+			},
+			"dependencies": {
+				"rimraf": {
+					"version": "3.0.2",
+					"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+					"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+					"requires": {
+						"glob": "^7.1.3"
+					}
+				}
+			}
 		},
 		"vscode-jsonrpc": {
 			"version": "5.0.1",
@@ -2618,12 +6828,19 @@
 			"integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A=="
 		},
 		"vscode-languageclient": {
-			"version": "6.1.3",
-			"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.3.tgz",
-			"integrity": "sha512-YciJxk08iU5LmWu7j5dUt9/1OLjokKET6rME3cI4BRpiF6HZlusm2ZwPt0MYJ0lV5y43sZsQHhyon2xBg4ZJVA==",
+			"version": "6.1.4",
+			"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.1.4.tgz",
+			"integrity": "sha512-EUOU+bJu6axmt0RFNo3nrglQLPXMfanbYViJee3Fbn2VuQoX0ZOI4uTYhSRvYLP2vfwTP/juV62P/mksCdTZMA==",
 			"requires": {
 				"semver": "^6.3.0",
-				"vscode-languageserver-protocol": "^3.15.3"
+				"vscode-languageserver-protocol": "3.15.3"
+			},
+			"dependencies": {
+				"semver": {
+					"version": "6.3.0",
+					"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+					"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+				}
 			}
 		},
 		"vscode-languageserver-protocol": {
@@ -2641,20 +6858,32 @@
 			"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ=="
 		},
 		"vscode-test": {
-			"version": "1.4.1",
-			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.1.tgz",
-			"integrity": "sha512-Ls7+JyC06cUCuomlTYk4aNJI00Rri09hgtkNl3zfQ1bj6meXglpSPpuzJ/RPNetlUHFMm4eGs0Xr/H5pFPVwfQ==",
+			"version": "1.5.0",
+			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.0.tgz",
+			"integrity": "sha512-svwE/mhBBqrB77C1U7pkUKfUmxnkzg0dLGi1vEmitsleu88oNsqZEhG3ANZrL/Ia4m0CW0oYEKRw2EojpFxLlQ==",
 			"dev": true,
 			"requires": {
-				"http-proxy-agent": "^2.1.0",
-				"https-proxy-agent": "^2.2.4",
-				"rimraf": "^2.6.3"
+				"http-proxy-agent": "^4.0.1",
+				"https-proxy-agent": "^5.0.0",
+				"rimraf": "^3.0.2",
+				"unzipper": "^0.10.11"
+			},
+			"dependencies": {
+				"rimraf": {
+					"version": "3.0.2",
+					"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+					"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+					"dev": true,
+					"requires": {
+						"glob": "^7.1.3"
+					}
+				}
 			}
 		},
 		"watchpack": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.0.tgz",
-			"integrity": "sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw==",
+			"version": "2.1.1",
+			"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
+			"integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
 			"dev": true,
 			"requires": {
 				"glob-to-regexp": "^0.4.1",
@@ -2662,47 +6891,46 @@
 			}
 		},
 		"webpack": {
-			"version": "5.11.1",
-			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.11.1.tgz",
-			"integrity": "sha512-tNUIdAmYJv+nupRs/U/gqmADm6fgrf5xE+rSlSsf2PgsGO7j2WG7ccU6AWNlOJlHFl+HnmXlBmHIkiLf+XA9mQ==",
+			"version": "5.21.2",
+			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.21.2.tgz",
+			"integrity": "sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg==",
 			"dev": true,
 			"requires": {
 				"@types/eslint-scope": "^3.7.0",
-				"@types/estree": "^0.0.45",
-				"@webassemblyjs/ast": "1.9.1",
-				"@webassemblyjs/helper-module-context": "1.9.1",
-				"@webassemblyjs/wasm-edit": "1.9.1",
-				"@webassemblyjs/wasm-parser": "1.9.1",
+				"@types/estree": "^0.0.46",
+				"@webassemblyjs/ast": "1.11.0",
+				"@webassemblyjs/wasm-edit": "1.11.0",
+				"@webassemblyjs/wasm-parser": "1.11.0",
 				"acorn": "^8.0.4",
 				"browserslist": "^4.14.5",
 				"chrome-trace-event": "^1.0.2",
-				"enhanced-resolve": "^5.3.1",
+				"enhanced-resolve": "^5.7.0",
+				"es-module-lexer": "^0.3.26",
 				"eslint-scope": "^5.1.1",
 				"events": "^3.2.0",
 				"glob-to-regexp": "^0.4.1",
 				"graceful-fs": "^4.2.4",
 				"json-parse-better-errors": "^1.0.2",
-				"loader-runner": "^4.1.0",
+				"loader-runner": "^4.2.0",
 				"mime-types": "^2.1.27",
 				"neo-async": "^2.6.2",
-				"pkg-dir": "^5.0.0",
 				"schema-utils": "^3.0.0",
 				"tapable": "^2.1.1",
-				"terser-webpack-plugin": "^5.0.3",
+				"terser-webpack-plugin": "^5.1.1",
 				"watchpack": "^2.0.0",
 				"webpack-sources": "^2.1.1"
 			},
 			"dependencies": {
 				"acorn": {
-					"version": "8.0.4",
-					"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz",
-					"integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==",
+					"version": "8.0.5",
+					"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz",
+					"integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==",
 					"dev": true
 				},
 				"enhanced-resolve": {
-					"version": "5.4.1",
-					"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.4.1.tgz",
-					"integrity": "sha512-4GbyIMzYktTFoRSmkbgZ1LU+RXwf4AQ8Z+rSuuh1dC8plp0PPeaWvx6+G4hh4KnUJ48VoxKbNyA1QQQIUpXjYA==",
+					"version": "5.7.0",
+					"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
+					"integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
 					"dev": true,
 					"requires": {
 						"graceful-fs": "^4.2.4",
@@ -2718,41 +6946,43 @@
 			}
 		},
 		"webpack-cli": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.3.0.tgz",
-			"integrity": "sha512-gve+BBKrzMPTOYDjupzV8JchUznhVWMKtWM1hFIQWi6XoeLvGNoQwkrtMWVb+aJ437GgCKdta7sIn10v621pKA==",
+			"version": "4.5.0",
+			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz",
+			"integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==",
 			"dev": true,
 			"requires": {
 				"@discoveryjs/json-ext": "^0.5.0",
-				"@webpack-cli/info": "^1.2.0",
-				"@webpack-cli/serve": "^1.2.0",
+				"@webpack-cli/configtest": "^1.0.1",
+				"@webpack-cli/info": "^1.2.2",
+				"@webpack-cli/serve": "^1.3.0",
 				"colorette": "^1.2.1",
-				"commander": "^6.2.0",
+				"commander": "^7.0.0",
 				"enquirer": "^2.3.6",
-				"execa": "^4.1.0",
+				"execa": "^5.0.0",
 				"fastest-levenshtein": "^1.0.12",
 				"import-local": "^3.0.2",
 				"interpret": "^2.2.0",
 				"rechoir": "^0.7.0",
 				"v8-compile-cache": "^2.2.0",
-				"webpack-merge": "^4.2.2"
+				"webpack-merge": "^5.7.3"
 			},
 			"dependencies": {
 				"commander": {
-					"version": "6.2.1",
-					"resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
-					"integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+					"version": "7.0.0",
+					"resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz",
+					"integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==",
 					"dev": true
 				}
 			}
 		},
 		"webpack-merge": {
-			"version": "4.2.2",
-			"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
-			"integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
+			"version": "5.7.3",
+			"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
+			"integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
 			"dev": true,
 			"requires": {
-				"lodash": "^4.17.15"
+				"clone-deep": "^4.0.1",
+				"wildcard": "^2.0.0"
 			}
 		},
 		"webpack-sources": {
@@ -2774,12 +7004,6 @@
 				"isexe": "^2.0.0"
 			}
 		},
-		"which-module": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-			"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
-			"dev": true
-		},
 		"wide-align": {
 			"version": "1.1.3",
 			"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@@ -2822,6 +7046,12 @@
 				}
 			}
 		},
+		"wildcard": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+			"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+			"dev": true
+		},
 		"word-wrap": {
 			"version": "1.2.3",
 			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -2829,43 +7059,59 @@
 			"dev": true
 		},
 		"workerpool": {
-			"version": "6.0.2",
-			"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz",
-			"integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==",
+			"version": "6.1.0",
+			"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
+			"integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==",
 			"dev": true
 		},
 		"wrap-ansi": {
-			"version": "5.1.0",
-			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
-			"integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+			"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
 			"dev": true,
 			"requires": {
-				"ansi-styles": "^3.2.0",
-				"string-width": "^3.0.0",
-				"strip-ansi": "^5.0.0"
+				"ansi-styles": "^4.0.0",
+				"string-width": "^4.1.0",
+				"strip-ansi": "^6.0.0"
 			},
 			"dependencies": {
-				"emoji-regex": {
-					"version": "7.0.3",
-					"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-					"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+				"ansi-regex": {
+					"version": "5.0.0",
+					"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+					"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
 					"dev": true
 				},
-				"is-fullwidth-code-point": {
-					"version": "2.0.0",
-					"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-					"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+				"ansi-styles": {
+					"version": "4.3.0",
+					"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+					"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+					"dev": true,
+					"requires": {
+						"color-convert": "^2.0.1"
+					}
+				},
+				"color-convert": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+					"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+					"dev": true,
+					"requires": {
+						"color-name": "~1.1.4"
+					}
+				},
+				"color-name": {
+					"version": "1.1.4",
+					"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+					"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 					"dev": true
 				},
-				"string-width": {
-					"version": "3.1.0",
-					"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-					"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+				"strip-ansi": {
+					"version": "6.0.0",
+					"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+					"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
 					"dev": true,
 					"requires": {
-						"emoji-regex": "^7.0.1",
-						"is-fullwidth-code-point": "^2.0.0",
-						"strip-ansi": "^5.1.0"
+						"ansi-regex": "^5.0.0"
 					}
 				}
 			}
@@ -2873,8 +7119,7 @@
 		"wrappy": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-			"dev": true
+			"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
 		},
 		"write": {
 			"version": "1.0.3",
@@ -2886,9 +7131,9 @@
 			}
 		},
 		"y18n": {
-			"version": "4.0.1",
-			"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
-			"integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
+			"version": "5.0.5",
+			"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
+			"integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==",
 			"dev": true
 		},
 		"yallist": {
@@ -2898,100 +7143,25 @@
 			"dev": true
 		},
 		"yargs": {
-			"version": "13.3.2",
-			"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
-			"integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+			"version": "16.2.0",
+			"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+			"integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
 			"dev": true,
 			"requires": {
-				"cliui": "^5.0.0",
-				"find-up": "^3.0.0",
-				"get-caller-file": "^2.0.1",
+				"cliui": "^7.0.2",
+				"escalade": "^3.1.1",
+				"get-caller-file": "^2.0.5",
 				"require-directory": "^2.1.1",
-				"require-main-filename": "^2.0.0",
-				"set-blocking": "^2.0.0",
-				"string-width": "^3.0.0",
-				"which-module": "^2.0.0",
-				"y18n": "^4.0.0",
-				"yargs-parser": "^13.1.2"
-			},
-			"dependencies": {
-				"emoji-regex": {
-					"version": "7.0.3",
-					"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-					"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-					"dev": true
-				},
-				"find-up": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-					"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
-					"dev": true,
-					"requires": {
-						"locate-path": "^3.0.0"
-					}
-				},
-				"is-fullwidth-code-point": {
-					"version": "2.0.0",
-					"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-					"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-					"dev": true
-				},
-				"locate-path": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-					"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
-					"dev": true,
-					"requires": {
-						"p-locate": "^3.0.0",
-						"path-exists": "^3.0.0"
-					}
-				},
-				"p-limit": {
-					"version": "2.3.0",
-					"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-					"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-					"dev": true,
-					"requires": {
-						"p-try": "^2.0.0"
-					}
-				},
-				"p-locate": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
-					"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
-					"dev": true,
-					"requires": {
-						"p-limit": "^2.0.0"
-					}
-				},
-				"path-exists": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-					"integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
-					"dev": true
-				},
-				"string-width": {
-					"version": "3.1.0",
-					"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-					"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-					"dev": true,
-					"requires": {
-						"emoji-regex": "^7.0.1",
-						"is-fullwidth-code-point": "^2.0.0",
-						"strip-ansi": "^5.1.0"
-					}
-				}
+				"string-width": "^4.2.0",
+				"y18n": "^5.0.5",
+				"yargs-parser": "^20.2.2"
 			}
 		},
 		"yargs-parser": {
-			"version": "13.1.2",
-			"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
-			"integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
-			"dev": true,
-			"requires": {
-				"camelcase": "^5.0.0",
-				"decamelize": "^1.2.0"
-			}
+			"version": "20.2.4",
+			"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+			"integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+			"dev": true
 		},
 		"yargs-unparser": {
 			"version": "2.0.0",
@@ -3003,20 +7173,6 @@
 				"decamelize": "^4.0.0",
 				"flat": "^5.0.2",
 				"is-plain-obj": "^2.1.0"
-			},
-			"dependencies": {
-				"camelcase": {
-					"version": "6.2.0",
-					"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
-					"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
-					"dev": true
-				},
-				"decamelize": {
-					"version": "4.0.0",
-					"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
-					"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
-					"dev": true
-				}
 			}
 		},
 		"yocto-queue": {
diff --git a/package.json b/package.json
index d2bdbdb..ad515a3 100644
--- a/package.json
+++ b/package.json
@@ -6,6 +6,7 @@
 	"license": "MIT",
 	"version": "0.0.7",
 	"icon": "icon.png",
+	"enableProposedApi": true,
 	"repository": {
 		"type": "git",
 		"url": "https://github.com/badetitou/vscode-pharo"
@@ -21,7 +22,7 @@
 		"pharo smalltalk"
 	],
 	"engines": {
-		"vscode": "^1.43.0"
+		"vscode": "^1.49.0"
 	},
 	"activationEvents": [
 		"onDebugResolve:pharodb",
@@ -29,7 +30,9 @@
 		"onCommand:pharo.extensionVersion",
 		"onCommand:pharo.printIt",
 		"onCommand:pharo.showIt",
-		"onCommand:extension.pharo-debug.debugEditorContents"
+		"onCommand:extension.pharo-debug.debugEditorContents",
+		"onNotebookEditor:moosebook",
+		"onNotebook:moosebook"
 	],
 	"main": "./out/extension",
 	"contributes": {
@@ -64,6 +67,12 @@
 					".st"
 				],
 				"configuration": "./language-configuration.json"
+			},
+			{
+				"id": "moosebook",
+				"aliases": [
+					"Moose Notebook"
+				]
 			}
 		],
 		"grammars": [
@@ -154,6 +163,17 @@
 				"command": "extension.pharo-debug.debugEditorContents",
 				"when": "resourceLangId == pharo"
 			}
+		],
+		"notebookProvider": [
+			{
+				"viewType": "moosebook",
+				"displayName": "Moose Notebook",
+				"selector": [
+					{
+						"filenamePattern": "*.moosebook"
+					}
+				]
+			}
 		]
 	},
 	"scripts": {
@@ -166,21 +186,22 @@
 	},
 	"dependencies": {
 		"vscode-debugadapter": "^1.43.0",
+		"vscode-dts": "^0.3.1",
 		"vscode-languageclient": "^6.1.3",
 		"vscode-languageserver-protocol": "3.15.3"
 	},
 	"devDependencies": {
-		"@types/vscode": "1.43.0",
-		"vscode-test": "^1.3.0",
 		"@types/mocha": "^8.0.3",
 		"@types/node": "^12.12.0",
+		"@types/vscode": "1.49.0",
 		"@typescript-eslint/parser": "^2.3.0",
 		"eslint": "^6.4.0",
 		"mocha": "^8.1.1",
 		"ts-loader": "^8.0.12",
 		"typescript": "^4.0.2",
+		"vscode-debugadapter-testsupport": "^1.43.0",
+		"vscode-test": "^1.3.0",
 		"webpack": "^5.11.1",
-		"webpack-cli": "^4.3.0",
-		"vscode-debugadapter-testsupport": "^1.43.0"
+		"webpack-cli": "^4.3.0"
 	}
-}
\ No newline at end of file
+}
diff --git a/src/debugFactory.ts b/src/debugFactory.ts
index 686a729..99195e1 100644
--- a/src/debugFactory.ts
+++ b/src/debugFactory.ts
@@ -1,7 +1,5 @@
 import * as vscode from 'vscode';
-import { window } from 'vscode';
 import { client } from './extension';
-import * as Net from 'net';
 
 export class DebugAdapterFactory implements vscode.DebugAdapterDescriptorFactory {
 
diff --git a/src/extension.ts b/src/extension.ts
index 5b017c9..6eb183e 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -16,6 +16,7 @@ import * as child_process from 'child_process';
 import * as lc from 'vscode-languageclient';
 import { activateDebug } from './activateDebug'
 import { DebugAdapterFactory } from './debugFactory'
+import { MoosebookContentProvider } from './moosebookProvider';
 
 export let client: LanguageClient;
 let socket: net.Socket;
@@ -44,6 +45,10 @@ export async function activate(context: ExtensionContext) {
 		// Create debugguer
 		let factory = new DebugAdapterFactory();
 		activateDebug(context, factory);
+
+		// Create Moosebook
+		const moosebookContentProvider = new MoosebookContentProvider();
+		context.subscriptions.push(vscode.notebook.registerNotebookContentProvider('moosebook', moosebookContentProvider));
 	})
 
 }
diff --git a/src/moosebook.ts b/src/moosebook.ts
new file mode 100644
index 0000000..714e124
--- /dev/null
+++ b/src/moosebook.ts
@@ -0,0 +1,44 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import { client } from './extension';
+
+export class Moosebook implements vscode.Disposable {
+
+
+	constructor(doc: vscode.NotebookDocument) {
+		
+	}
+
+	async dispose() {
+		
+	}
+
+	public async restartKernel() {
+
+	}
+
+	public async toggleDebugging(document: vscode.NotebookDocument) {
+
+	}
+
+	public async eval(cell: vscode.NotebookCell): Promise<string> {
+		// Eval
+		return client.sendRequest('command:printIt', {"line": cell.document.getText()}).then( (result: string) => {
+			return result;
+		}).catch((error) => { throw new Error(error);
+		});
+	}
+
+	public addDebugSession(session: vscode.DebugSession) {
+
+	}
+
+	public removeDebugSession(session: vscode.DebugSession) {
+
+	}
+
+}
diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
new file mode 100644
index 0000000..a3c41fc
--- /dev/null
+++ b/src/moosebookProvider.ts
@@ -0,0 +1,186 @@
+import * as vscode from 'vscode';
+import { WorkspaceEdit } from 'vscode';
+import { Moosebook } from './moosebook';
+
+interface RawNotebookCell {
+	language: string;
+	value: string;
+	kind: vscode.CellKind;
+	editable?: boolean;
+}
+
+interface ProjectAssociation {
+	(key: string): boolean;
+}
+
+export class MoosebookContentProvider implements  vscode.NotebookContentProvider, vscode.NotebookKernel {
+	readonly id = 'moosebookKernel';
+	public label = 'Moosebook Kernel';
+
+	private readonly _associations = new Map<string, [ProjectAssociation, Moosebook]>();
+	private _localDisposables: vscode.Disposable[] = [];
+
+	constructor() {
+		this._localDisposables.push(
+			vscode.notebook.onDidOpenNotebookDocument(document => {
+				const docKey = document.uri.toString();
+				if (!this.lookupMoosebook(docKey)) {
+					const project = new Moosebook(document);
+					this.register(
+						docKey,
+						project,
+						key => document.cells.some(cell => cell.uri.toString() === key) || (key === docKey),
+					);
+				}
+			}),
+			vscode.notebook.onDidCloseNotebookDocument(document => {
+				const project = this.unregister(document.uri.toString());
+				if (project) {
+					project.dispose();
+				}
+			}),
+		);
+		vscode.notebook.registerNotebookKernelProvider({
+			viewType: 'moosebook',
+		}, {
+			provideKernels: () => {
+				return [this];
+			}
+		});
+	}
+
+	public lookupMoosebook(keyOrUri: string | vscode.Uri | undefined): Moosebook | undefined {
+		if (keyOrUri) {
+			let key: string;
+			if (typeof keyOrUri === 'string') {
+				key = keyOrUri;
+			} else {
+				key = keyOrUri.toString();
+			}
+			for (let [association, value] of this._associations.values()) {
+				if (association(key)) {
+					return value;
+				}
+			}
+		}
+		return undefined;
+	}
+
+	async openNotebook(uri: vscode.Uri): Promise<vscode.NotebookData> {
+		let contents = '';
+		try {
+			contents = Buffer.from(await vscode.workspace.fs.readFile(uri)).toString('utf8');
+		} catch {
+		}
+
+		let raw: RawNotebookCell[];
+		try {
+			raw = <RawNotebookCell[]>JSON.parse(contents);
+		} catch {
+			raw = [];
+		}
+
+		const notebookData: vscode.NotebookData = {
+			languages: ['pharo'],
+			metadata: { cellRunnable: true },
+			cells: raw.map(item => ({
+				source: item.value,
+				language: item.language,
+				cellKind: item.kind,
+				outputs: [],
+				metadata: {
+					editable: true,
+					runnable: true,
+					breakpointMargin: false
+				 }
+			}))
+		};
+		return notebookData;
+	}
+
+	public saveNotebook(document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise<void> {
+		return this._save(document, document.uri);
+	}
+
+	public saveNotebookAs(targetResource: vscode.Uri, document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise<void> {
+		return this._save(document, targetResource);
+	}
+
+	async resolveNotebook(_document: vscode.NotebookDocument, _webview: vscode.NotebookCommunication): Promise<void> {
+		// nothing
+	}
+
+	async backupNotebook(document: vscode.NotebookDocument, context: vscode.NotebookDocumentBackupContext, _cancellation: vscode.CancellationToken): Promise<vscode.NotebookDocumentBackup> {
+		return { id: '', delete: () => {} };
+	}
+
+
+
+	public async executeCell(_document: vscode.NotebookDocument, cell: vscode.NotebookCell): Promise<void> {
+
+		let output = '';
+		let error: Error | undefined;
+		const moosebook = this.lookupMoosebook(cell.uri);
+		if (moosebook) {
+			try {
+				output = await moosebook.eval(cell);
+			} catch(e) {
+				error = e;
+			}
+		}
+		const edit = new vscode.WorkspaceEdit();
+		edit.replaceNotebookCellOutput(_document.uri, cell.index, [{
+			outputs: [{
+				mime: 'text/html',
+				value: output
+			}],
+			id: cell.index + ''
+		}])
+		// edit.replaceNotebookCellMetadata(_document.uri, cell.index, metadata);
+        vscode.workspace.applyEdit(edit);
+		
+	}
+
+	public cancelCellExecution(_document: vscode.NotebookDocument, _cell: vscode.NotebookCell): void {
+		// not yet supported
+	}
+
+	public async executeAllCells(document: vscode.NotebookDocument): Promise<void> {
+	  for (const cell of document.cells) {
+		await this.executeCell(document, cell);
+	  }
+	}
+
+	cancelAllCellsExecution(_document: vscode.NotebookDocument): void {
+		// not yet supported
+	}
+
+	public dispose() {
+	}
+
+	// ---- private ----
+
+	private async _save(document: vscode.NotebookDocument, targetResource: vscode.Uri): Promise<void> {
+		let contents: RawNotebookCell[] = [];
+		for (let cell of document.cells) {
+			contents.push({
+				kind: cell.cellKind,
+				language: cell.language,
+				value: cell.document.getText(),
+			});
+		}
+		await vscode.workspace.fs.writeFile(targetResource, Buffer.from(JSON.stringify(contents)));
+	}
+
+	private register(key: string, project: Moosebook, association: ProjectAssociation) {
+		this._associations.set(key, [association, project]);
+	}
+
+	private unregister(key: string): Moosebook | undefined {
+		const project = this.lookupMoosebook(key);
+		if (project) {
+			this._associations.delete(key);
+		}
+		return project;
+	}
+}
\ No newline at end of file
diff --git a/src/types/vscode.proposed.d.ts b/src/types/vscode.proposed.d.ts
new file mode 100644
index 0000000..9cf6321
--- /dev/null
+++ b/src/types/vscode.proposed.d.ts
@@ -0,0 +1,2663 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+/**
+ * This is the place for API experiments and proposals.
+ * These API are NOT stable and subject to change. They are only available in the Insiders
+ * distribution and CANNOT be used in published extensions.
+ *
+ * To test these API in local environment:
+ * - Use Insiders release of VS Code.
+ * - Add `"enableProposedApi": true` to your package.json.
+ * - Copy this file to your project.
+ */
+
+declare module 'vscode' {
+
+	//#region auth provider: https://github.com/microsoft/vscode/issues/88309
+
+	/**
+	 * An [event](#Event) which fires when an [AuthenticationProvider](#AuthenticationProvider) is added or removed.
+	 */
+	export interface AuthenticationProvidersChangeEvent {
+		/**
+		 * The ids of the [authenticationProvider](#AuthenticationProvider)s that have been added.
+		 */
+		readonly added: ReadonlyArray<AuthenticationProviderInformation>;
+
+		/**
+		 * The ids of the [authenticationProvider](#AuthenticationProvider)s that have been removed.
+		 */
+		readonly removed: ReadonlyArray<AuthenticationProviderInformation>;
+	}
+
+	/**
+	* An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed.
+	*/
+	export interface AuthenticationProviderAuthenticationSessionsChangeEvent {
+		/**
+		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been added.
+		*/
+		readonly added: ReadonlyArray<AuthenticationSession>;
+
+		/**
+		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been removed.
+		 */
+		readonly removed: ReadonlyArray<AuthenticationSession>;
+
+		/**
+		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been changed.
+		 */
+		readonly changed: ReadonlyArray<AuthenticationSession>;
+	}
+
+	/**
+	 * A provider for performing authentication to a service.
+	 */
+	export interface AuthenticationProvider {
+		/**
+		 * An [event](#Event) which fires when the array of sessions has changed, or data
+		 * within a session has changed.
+		 */
+		readonly onDidChangeSessions: Event<AuthenticationProviderAuthenticationSessionsChangeEvent>;
+
+		/**
+		 * Returns an array of current sessions.
+		 *
+		 * TODO @RMacfarlane finish deprecating this and remove it
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		getAllSessions(): Thenable<ReadonlyArray<AuthenticationSession>>;
+
+
+		/**
+		 * Returns an array of current sessions.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		getSessions(scopes: string[]): Thenable<ReadonlyArray<AuthenticationSession>>;
+
+		/**
+		 * Prompts a user to login.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		createSession(scopes: string[]): Thenable<AuthenticationSession>;
+
+		/**
+		 * Removes the session corresponding to session id.
+		 * @param sessionId The session id to log out of
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		removeSession(sessionId: string): Thenable<void>;
+	}
+
+	/**
+	 * Options for creating an [AuthenticationProvider](#AuthentcationProvider).
+	 */
+	export interface AuthenticationProviderOptions {
+		/**
+		 * Whether it is possible to be signed into multiple accounts at once with this provider.
+		 * If not specified, will default to false.
+		*/
+		readonly supportsMultipleAccounts?: boolean;
+	}
+
+	export namespace authentication {
+		/**
+		 * Register an authentication provider.
+		 *
+		 * There can only be one provider per id and an error is being thrown when an id
+		 * has already been used by another provider. Ids are case-sensitive.
+		 *
+		 * @param id The unique identifier of the provider.
+		 * @param label The human-readable name of the provider.
+		 * @param provider The authentication provider provider.
+		 * @params options Additional options for the provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerAuthenticationProvider(id: string, label: string, provider: AuthenticationProvider, options?: AuthenticationProviderOptions): Disposable;
+
+		/**
+		 * @deprecated - getSession should now trigger extension activation.
+		 * Fires with the provider id that was registered or unregistered.
+		 */
+		export const onDidChangeAuthenticationProviders: Event<AuthenticationProvidersChangeEvent>;
+
+		/**
+		 * An array of the information of authentication providers that are currently registered.
+		 */
+		export const providers: ReadonlyArray<AuthenticationProviderInformation>;
+
+		/**
+		* Logout of a specific session.
+		* @param providerId The id of the provider to use
+		* @param sessionId The session id to remove
+		* provider
+		*/
+		export function logout(providerId: string, sessionId: string): Thenable<void>;
+	}
+
+	//#endregion
+
+	// eslint-disable-next-line vscode-dts-region-comments
+	//#region @alexdima - resolvers
+
+	export interface MessageOptions {
+		/**
+		 * Do not render a native message box.
+		 */
+		useCustom?: boolean;
+	}
+
+	export interface RemoteAuthorityResolverContext {
+		resolveAttempt: number;
+	}
+
+	export class ResolvedAuthority {
+		readonly host: string;
+		readonly port: number;
+		readonly connectionToken: string | undefined;
+
+		constructor(host: string, port: number, connectionToken?: string);
+	}
+
+	export interface ResolvedOptions {
+		extensionHostEnv?: { [key: string]: string | null; };
+	}
+
+	export interface TunnelOptions {
+		remoteAddress: { port: number, host: string; };
+		// The desired local port. If this port can't be used, then another will be chosen.
+		localAddressPort?: number;
+		label?: string;
+		public?: boolean;
+	}
+
+	export interface TunnelDescription {
+		remoteAddress: { port: number, host: string; };
+		//The complete local address(ex. localhost:1234)
+		localAddress: { port: number, host: string; } | string;
+		public?: boolean;
+	}
+
+	export interface Tunnel extends TunnelDescription {
+		// Implementers of Tunnel should fire onDidDispose when dispose is called.
+		onDidDispose: Event<void>;
+		dispose(): void | Thenable<void>;
+	}
+
+	/**
+	 * Used as part of the ResolverResult if the extension has any candidate,
+	 * published, or forwarded ports.
+	 */
+	export interface TunnelInformation {
+		/**
+		 * Tunnels that are detected by the extension. The remotePort is used for display purposes.
+		 * The localAddress should be the complete local address (ex. localhost:1234) for connecting to the port. Tunnels provided through
+		 * detected are read-only from the forwarded ports UI.
+		 */
+		environmentTunnels?: TunnelDescription[];
+
+	}
+
+	export interface TunnelCreationOptions {
+		/**
+		 * True when the local operating system will require elevation to use the requested local port.
+		 */
+		elevationRequired?: boolean;
+	}
+
+	export type ResolverResult = ResolvedAuthority & ResolvedOptions & TunnelInformation;
+
+	export class RemoteAuthorityResolverError extends Error {
+		static NotAvailable(message?: string, handled?: boolean): RemoteAuthorityResolverError;
+		static TemporarilyNotAvailable(message?: string): RemoteAuthorityResolverError;
+
+		constructor(message?: string);
+	}
+
+	export interface RemoteAuthorityResolver {
+		resolve(authority: string, context: RemoteAuthorityResolverContext): ResolverResult | Thenable<ResolverResult>;
+		/**
+		 * Can be optionally implemented if the extension can forward ports better than the core.
+		 * When not implemented, the core will use its default forwarding logic.
+		 * When implemented, the core will use this to forward ports.
+		 *
+		 * To enable the "Change Local Port" action on forwarded ports, make sure to set the `localAddress` of
+		 * the returned `Tunnel` to a `{ port: number, host: string; }` and not a string.
+		 */
+		tunnelFactory?: (tunnelOptions: TunnelOptions, tunnelCreationOptions: TunnelCreationOptions) => Thenable<Tunnel> | undefined;
+
+		/**p
+		 * Provides filtering for candidate ports.
+		 */
+		showCandidatePort?: (host: string, port: number, detail: string) => Thenable<boolean>;
+
+		/**
+		 * Lets the resolver declare which tunnel factory features it supports.
+		 * UNDER DISCUSSION! MAY CHANGE SOON.
+		 */
+		tunnelFeatures?: {
+			elevation: boolean;
+			public: boolean;
+		};
+	}
+
+	export namespace workspace {
+		/**
+		 * Forwards a port. If the current resolver implements RemoteAuthorityResolver:forwardPort then that will be used to make the tunnel.
+		 * By default, openTunnel only support localhost; however, RemoteAuthorityResolver:tunnelFactory can be used to support other ips.
+		 *
+		 * @throws When run in an environment without a remote.
+		 *
+		 * @param tunnelOptions The `localPort` is a suggestion only. If that port is not available another will be chosen.
+		 */
+		export function openTunnel(tunnelOptions: TunnelOptions): Thenable<Tunnel>;
+
+		/**
+		 * Gets an array of the currently available tunnels. This does not include environment tunnels, only tunnels that have been created by the user.
+		 * Note that these are of type TunnelDescription and cannot be disposed.
+		 */
+		export let tunnels: Thenable<TunnelDescription[]>;
+
+		/**
+		 * Fired when the list of tunnels has changed.
+		 */
+		export const onDidChangeTunnels: Event<void>;
+	}
+
+	export interface ResourceLabelFormatter {
+		scheme: string;
+		authority?: string;
+		formatting: ResourceLabelFormatting;
+	}
+
+	export interface ResourceLabelFormatting {
+		label: string; // myLabel:/${path}
+		// For historic reasons we use an or string here. Once we finalize this API we should start using enums instead and adopt it in extensions.
+		// eslint-disable-next-line vscode-dts-literal-or-types
+		separator: '/' | '\\' | '';
+		tildify?: boolean;
+		normalizeDriveLetter?: boolean;
+		workspaceSuffix?: string;
+		authorityPrefix?: string;
+		stripPathStartingSeparator?: boolean;
+	}
+
+	export namespace workspace {
+		export function registerRemoteAuthorityResolver(authorityPrefix: string, resolver: RemoteAuthorityResolver): Disposable;
+		export function registerResourceLabelFormatter(formatter: ResourceLabelFormatter): Disposable;
+	}
+
+	//#endregion
+
+	//#region editor insets: https://github.com/microsoft/vscode/issues/85682
+
+	export interface WebviewEditorInset {
+		readonly editor: TextEditor;
+		readonly line: number;
+		readonly height: number;
+		readonly webview: Webview;
+		readonly onDidDispose: Event<void>;
+		dispose(): void;
+	}
+
+	export namespace window {
+		export function createWebviewTextEditorInset(editor: TextEditor, line: number, height: number, options?: WebviewOptions): WebviewEditorInset;
+	}
+
+	//#endregion
+
+	//#region read/write in chunks: https://github.com/microsoft/vscode/issues/84515
+
+	export interface FileSystemProvider {
+		open?(resource: Uri, options: { create: boolean; }): number | Thenable<number>;
+		close?(fd: number): void | Thenable<void>;
+		read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): number | Thenable<number>;
+		write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): number | Thenable<number>;
+	}
+
+	//#endregion
+
+	//#region TextSearchProvider: https://github.com/microsoft/vscode/issues/59921
+
+	/**
+	 * The parameters of a query for text search.
+	 */
+	export interface TextSearchQuery {
+		/**
+		 * The text pattern to search for.
+		 */
+		pattern: string;
+
+		/**
+		 * Whether or not `pattern` should match multiple lines of text.
+		 */
+		isMultiline?: boolean;
+
+		/**
+		 * Whether or not `pattern` should be interpreted as a regular expression.
+		 */
+		isRegExp?: boolean;
+
+		/**
+		 * Whether or not the search should be case-sensitive.
+		 */
+		isCaseSensitive?: boolean;
+
+		/**
+		 * Whether or not to search for whole word matches only.
+		 */
+		isWordMatch?: boolean;
+	}
+
+	/**
+	 * A file glob pattern to match file paths against.
+	 * TODO@roblourens merge this with the GlobPattern docs/definition in vscode.d.ts.
+	 * @see [GlobPattern](#GlobPattern)
+	 */
+	export type GlobString = string;
+
+	/**
+	 * Options common to file and text search
+	 */
+	export interface SearchOptions {
+		/**
+		 * The root folder to search within.
+		 */
+		folder: Uri;
+
+		/**
+		 * Files that match an `includes` glob pattern should be included in the search.
+		 */
+		includes: GlobString[];
+
+		/**
+		 * Files that match an `excludes` glob pattern should be excluded from the search.
+		 */
+		excludes: GlobString[];
+
+		/**
+		 * Whether external files that exclude files, like .gitignore, should be respected.
+		 * See the vscode setting `"search.useIgnoreFiles"`.
+		 */
+		useIgnoreFiles: boolean;
+
+		/**
+		 * Whether symlinks should be followed while searching.
+		 * See the vscode setting `"search.followSymlinks"`.
+		 */
+		followSymlinks: boolean;
+
+		/**
+		 * Whether global files that exclude files, like .gitignore, should be respected.
+		 * See the vscode setting `"search.useGlobalIgnoreFiles"`.
+		 */
+		useGlobalIgnoreFiles: boolean;
+	}
+
+	/**
+	 * Options to specify the size of the result text preview.
+	 * These options don't affect the size of the match itself, just the amount of preview text.
+	 */
+	export interface TextSearchPreviewOptions {
+		/**
+		 * The maximum number of lines in the preview.
+		 * Only search providers that support multiline search will ever return more than one line in the match.
+		 */
+		matchLines: number;
+
+		/**
+		 * The maximum number of characters included per line.
+		 */
+		charsPerLine: number;
+	}
+
+	/**
+	 * Options that apply to text search.
+	 */
+	export interface TextSearchOptions extends SearchOptions {
+		/**
+		 * The maximum number of results to be returned.
+		 */
+		maxResults: number;
+
+		/**
+		 * Options to specify the size of the result text preview.
+		 */
+		previewOptions?: TextSearchPreviewOptions;
+
+		/**
+		 * Exclude files larger than `maxFileSize` in bytes.
+		 */
+		maxFileSize?: number;
+
+		/**
+		 * Interpret files using this encoding.
+		 * See the vscode setting `"files.encoding"`
+		 */
+		encoding?: string;
+
+		/**
+		 * Number of lines of context to include before each match.
+		 */
+		beforeContext?: number;
+
+		/**
+		 * Number of lines of context to include after each match.
+		 */
+		afterContext?: number;
+	}
+
+	/**
+	 * Information collected when text search is complete.
+	 */
+	export interface TextSearchComplete {
+		/**
+		 * Whether the search hit the limit on the maximum number of search results.
+		 * `maxResults` on [`TextSearchOptions`](#TextSearchOptions) specifies the max number of results.
+		 * - If exactly that number of matches exist, this should be false.
+		 * - If `maxResults` matches are returned and more exist, this should be true.
+		 * - If search hits an internal limit which is less than `maxResults`, this should be true.
+		 */
+		limitHit?: boolean;
+	}
+
+	/**
+	 * A preview of the text result.
+	 */
+	export interface TextSearchMatchPreview {
+		/**
+		 * The matching lines of text, or a portion of the matching line that contains the match.
+		 */
+		text: string;
+
+		/**
+		 * The Range within `text` corresponding to the text of the match.
+		 * The number of matches must match the TextSearchMatch's range property.
+		 */
+		matches: Range | Range[];
+	}
+
+	/**
+	 * A match from a text search
+	 */
+	export interface TextSearchMatch {
+		/**
+		 * The uri for the matching document.
+		 */
+		uri: Uri;
+
+		/**
+		 * The range of the match within the document, or multiple ranges for multiple matches.
+		 */
+		ranges: Range | Range[];
+
+		/**
+		 * A preview of the text match.
+		 */
+		preview: TextSearchMatchPreview;
+	}
+
+	/**
+	 * A line of context surrounding a TextSearchMatch.
+	 */
+	export interface TextSearchContext {
+		/**
+		 * The uri for the matching document.
+		 */
+		uri: Uri;
+
+		/**
+		 * One line of text.
+		 * previewOptions.charsPerLine applies to this
+		 */
+		text: string;
+
+		/**
+		 * The line number of this line of context.
+		 */
+		lineNumber: number;
+	}
+
+	export type TextSearchResult = TextSearchMatch | TextSearchContext;
+
+	/**
+	 * A TextSearchProvider provides search results for text results inside files in the workspace.
+	 */
+	export interface TextSearchProvider {
+		/**
+		 * Provide results that match the given text pattern.
+		 * @param query The parameters for this query.
+		 * @param options A set of options to consider while searching.
+		 * @param progress A progress callback that must be invoked for all results.
+		 * @param token A cancellation token.
+		 */
+		provideTextSearchResults(query: TextSearchQuery, options: TextSearchOptions, progress: Progress<TextSearchResult>, token: CancellationToken): ProviderResult<TextSearchComplete>;
+	}
+
+	//#endregion
+
+	//#region FileSearchProvider: https://github.com/microsoft/vscode/issues/73524
+
+	/**
+	 * The parameters of a query for file search.
+	 */
+	export interface FileSearchQuery {
+		/**
+		 * The search pattern to match against file paths.
+		 */
+		pattern: string;
+	}
+
+	/**
+	 * Options that apply to file search.
+	 */
+	export interface FileSearchOptions extends SearchOptions {
+		/**
+		 * The maximum number of results to be returned.
+		 */
+		maxResults?: number;
+
+		/**
+		 * A CancellationToken that represents the session for this search query. If the provider chooses to, this object can be used as the key for a cache,
+		 * and searches with the same session object can search the same cache. When the token is cancelled, the session is complete and the cache can be cleared.
+		 */
+		session?: CancellationToken;
+	}
+
+	/**
+	 * A FileSearchProvider provides search results for files in the given folder that match a query string. It can be invoked by quickopen or other extensions.
+	 *
+	 * A FileSearchProvider is the more powerful of two ways to implement file search in VS Code. Use a FileSearchProvider if you wish to search within a folder for
+	 * all files that match the user's query.
+	 *
+	 * The FileSearchProvider will be invoked on every keypress in quickopen. When `workspace.findFiles` is called, it will be invoked with an empty query string,
+	 * and in that case, every file in the folder should be returned.
+	 */
+	export interface FileSearchProvider {
+		/**
+		 * Provide the set of files that match a certain file path pattern.
+		 * @param query The parameters for this query.
+		 * @param options A set of options to consider while searching files.
+		 * @param token A cancellation token.
+		 */
+		provideFileSearchResults(query: FileSearchQuery, options: FileSearchOptions, token: CancellationToken): ProviderResult<Uri[]>;
+	}
+
+	export namespace workspace {
+		/**
+		 * Register a search provider.
+		 *
+		 * Only one provider can be registered per scheme.
+		 *
+		 * @param scheme The provider will be invoked for workspace folders that have this file scheme.
+		 * @param provider The provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerFileSearchProvider(scheme: string, provider: FileSearchProvider): Disposable;
+
+		/**
+		 * Register a text search provider.
+		 *
+		 * Only one provider can be registered per scheme.
+		 *
+		 * @param scheme The provider will be invoked for workspace folders that have this file scheme.
+		 * @param provider The provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerTextSearchProvider(scheme: string, provider: TextSearchProvider): Disposable;
+	}
+
+	//#endregion
+
+	//#region findTextInFiles: https://github.com/microsoft/vscode/issues/59924
+
+	/**
+	 * Options that can be set on a findTextInFiles search.
+	 */
+	export interface FindTextInFilesOptions {
+		/**
+		 * A [glob pattern](#GlobPattern) that defines the files to search for. The glob pattern
+		 * will be matched against the file paths of files relative to their workspace. Use a [relative pattern](#RelativePattern)
+		 * to restrict the search results to a [workspace folder](#WorkspaceFolder).
+		 */
+		include?: GlobPattern;
+
+		/**
+		 * A [glob pattern](#GlobPattern) that defines files and folders to exclude. The glob pattern
+		 * will be matched against the file paths of resulting matches relative to their workspace. When `undefined`, default excludes will
+		 * apply.
+		 */
+		exclude?: GlobPattern;
+
+		/**
+		 * Whether to use the default and user-configured excludes. Defaults to true.
+		 */
+		useDefaultExcludes?: boolean;
+
+		/**
+		 * The maximum number of results to search for
+		 */
+		maxResults?: number;
+
+		/**
+		 * Whether external files that exclude files, like .gitignore, should be respected.
+		 * See the vscode setting `"search.useIgnoreFiles"`.
+		 */
+		useIgnoreFiles?: boolean;
+
+		/**
+		 * Whether global files that exclude files, like .gitignore, should be respected.
+		 * See the vscode setting `"search.useGlobalIgnoreFiles"`.
+		 */
+		useGlobalIgnoreFiles?: boolean;
+
+		/**
+		 * Whether symlinks should be followed while searching.
+		 * See the vscode setting `"search.followSymlinks"`.
+		 */
+		followSymlinks?: boolean;
+
+		/**
+		 * Interpret files using this encoding.
+		 * See the vscode setting `"files.encoding"`
+		 */
+		encoding?: string;
+
+		/**
+		 * Options to specify the size of the result text preview.
+		 */
+		previewOptions?: TextSearchPreviewOptions;
+
+		/**
+		 * Number of lines of context to include before each match.
+		 */
+		beforeContext?: number;
+
+		/**
+		 * Number of lines of context to include after each match.
+		 */
+		afterContext?: number;
+	}
+
+	export namespace workspace {
+		/**
+		 * Search text in files across all [workspace folders](#workspace.workspaceFolders) in the workspace.
+		 * @param query The query parameters for the search - the search string, whether it's case-sensitive, or a regex, or matches whole words.
+		 * @param callback A callback, called for each result
+		 * @param token A token that can be used to signal cancellation to the underlying search engine.
+		 * @return A thenable that resolves when the search is complete.
+		 */
+		export function findTextInFiles(query: TextSearchQuery, callback: (result: TextSearchResult) => void, token?: CancellationToken): Thenable<TextSearchComplete>;
+
+		/**
+		 * Search text in files across all [workspace folders](#workspace.workspaceFolders) in the workspace.
+		 * @param query The query parameters for the search - the search string, whether it's case-sensitive, or a regex, or matches whole words.
+		 * @param options An optional set of query options. Include and exclude patterns, maxResults, etc.
+		 * @param callback A callback, called for each result
+		 * @param token A token that can be used to signal cancellation to the underlying search engine.
+		 * @return A thenable that resolves when the search is complete.
+		 */
+		export function findTextInFiles(query: TextSearchQuery, options: FindTextInFilesOptions, callback: (result: TextSearchResult) => void, token?: CancellationToken): Thenable<TextSearchComplete>;
+	}
+
+	//#endregion
+
+	//#region diff command: https://github.com/microsoft/vscode/issues/84899
+
+	/**
+	 * The contiguous set of modified lines in a diff.
+	 */
+	export interface LineChange {
+		readonly originalStartLineNumber: number;
+		readonly originalEndLineNumber: number;
+		readonly modifiedStartLineNumber: number;
+		readonly modifiedEndLineNumber: number;
+	}
+
+	export namespace commands {
+
+		/**
+		 * Registers a diff information command that can be invoked via a keyboard shortcut,
+		 * a menu item, an action, or directly.
+		 *
+		 * Diff information commands are different from ordinary [commands](#commands.registerCommand) as
+		 * they only execute when there is an active diff editor when the command is called, and the diff
+		 * information has been computed. Also, the command handler of an editor command has access to
+		 * the diff information.
+		 *
+		 * @param command A unique identifier for the command.
+		 * @param callback A command handler function with access to the [diff information](#LineChange).
+		 * @param thisArg The `this` context used when invoking the handler function.
+		 * @return Disposable which unregisters this command on disposal.
+		 */
+		export function registerDiffInformationCommand(command: string, callback: (diff: LineChange[], ...args: any[]) => any, thisArg?: any): Disposable;
+	}
+
+	//#endregion
+
+	// eslint-disable-next-line vscode-dts-region-comments
+	//#region debug
+
+	/**
+	 * A DebugProtocolVariableContainer is an opaque stand-in type for the intersection of the Scope and Variable types defined in the Debug Adapter Protocol.
+	 * See https://microsoft.github.io/debug-adapter-protocol/specification#Types_Scope and https://microsoft.github.io/debug-adapter-protocol/specification#Types_Variable.
+	 */
+	export interface DebugProtocolVariableContainer {
+		// Properties: the intersection of DAP's Scope and Variable types.
+	}
+
+	/**
+	 * A DebugProtocolVariable is an opaque stand-in type for the Variable type defined in the Debug Adapter Protocol.
+	 * See https://microsoft.github.io/debug-adapter-protocol/specification#Types_Variable.
+	 */
+	export interface DebugProtocolVariable {
+		// Properties: see details [here](https://microsoft.github.io/debug-adapter-protocol/specification#Base_Protocol_Variable).
+	}
+
+	//#endregion
+
+	// eslint-disable-next-line vscode-dts-region-comments
+	//#region @joaomoreno: SCM validation
+
+	/**
+	 * Represents the validation type of the Source Control input.
+	 */
+	export enum SourceControlInputBoxValidationType {
+
+		/**
+		 * Something not allowed by the rules of a language or other means.
+		 */
+		Error = 0,
+
+		/**
+		 * Something suspicious but allowed.
+		 */
+		Warning = 1,
+
+		/**
+		 * Something to inform about but not a problem.
+		 */
+		Information = 2
+	}
+
+	export interface SourceControlInputBoxValidation {
+
+		/**
+		 * The validation message to display.
+		 */
+		readonly message: string;
+
+		/**
+		 * The validation type.
+		 */
+		readonly type: SourceControlInputBoxValidationType;
+	}
+
+	/**
+	 * Represents the input box in the Source Control viewlet.
+	 */
+	export interface SourceControlInputBox {
+
+		/**
+		 * A validation function for the input box. It's possible to change
+		 * the validation provider simply by setting this property to a different function.
+		 */
+		validateInput?(value: string, cursorPosition: number): ProviderResult<SourceControlInputBoxValidation | undefined | null>;
+	}
+
+	//#endregion
+
+	// eslint-disable-next-line vscode-dts-region-comments
+	//#region @joaomoreno: SCM selected provider
+
+	export interface SourceControl {
+
+		/**
+		 * Whether the source control is selected.
+		 */
+		readonly selected: boolean;
+
+		/**
+		 * An event signaling when the selection state changes.
+		 */
+		readonly onDidChangeSelection: Event<boolean>;
+	}
+
+	//#endregion
+
+	//#region Terminal data write event https://github.com/microsoft/vscode/issues/78502
+
+	export interface TerminalDataWriteEvent {
+		/**
+		 * The [terminal](#Terminal) for which the data was written.
+		 */
+		readonly terminal: Terminal;
+		/**
+		 * The data being written.
+		 */
+		readonly data: string;
+	}
+
+	namespace window {
+		/**
+		 * An event which fires when the terminal's child pseudo-device is written to (the shell).
+		 * In other words, this provides access to the raw data stream from the process running
+		 * within the terminal, including VT sequences.
+		 */
+		export const onDidWriteTerminalData: Event<TerminalDataWriteEvent>;
+	}
+
+	//#endregion
+
+	//#region Terminal dimensions property and change event https://github.com/microsoft/vscode/issues/55718
+
+	/**
+	 * An [event](#Event) which fires when a [Terminal](#Terminal)'s dimensions change.
+	 */
+	export interface TerminalDimensionsChangeEvent {
+		/**
+		 * The [terminal](#Terminal) for which the dimensions have changed.
+		 */
+		readonly terminal: Terminal;
+		/**
+		 * The new value for the [terminal's dimensions](#Terminal.dimensions).
+		 */
+		readonly dimensions: TerminalDimensions;
+	}
+
+	export namespace window {
+		/**
+		 * An event which fires when the [dimensions](#Terminal.dimensions) of the terminal change.
+		 */
+		export const onDidChangeTerminalDimensions: Event<TerminalDimensionsChangeEvent>;
+	}
+
+	export interface Terminal {
+		/**
+		 * The current dimensions of the terminal. This will be `undefined` immediately after the
+		 * terminal is created as the dimensions are not known until shortly after the terminal is
+		 * created.
+		 */
+		readonly dimensions: TerminalDimensions | undefined;
+	}
+
+	//#endregion
+
+	// eslint-disable-next-line vscode-dts-region-comments
+	//#region @jrieken -> exclusive document filters
+
+	export interface DocumentFilter {
+		readonly exclusive?: boolean;
+	}
+
+	//#endregion
+
+	//#region Tree View: https://github.com/microsoft/vscode/issues/61313 @alexr00
+	export interface TreeView<T> extends Disposable {
+		reveal(element: T | undefined, options?: { select?: boolean, focus?: boolean, expand?: boolean | number; }): Thenable<void>;
+	}
+	//#endregion
+
+	//#region Task presentation group: https://github.com/microsoft/vscode/issues/47265
+	export interface TaskPresentationOptions {
+		/**
+		 * Controls whether the task is executed in a specific terminal group using split panes.
+		 */
+		group?: string;
+	}
+	//#endregion
+
+	//#region Status bar item with ID and Name: https://github.com/microsoft/vscode/issues/74972
+
+	export namespace window {
+
+		/**
+		 * Options to configure the status bar item.
+		 */
+		export interface StatusBarItemOptions {
+
+			/**
+			 * A unique identifier of the status bar item. The identifier
+			 * is for example used to allow a user to show or hide the
+			 * status bar item in the UI.
+			 */
+			id: string;
+
+			/**
+			 * A human readable name of the status bar item. The name is
+			 * for example used as a label in the UI to show or hide the
+			 * status bar item.
+			 */
+			name: string;
+
+			/**
+			 * Accessibility information used when screen reader interacts with this status bar item.
+			 */
+			accessibilityInformation?: AccessibilityInformation;
+
+			/**
+			 * The alignment of the status bar item.
+			 */
+			alignment?: StatusBarAlignment;
+
+			/**
+			 * The priority of the status bar item. Higher value means the item should
+			 * be shown more to the left.
+			 */
+			priority?: number;
+		}
+
+		/**
+		 * Creates a status bar [item](#StatusBarItem).
+		 *
+		 * @param options The options of the item. If not provided, some default values
+		 * will be assumed. For example, the `StatusBarItemOptions.id` will be the id
+		 * of the extension and the `StatusBarItemOptions.name` will be the extension name.
+		 * @return A new status bar item.
+		 */
+		export function createStatusBarItem(options?: StatusBarItemOptions): StatusBarItem;
+	}
+
+	//#endregion
+
+	//#region Custom editor move https://github.com/microsoft/vscode/issues/86146
+
+	// TODO: Also for custom editor
+
+	export interface CustomTextEditorProvider {
+
+		/**
+		 * Handle when the underlying resource for a custom editor is renamed.
+		 *
+		 * This allows the webview for the editor be preserved throughout the rename. If this method is not implemented,
+		 * VS Code will destory the previous custom editor and create a replacement one.
+		 *
+		 * @param newDocument New text document to use for the custom editor.
+		 * @param existingWebviewPanel Webview panel for the custom editor.
+		 * @param token A cancellation token that indicates the result is no longer needed.
+		 *
+		 * @return Thenable indicating that the webview editor has been moved.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		moveCustomTextEditor?(newDocument: TextDocument, existingWebviewPanel: WebviewPanel, token: CancellationToken): Thenable<void>;
+	}
+
+	//#endregion
+
+	//#region allow QuickPicks to skip sorting: https://github.com/microsoft/vscode/issues/73904
+
+	export interface QuickPick<T extends QuickPickItem> extends QuickInput {
+		/**
+		 * An optional flag to sort the final results by index of first query match in label. Defaults to true.
+		 */
+		sortByLabel: boolean;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, Notebooks (misc)
+
+	export enum CellKind {
+		Markdown = 1,
+		Code = 2
+	}
+
+	export enum NotebookCellRunState {
+		Running = 1,
+		Idle = 2,
+		Success = 3,
+		Error = 4
+	}
+
+	export enum NotebookRunState {
+		Running = 1,
+		Idle = 2
+	}
+
+	// TODO@API
+	// make this a class, allow modified using with-pattern
+	export interface NotebookCellMetadata {
+		/**
+		 * Controls whether a cell's editor is editable/readonly.
+		 */
+		editable?: boolean;
+
+		/**
+		 * Controls if the cell has a margin to support the breakpoint UI.
+		 * This metadata is ignored for markdown cell.
+		 */
+		breakpointMargin?: boolean;
+
+		/**
+		 * Whether a code cell's editor is collapsed
+		 */
+		inputCollapsed?: boolean;
+
+		/**
+		 * Whether a code cell's outputs are collapsed
+		 */
+		outputCollapsed?: boolean;
+
+		/**
+		 * Additional attributes of a cell metadata.
+		 */
+		custom?: { [key: string]: any; };
+	}
+
+	// todo@API support ids https://github.com/jupyter/enhancement-proposals/blob/master/62-cell-id/cell-id.md
+	export interface NotebookCell {
+		readonly index: number;
+		readonly notebook: NotebookDocument;
+		readonly uri: Uri;
+		readonly cellKind: CellKind;
+		readonly document: TextDocument;
+		readonly language: string;
+		readonly outputs: readonly NotebookCellOutput[];
+		readonly metadata: NotebookCellMetadata;
+		/** @deprecated use WorkspaceEdit.replaceCellOutput */
+		// outputs: CellOutput[];
+		// readonly outputs2: NotebookCellOutput[];
+		/** @deprecated use WorkspaceEdit.replaceCellMetadata */
+		// metadata: NotebookCellMetadata;
+	}
+
+
+	export interface NotebookDocumentMetadata {
+		/**
+		 * Controls if users can add or delete cells
+		 * Defaults to true
+		 */
+		editable?: boolean;
+
+		/**
+		 * Default value for [cell editable metadata](#NotebookCellMetadata.editable).
+		 * Defaults to true.
+		 */
+		cellEditable?: boolean;
+		displayOrder?: GlobPattern[];
+
+		/**
+		 * Additional attributes of the document metadata.
+		 */
+		custom?: { [key: string]: any; };
+
+		/**
+		 * Whether the document is trusted, default to true
+		 * When false, insecure outputs like HTML, JavaScript, SVG will not be rendered.
+		 */
+		trusted?: boolean;
+
+		/**
+		 * Languages the document supports
+		 */
+		languages?: string[];
+	}
+
+	export interface NotebookDocumentContentOptions {
+		/**
+		 * Controls if outputs change will trigger notebook document content change and if it will be used in the diff editor
+		 * Default to false. If the content provider doesn't persisit the outputs in the file document, this should be set to true.
+		 */
+		transientOutputs: boolean;
+
+		/**
+		 * Controls if a meetadata property change will trigger notebook document content change and if it will be used in the diff editor
+		 * Default to false. If the content provider doesn't persisit a metadata property in the file document, it should be set to true.
+		 */
+		transientMetadata: { [K in keyof NotebookCellMetadata]?: boolean };
+	}
+
+	export interface NotebookDocument {
+		readonly uri: Uri;
+		readonly version: number;
+		readonly fileName: string;
+		readonly viewType: string;
+		readonly isDirty: boolean;
+		readonly isUntitled: boolean;
+		readonly cells: ReadonlyArray<NotebookCell>;
+		readonly contentOptions: NotebookDocumentContentOptions;
+		// todo@API
+		// - move to kernel -> control runnable state of a cell
+		// - remove from this type
+		languages: string[];
+		readonly metadata: NotebookDocumentMetadata;
+	}
+
+	// todo@API maybe have a NotebookCellPosition sibling
+	// todo@API should be a class
+	export interface NotebookCellRange {
+		readonly start: number;
+		/**
+		 * exclusive
+		 */
+		readonly end: number;
+	}
+
+	export enum NotebookEditorRevealType {
+		/**
+		 * The range will be revealed with as little scrolling as possible.
+		 */
+		Default = 0,
+		/**
+		 * The range will always be revealed in the center of the viewport.
+		 */
+		InCenter = 1,
+
+		/**
+		 * If the range is outside the viewport, it will be revealed in the center of the viewport.
+		 * Otherwise, it will be revealed with as little scrolling as possible.
+		 */
+		InCenterIfOutsideViewport = 2,
+
+		/**
+		 * The range will always be revealed at the top of the viewport.
+		 */
+		AtTop = 3
+	}
+
+	export interface NotebookEditor {
+		/**
+		 * The document associated with this notebook editor.
+		 */
+		readonly document: NotebookDocument;
+
+		/**
+		 * The primary selected cell on this notebook editor.
+		 */
+		// todo@API should not be undefined, rather a default
+		readonly selection?: NotebookCell;
+
+		// @rebornix
+		// todo@API should replace selection
+		// never empty!
+		// primary/secondary selections
+		// readonly selections: NotebookCellRange[];
+
+		/**
+		 * The current visible ranges in the editor (vertically).
+		 */
+		readonly visibleRanges: NotebookCellRange[];
+
+		revealRange(range: NotebookCellRange, revealType?: NotebookEditorRevealType): void;
+
+		/**
+		 * The column in which this editor shows.
+		 */
+		// @jrieken
+		// todo@API maybe never undefined because notebooks always show in the editor area (unlike text editors)
+		// maybe for notebook diff editor
+		readonly viewColumn?: ViewColumn;
+
+		/**
+		 * Fired when the panel is disposed.
+		 */
+		// @rebornix REMOVE/REplace NotebookCommunication
+		// todo@API fishy? notebooks are public objects, there should be a "global" events for this
+		readonly onDidDispose: Event<void>;
+	}
+
+	export interface NotebookDocumentMetadataChangeEvent {
+		readonly document: NotebookDocument;
+	}
+
+	export interface NotebookCellsChangeData {
+		readonly start: number;
+		readonly deletedCount: number;
+		readonly deletedItems: NotebookCell[];
+		readonly items: NotebookCell[];
+	}
+
+	export interface NotebookCellsChangeEvent {
+
+		/**
+		 * The affected document.
+		 */
+		readonly document: NotebookDocument;
+		readonly changes: ReadonlyArray<NotebookCellsChangeData>;
+	}
+
+	export interface NotebookCellOutputsChangeEvent {
+
+		/**
+		 * The affected document.
+		 */
+		readonly document: NotebookDocument;
+		readonly cells: NotebookCell[];
+	}
+
+	export interface NotebookCellLanguageChangeEvent {
+
+		/**
+		 * The affected document.
+		 */
+		readonly document: NotebookDocument;
+		readonly cell: NotebookCell;
+		readonly language: string;
+	}
+
+	export interface NotebookCellMetadataChangeEvent {
+		readonly document: NotebookDocument;
+		readonly cell: NotebookCell;
+	}
+
+	export interface NotebookEditorSelectionChangeEvent {
+		readonly notebookEditor: NotebookEditor;
+		// @rebornix
+		// todo@API show NotebookCellRange[] instead
+		readonly selection?: NotebookCell;
+	}
+
+	export interface NotebookEditorVisibleRangesChangeEvent {
+		readonly notebookEditor: NotebookEditor;
+		readonly visibleRanges: ReadonlyArray<NotebookCellRange>;
+	}
+
+	// todo@API support ids https://github.com/jupyter/enhancement-proposals/blob/master/62-cell-id/cell-id.md
+	export interface NotebookCellData {
+		readonly cellKind: CellKind;
+		readonly source: string;
+		readonly language: string;
+		// todo@API maybe use a separate data type?
+		readonly outputs: NotebookCellOutput[];
+		readonly metadata: NotebookCellMetadata | undefined;
+	}
+
+	export interface NotebookData {
+		readonly cells: NotebookCellData[];
+		readonly languages: string[];
+		readonly metadata: NotebookDocumentMetadata;
+	}
+
+
+	/**
+	 * Communication object passed to the {@link NotebookContentProvider} and
+	 * {@link NotebookOutputRenderer} to communicate with the webview.
+	 */
+	export interface NotebookCommunication {
+		/**
+		 * ID of the editor this object communicates with. A single notebook
+		 * document can have multiple attached webviews and editors, when the
+		 * notebook is split for instance. The editor ID lets you differentiate
+		 * between them.
+		 */
+		readonly editorId: string;
+
+		/**
+		 * Fired when the output hosting webview posts a message.
+		 */
+		readonly onDidReceiveMessage: Event<any>;
+		/**
+		 * Post a message to the output hosting webview.
+		 *
+		 * Messages are only delivered if the editor is live.
+		 *
+		 * @param message Body of the message. This must be a string or other json serializable object.
+		 */
+		postMessage(message: any): Thenable<boolean>;
+
+		/**
+		 * Convert a uri for the local file system to one that can be used inside outputs webview.
+		 */
+		asWebviewUri(localResource: Uri): Uri;
+
+		// @rebornix
+		// readonly onDidDispose: Event<void>;
+	}
+
+	// export function registerNotebookKernel(selector: string, kernel: NotebookKernel): Disposable;
+
+
+	export interface NotebookDocumentShowOptions {
+		viewColumn?: ViewColumn;
+		preserveFocus?: boolean;
+		preview?: boolean;
+		selection?: NotebookCellRange;
+	}
+
+	export namespace notebook {
+
+		export function openNotebookDocument(uri: Uri, viewType?: string): Thenable<NotebookDocument>;
+		export const onDidOpenNotebookDocument: Event<NotebookDocument>;
+		export const onDidCloseNotebookDocument: Event<NotebookDocument>;
+
+		// todo@API really needed?
+		export const onDidSaveNotebookDocument: Event<NotebookDocument>;
+
+		/**
+		 * All currently known notebook documents.
+		 */
+		export const notebookDocuments: ReadonlyArray<NotebookDocument>;
+		export const onDidChangeNotebookDocumentMetadata: Event<NotebookDocumentMetadataChangeEvent>;
+		export const onDidChangeNotebookCells: Event<NotebookCellsChangeEvent>;
+		export const onDidChangeCellOutputs: Event<NotebookCellOutputsChangeEvent>;
+		export const onDidChangeCellLanguage: Event<NotebookCellLanguageChangeEvent>;
+		export const onDidChangeCellMetadata: Event<NotebookCellMetadataChangeEvent>;
+	}
+
+	export namespace window {
+		export const visibleNotebookEditors: NotebookEditor[];
+		export const onDidChangeVisibleNotebookEditors: Event<NotebookEditor[]>;
+		export const activeNotebookEditor: NotebookEditor | undefined;
+		export const onDidChangeActiveNotebookEditor: Event<NotebookEditor | undefined>;
+		export const onDidChangeNotebookEditorSelection: Event<NotebookEditorSelectionChangeEvent>;
+		export const onDidChangeNotebookEditorVisibleRanges: Event<NotebookEditorVisibleRangesChangeEvent>;
+		export function showNotebookDocument(document: NotebookDocument, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookCellOutput
+
+	// code specific mime types
+	// application/x.notebook.error-traceback
+	// application/x.notebook.stream
+	export class NotebookCellOutputItem {
+
+		// todo@API
+		// add factory functions for common mime types
+		// static textplain(value:string): NotebookCellOutputItem;
+		// static errortrace(value:any): NotebookCellOutputItem;
+
+		readonly mime: string;
+		readonly value: unknown;
+		readonly metadata?: Record<string, string | number | boolean | unknown>;
+
+		constructor(mime: string, value: unknown, metadata?: Record<string, string | number | boolean | unknown>);
+	}
+
+	// @jrieken
+	//TODO@API add execution count to cell output?
+	export class NotebookCellOutput {
+		readonly id: string;
+		readonly outputs: NotebookCellOutputItem[];
+		constructor(outputs: NotebookCellOutputItem[], id?: string);
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookEditorEdit
+
+	export interface WorkspaceEdit {
+		replaceNotebookMetadata(uri: Uri, value: NotebookDocumentMetadata): void;
+
+		// todo@API use NotebookCellRange
+		replaceNotebookCells(uri: Uri, start: number, end: number, cells: NotebookCellData[], metadata?: WorkspaceEditEntryMetadata): void;
+		replaceNotebookCellMetadata(uri: Uri, index: number, cellMetadata: NotebookCellMetadata, metadata?: WorkspaceEditEntryMetadata): void;
+
+		replaceNotebookCellOutput(uri: Uri, index: number, outputs: NotebookCellOutput[], metadata?: WorkspaceEditEntryMetadata): void;
+		appendNotebookCellOutput(uri: Uri, index: number, outputs: NotebookCellOutput[], metadata?: WorkspaceEditEntryMetadata): void;
+
+		// TODO@api
+		// https://jupyter-protocol.readthedocs.io/en/latest/messaging.html#update-display-data
+		replaceNotebookCellOutputItems(uri: Uri, index: number, outputId: string, items: NotebookCellOutputItem[], metadata?: WorkspaceEditEntryMetadata): void;
+		appendNotebookCellOutputItems(uri: Uri, index: number, outputId: string, items: NotebookCellOutputItem[], metadata?: WorkspaceEditEntryMetadata): void;
+	}
+
+	export interface NotebookEditorEdit {
+		replaceMetadata(value: NotebookDocumentMetadata): void;
+		replaceCells(start: number, end: number, cells: NotebookCellData[]): void;
+		replaceCellOutput(index: number, outputs: NotebookCellOutput[]): void;
+		replaceCellMetadata(index: number, metadata: NotebookCellMetadata): void;
+	}
+
+	export interface NotebookEditor {
+		/**
+		 * Perform an edit on the notebook associated with this notebook editor.
+		 *
+		 * The given callback-function is invoked with an [edit-builder](#NotebookEditorEdit) which must
+		 * be used to make edits. Note that the edit-builder is only valid while the
+		 * callback executes.
+		 *
+		 * @param callback A function which can create edits using an [edit-builder](#NotebookEditorEdit).
+		 * @return A promise that resolves with a value indicating if the edits could be applied.
+		 */
+		// @jrieken REMOVE maybe
+		edit(callback: (editBuilder: NotebookEditorEdit) => void): Thenable<boolean>;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookContentProvider
+
+	interface NotebookDocumentBackup {
+		/**
+		 * Unique identifier for the backup.
+		 *
+		 * This id is passed back to your extension in `openNotebook` when opening a notebook editor from a backup.
+		 */
+		readonly id: string;
+
+		/**
+		 * Delete the current backup.
+		 *
+		 * This is called by VS Code when it is clear the current backup is no longer needed, such as when a new backup
+		 * is made or when the file is saved.
+		 */
+		delete(): void;
+	}
+
+	interface NotebookDocumentBackupContext {
+		readonly destination: Uri;
+	}
+
+	interface NotebookDocumentOpenContext {
+		readonly backupId?: string;
+	}
+
+	export interface NotebookContentProvider {
+		readonly options?: NotebookDocumentContentOptions;
+		readonly onDidChangeNotebookContentOptions?: Event<NotebookDocumentContentOptions>;
+		/**
+		 * Content providers should always use [file system providers](#FileSystemProvider) to
+		 * resolve the raw content for `uri` as the resouce is not necessarily a file on disk.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		openNotebook(uri: Uri, openContext: NotebookDocumentOpenContext): NotebookData | Thenable<NotebookData>;
+		// eslint-disable-next-line vscode-dts-provider-naming
+		// eslint-disable-next-line vscode-dts-cancellation
+		resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Thenable<void>;
+		// eslint-disable-next-line vscode-dts-provider-naming
+		saveNotebook(document: NotebookDocument, cancellation: CancellationToken): Thenable<void>;
+		// eslint-disable-next-line vscode-dts-provider-naming
+		saveNotebookAs(targetResource: Uri, document: NotebookDocument, cancellation: CancellationToken): Thenable<void>;
+		// eslint-disable-next-line vscode-dts-provider-naming
+		backupNotebook(document: NotebookDocument, context: NotebookDocumentBackupContext, cancellation: CancellationToken): Thenable<NotebookDocumentBackup>;
+
+		// ???
+		// provideKernels(document: NotebookDocument, token: CancellationToken): ProviderResult<T[]>;
+	}
+
+	export namespace notebook {
+
+		// TODO@api use NotebookDocumentFilter instead of just notebookType:string?
+		// TODO@API options duplicates the more powerful variant on NotebookContentProvider
+		export function registerNotebookContentProvider(notebookType: string, provider: NotebookContentProvider,
+			options?: NotebookDocumentContentOptions & {
+				/**
+				 * Not ready for production or development use yet.
+				 */
+				viewOptions?: {
+					displayName: string;
+					filenamePattern: NotebookFilenamePattern[];
+					exclusive?: boolean;
+				};
+			}
+		): Disposable;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookKernel
+
+	export interface NotebookDocumentMetadata {
+
+		/**
+		 * Controls whether the full notebook can be run at once.
+		 * Defaults to true
+		 */
+		// todo@API infer from kernel
+		// todo@API remove
+		runnable?: boolean;
+
+		/**
+		 * Default value for [cell runnable metadata](#NotebookCellMetadata.runnable).
+		 * Defaults to true.
+		 */
+		cellRunnable?: boolean;
+
+		/**
+		 * Default value for [cell hasExecutionOrder metadata](#NotebookCellMetadata.hasExecutionOrder).
+		 * Defaults to true.
+		 */
+		cellHasExecutionOrder?: boolean;
+
+		/**
+		 * The document's current run state
+		 */
+		runState?: NotebookRunState;
+	}
+
+	// todo@API use the NotebookCellExecution-object as a container to model and enforce
+	// the flow of a cell execution
+
+	// kernel -> execute_info
+	// ext -> createNotebookCellExecution(cell)
+	// kernel -> done
+	// exec.dispose();
+
+	// export interface NotebookCellExecution {
+	// 	dispose(): void;
+	// 	clearOutput(): void;
+	// 	appendOutput(out: NotebookCellOutput): void;
+	// 	replaceOutput(out: NotebookCellOutput): void;
+	//  appendOutputItems(output:string, items: NotebookCellOutputItem[]):void;
+	//  replaceOutputItems(output:string, items: NotebookCellOutputItem[]):void;
+	// }
+
+	// export function createNotebookCellExecution(cell: NotebookCell, startTime?: number): NotebookCellExecution;
+	// export const onDidStartNotebookCellExecution: Event<any>;
+	// export const onDidStopNotebookCellExecution: Event<any>;
+
+	export interface NotebookCellMetadata {
+
+		/**
+		 * Controls if the cell is executable.
+		 * This metadata is ignored for markdown cell.
+		 */
+		// todo@API infer from kernel
+		runnable?: boolean;
+
+		/**
+		 * Whether the [execution order](#NotebookCellMetadata.executionOrder) indicator will be displayed.
+		 * Defaults to true.
+		 */
+		hasExecutionOrder?: boolean;
+
+		/**
+		 * The order in which this cell was executed.
+		 */
+		executionOrder?: number;
+
+		/**
+		 * A status message to be shown in the cell's status bar
+		 */
+		// todo@API duplicates status bar API
+		statusMessage?: string;
+
+		/**
+		 * The cell's current run state
+		 */
+		runState?: NotebookCellRunState;
+
+		/**
+		 * If the cell is running, the time at which the cell started running
+		 */
+		runStartTime?: number;
+
+		/**
+		 * The total duration of the cell's last run
+		 */
+		// todo@API depends on having output
+		lastRunDuration?: number;
+	}
+
+	export interface NotebookKernel {
+		readonly id?: string;
+		label: string;
+		description?: string;
+		detail?: string;
+		isPreferred?: boolean;
+		preloads?: Uri[];
+
+		// todo@API
+		// languages supported by kernel
+		// first is preferred
+		// languages: string[];
+
+		// @roblourens
+		// todo@API change to `executeCells(document: NotebookDocument, cells: NotebookCellRange[], context:{isWholeNotebooke: boolean}, token: CancelationToken): void;`
+		// todo@API interrupt vs cancellation, https://github.com/microsoft/vscode/issues/106741
+		// interrupt?():void;
+		executeCell(document: NotebookDocument, cell: NotebookCell): void;
+		cancelCellExecution(document: NotebookDocument, cell: NotebookCell): void;
+		executeAllCells(document: NotebookDocument): void;
+		cancelAllCellsExecution(document: NotebookDocument): void;
+	}
+
+	export type NotebookFilenamePattern = GlobPattern | { include: GlobPattern; exclude: GlobPattern; };
+
+	// todo@API why not for NotebookContentProvider?
+	export interface NotebookDocumentFilter {
+		viewType?: string | string[];
+		filenamePattern?: NotebookFilenamePattern;
+	}
+
+	// todo@API very unclear, provider MUST not return alive object but only data object
+	// todo@API unclear how the flow goes
+	export interface NotebookKernelProvider<T extends NotebookKernel = NotebookKernel> {
+		onDidChangeKernels?: Event<NotebookDocument | undefined>;
+		provideKernels(document: NotebookDocument, token: CancellationToken): ProviderResult<T[]>;
+		resolveKernel?(kernel: T, document: NotebookDocument, webview: NotebookCommunication, token: CancellationToken): ProviderResult<void>;
+	}
+
+	export interface NotebookEditor {
+		/**
+		 * Active kernel used in the editor
+		 */
+		// todo@API unsure about that
+		// kernel, kernel selection, kernel provider
+		readonly kernel?: NotebookKernel;
+	}
+
+	export namespace notebook {
+		export const onDidChangeActiveNotebookKernel: Event<{ document: NotebookDocument, kernel: NotebookKernel | undefined; }>;
+
+		export function registerNotebookKernelProvider(selector: NotebookDocumentFilter, provider: NotebookKernelProvider): Disposable;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookEditorDecorationType
+
+	export interface NotebookEditor {
+		setDecorations(decorationType: NotebookEditorDecorationType, range: NotebookCellRange): void;
+	}
+
+	export interface NotebookDecorationRenderOptions {
+		backgroundColor?: string | ThemeColor;
+		borderColor?: string | ThemeColor;
+		top: ThemableDecorationAttachmentRenderOptions;
+	}
+
+	export interface NotebookEditorDecorationType {
+		readonly key: string;
+		dispose(): void;
+	}
+
+	export namespace notebook {
+		export function createNotebookEditorDecorationType(options: NotebookDecorationRenderOptions): NotebookEditorDecorationType;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookCellStatusBarItem
+
+	/**
+	 * Represents the alignment of status bar items.
+	 */
+	export enum NotebookCellStatusBarAlignment {
+
+		/**
+		 * Aligned to the left side.
+		 */
+		Left = 1,
+
+		/**
+		 * Aligned to the right side.
+		 */
+		Right = 2
+	}
+
+	export interface NotebookCellStatusBarItem {
+		readonly cell: NotebookCell;
+		readonly alignment: NotebookCellStatusBarAlignment;
+		readonly priority?: number;
+		text: string;
+		tooltip: string | undefined;
+		command: string | Command | undefined;
+		accessibilityInformation?: AccessibilityInformation;
+		show(): void;
+		hide(): void;
+		dispose(): void;
+	}
+
+	export namespace notebook {
+		/**
+		 * Creates a notebook cell status bar [item](#NotebookCellStatusBarItem).
+		 * It will be disposed automatically when the notebook document is closed or the cell is deleted.
+		 *
+		 * @param cell The cell on which this item should be shown.
+		 * @param alignment The alignment of the item.
+		 * @param priority The priority of the item. Higher values mean the item should be shown more to the left.
+		 * @return A new status bar item.
+		 */
+		// @roblourens
+		// todo@API this should be a provider, https://github.com/microsoft/vscode/issues/105809
+		export function createCellStatusBarItem(cell: NotebookCell, alignment?: NotebookCellStatusBarAlignment, priority?: number): NotebookCellStatusBarItem;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookConcatTextDocument
+
+	export namespace notebook {
+		/**
+		 * Create a document that is the concatenation of all  notebook cells. By default all code-cells are included
+		 * but a selector can be provided to narrow to down the set of cells.
+		 *
+		 * @param notebook
+		 * @param selector
+		 */
+		// @jrieken REMOVE. p_never
+		// todo@API really needed? we didn't find a user here
+		export function createConcatTextDocument(notebook: NotebookDocument, selector?: DocumentSelector): NotebookConcatTextDocument;
+	}
+
+	export interface NotebookConcatTextDocument {
+		uri: Uri;
+		isClosed: boolean;
+		dispose(): void;
+		onDidChange: Event<void>;
+		version: number;
+		getText(): string;
+		getText(range: Range): string;
+
+		offsetAt(position: Position): number;
+		positionAt(offset: number): Position;
+		validateRange(range: Range): Range;
+		validatePosition(position: Position): Position;
+
+		locationAt(positionOrRange: Position | Range): Location;
+		positionAt(location: Location): Position;
+		contains(uri: Uri): boolean;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/39441
+
+	export interface CompletionItem {
+		/**
+		 * Will be merged into CompletionItem#label
+		 */
+		label2?: CompletionItemLabel;
+	}
+
+	export interface CompletionItemLabel {
+		/**
+		 * The function or variable. Rendered leftmost.
+		 */
+		name: string;
+
+		/**
+		 * The parameters without the return type. Render after `name`.
+		 */
+		parameters?: string;
+
+		/**
+		 * The fully qualified name, like package name or file path. Rendered after `signature`.
+		 */
+		qualifier?: string;
+
+		/**
+		 * The return-type of a function or type of a property/variable. Rendered rightmost.
+		 */
+		type?: string;
+	}
+
+	//#endregion
+
+	//#region @eamodio - timeline: https://github.com/microsoft/vscode/issues/84297
+
+	export class TimelineItem {
+		/**
+		 * A timestamp (in milliseconds since 1 January 1970 00:00:00) for when the timeline item occurred.
+		 */
+		timestamp: number;
+
+		/**
+		 * A human-readable string describing the timeline item.
+		 */
+		label: string;
+
+		/**
+		 * Optional id for the timeline item. It must be unique across all the timeline items provided by this source.
+		 *
+		 * If not provided, an id is generated using the timeline item's timestamp.
+		 */
+		id?: string;
+
+		/**
+		 * The icon path or [ThemeIcon](#ThemeIcon) for the timeline item.
+		 */
+		iconPath?: Uri | { light: Uri; dark: Uri; } | ThemeIcon;
+
+		/**
+		 * A human readable string describing less prominent details of the timeline item.
+		 */
+		description?: string;
+
+		/**
+		 * The tooltip text when you hover over the timeline item.
+		 */
+		detail?: string;
+
+		/**
+		 * The [command](#Command) that should be executed when the timeline item is selected.
+		 */
+		command?: Command;
+
+		/**
+		 * Context value of the timeline item. This can be used to contribute specific actions to the item.
+		 * For example, a timeline item is given a context value as `commit`. When contributing actions to `timeline/item/context`
+		 * using `menus` extension point, you can specify context value for key `timelineItem` in `when` expression like `timelineItem == commit`.
+		 * ```
+		 *	"contributes": {
+		 *		"menus": {
+		 *			"timeline/item/context": [
+		 *				{
+		 *					"command": "extension.copyCommitId",
+		 *					"when": "timelineItem == commit"
+		 *				}
+		 *			]
+		 *		}
+		 *	}
+		 * ```
+		 * This will show the `extension.copyCommitId` action only for items where `contextValue` is `commit`.
+		 */
+		contextValue?: string;
+
+		/**
+		 * Accessibility information used when screen reader interacts with this timeline item.
+		 */
+		accessibilityInformation?: AccessibilityInformation;
+
+		/**
+		 * @param label A human-readable string describing the timeline item
+		 * @param timestamp A timestamp (in milliseconds since 1 January 1970 00:00:00) for when the timeline item occurred
+		 */
+		constructor(label: string, timestamp: number);
+	}
+
+	export interface TimelineChangeEvent {
+		/**
+		 * The [uri](#Uri) of the resource for which the timeline changed.
+		 */
+		uri: Uri;
+
+		/**
+		 * A flag which indicates whether the entire timeline should be reset.
+		 */
+		reset?: boolean;
+	}
+
+	export interface Timeline {
+		readonly paging?: {
+			/**
+			 * A provider-defined cursor specifying the starting point of timeline items which are after the ones returned.
+			 * Use `undefined` to signal that there are no more items to be returned.
+			 */
+			readonly cursor: string | undefined;
+		};
+
+		/**
+		 * An array of [timeline items](#TimelineItem).
+		 */
+		readonly items: readonly TimelineItem[];
+	}
+
+	export interface TimelineOptions {
+		/**
+		 * A provider-defined cursor specifying the starting point of the timeline items that should be returned.
+		 */
+		cursor?: string;
+
+		/**
+		 * An optional maximum number timeline items or the all timeline items newer (inclusive) than the timestamp or id that should be returned.
+		 * If `undefined` all timeline items should be returned.
+		 */
+		limit?: number | { timestamp: number; id?: string; };
+	}
+
+	export interface TimelineProvider {
+		/**
+		 * An optional event to signal that the timeline for a source has changed.
+		 * To signal that the timeline for all resources (uris) has changed, do not pass any argument or pass `undefined`.
+		 */
+		onDidChange?: Event<TimelineChangeEvent | undefined>;
+
+		/**
+		 * An identifier of the source of the timeline items. This can be used to filter sources.
+		 */
+		readonly id: string;
+
+		/**
+		 * A human-readable string describing the source of the timeline items. This can be used as the display label when filtering sources.
+		 */
+		readonly label: string;
+
+		/**
+		 * Provide [timeline items](#TimelineItem) for a [Uri](#Uri).
+		 *
+		 * @param uri The [uri](#Uri) of the file to provide the timeline for.
+		 * @param options A set of options to determine how results should be returned.
+		 * @param token A cancellation token.
+		 * @return The [timeline result](#TimelineResult) or a thenable that resolves to such. The lack of a result
+		 * can be signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideTimeline(uri: Uri, options: TimelineOptions, token: CancellationToken): ProviderResult<Timeline>;
+	}
+
+	export namespace workspace {
+		/**
+		 * Register a timeline provider.
+		 *
+		 * Multiple providers can be registered. In that case, providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param scheme A scheme or schemes that defines which documents this provider is applicable to. Can be `*` to target all documents.
+		 * @param provider A timeline provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		*/
+		export function registerTimelineProvider(scheme: string | string[], provider: TimelineProvider): Disposable;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/91555
+
+	export enum StandardTokenType {
+		Other = 0,
+		Comment = 1,
+		String = 2,
+		RegEx = 4
+	}
+
+	export interface TokenInformation {
+		type: StandardTokenType;
+		range: Range;
+	}
+
+	export namespace languages {
+		export function getTokenInformationAtPosition(document: TextDocument, position: Position): Thenable<TokenInformation>;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/16221
+
+	// todo@API rename to InlayHint
+	// todo@API add "mini-markdown" for links and styles
+	// todo@API remove description
+	// (done:)  add InlayHintKind with type, argument, etc
+
+	export namespace languages {
+		/**
+		 * Register a inline hints provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider An inline hints provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerInlineHintsProvider(selector: DocumentSelector, provider: InlineHintsProvider): Disposable;
+	}
+
+	export enum InlineHintKind {
+		Other = 0,
+		Type = 1,
+		Parameter = 2,
+	}
+
+	/**
+	 * Inline hint information.
+	 */
+	export class InlineHint {
+		/**
+		 * The text of the hint.
+		 */
+		text: string;
+		/**
+		 * The range of the hint.
+		 */
+		range: Range;
+
+		kind?: InlineHintKind;
+
+		// todo@API remove this
+		description?: string | MarkdownString;
+		/**
+		 * Whitespace before the hint.
+		 */
+		whitespaceBefore?: boolean;
+		/**
+		 * Whitespace after the hint.
+		 */
+		whitespaceAfter?: boolean;
+
+		constructor(text: string, range: Range, kind?: InlineHintKind);
+	}
+
+	/**
+	 * The inline hints provider interface defines the contract between extensions and
+	 * the inline hints feature.
+	 */
+	export interface InlineHintsProvider {
+
+		/**
+		 * An optional event to signal that inline hints have changed.
+		 * @see [EventEmitter](#EventEmitter)
+		 */
+		onDidChangeInlineHints?: Event<void>;
+
+		/**
+		 * @param model The document in which the command was invoked.
+		 * @param range The range for which line hints should be computed.
+		 * @param token A cancellation token.
+		 *
+		 * @return A list of arguments labels or a thenable that resolves to such.
+		 */
+		provideInlineHints(model: TextDocument, range: Range, token: CancellationToken): ProviderResult<InlineHint[]>;
+	}
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/104436
+
+	export enum ExtensionRuntime {
+		/**
+		 * The extension is running in a NodeJS extension host. Runtime access to NodeJS APIs is available.
+		 */
+		Node = 1,
+		/**
+		 * The extension is running in a Webworker extension host. Runtime access is limited to Webworker APIs.
+		 */
+		Webworker = 2
+	}
+
+	export interface ExtensionContext {
+		readonly extensionRuntime: ExtensionRuntime;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/102091
+
+	export interface TextDocument {
+
+		/**
+		 * The [notebook](#NotebookDocument) that contains this document as a notebook cell or `undefined` when
+		 * the document is not contained by a notebook (this should be the more frequent case).
+		 */
+		notebook: NotebookDocument | undefined;
+	}
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/107467
+	/*
+		General activation events:
+			- `onLanguage:*` most test extensions will want to activate when their
+				language is opened to provide code lenses.
+			- `onTests:*` new activation event very simiular to `workspaceContains`,
+				but only fired when the user wants to run tests or opens the test explorer.
+	*/
+	export namespace test {
+		/**
+		 * Registers a provider that discovers tests for the given document
+		 * selectors. It is activated when either tests need to be enumerated, or
+		 * a document matching the selector is opened.
+		 */
+		export function registerTestProvider<T extends TestItem>(testProvider: TestProvider<T>): Disposable;
+
+		/**
+		 * Runs tests. The "run" contains the list of tests to run as well as a
+		 * method that can be used to update their state. At the point in time
+		 * that "run" is called, all tests given in the run have their state
+		 * automatically set to {@link TestRunState.Queued}.
+		 */
+		export function runTests<T extends TestItem>(run: TestRunOptions<T>, cancellationToken?: CancellationToken): Thenable<void>;
+
+		/**
+		 * Returns an observer that retrieves tests in the given workspace folder.
+		 */
+		export function createWorkspaceTestObserver(workspaceFolder: WorkspaceFolder): TestObserver;
+
+		/**
+		 * Returns an observer that retrieves tests in the given text document.
+		 */
+		export function createDocumentTestObserver(document: TextDocument): TestObserver;
+
+		/**
+		 * The last or selected test run. Cleared when a new test run starts.
+		 */
+		export const testResults: TestResults | undefined;
+
+		/**
+		 * Event that fires when the testResults are updated.
+		 */
+		export const onDidChangeTestResults: Event<void>;
+	}
+
+	export interface TestResults {
+		/**
+		 * The results from the latest test run. The array contains a snapshot of
+		 * all tests involved in the run at the moment when it completed.
+		 */
+		readonly tests: ReadonlyArray<RequiredTestItem> | undefined;
+	}
+
+	export interface TestObserver {
+		/**
+		 * List of tests returned by test provider for files in the workspace.
+		 */
+		readonly tests: ReadonlyArray<RequiredTestItem>;
+
+		/**
+		 * An event that fires when an existing test in the collection changes, or
+		 * null if a top-level test was added or removed. When fired, the consumer
+		 * should check the test item and all its children for changes.
+		 */
+		readonly onDidChangeTest: Event<TestChangeEvent>;
+
+		/**
+		 * An event the fires when all test providers have signalled that the tests
+		 * the observer references have been discovered. Providers may continue to
+		 * watch for changes and cause {@link onDidChangeTest} to fire as files
+		 * change, until the observer is disposed.
+		 *
+		 * @todo as below
+		 */
+		readonly onDidDiscoverInitialTests: Event<void>;
+
+		/**
+		 * Dispose of the observer, allowing VS Code to eventually tell test
+		 * providers that they no longer need to update tests.
+		 */
+		dispose(): void;
+	}
+
+	export interface TestChangeEvent {
+		/**
+		 * List of all tests that are newly added.
+		 */
+		readonly added: ReadonlyArray<RequiredTestItem>;
+
+		/**
+		 * List of existing tests that have updated.
+		 */
+		readonly updated: ReadonlyArray<RequiredTestItem>;
+
+		/**
+		 * List of existing tests that have been removed.
+		 */
+		readonly removed: ReadonlyArray<RequiredTestItem>;
+
+		/**
+		 * Highest node in the test tree under which changes were made. This can
+		 * be easily plugged into events like the TreeDataProvider update event.
+		 */
+		readonly commonChangeAncestor: RequiredTestItem | null;
+	}
+
+	/**
+	 * Tree of tests returned from the provide methods in the {@link TestProvider}.
+	 */
+	export interface TestHierarchy<T extends TestItem> {
+		/**
+		 * Root node for tests. The `testRoot` instance must not be replaced over
+		 * the lifespan of the TestHierarchy, since you will need to reference it
+		 * in `onDidChangeTest` when a test is added or removed.
+		 */
+		readonly root: T;
+
+		/**
+		 * An event that fires when an existing test under the `root` changes.
+		 * This can be a result of a state change in a test run, a property update,
+		 * or an update to its children. Changes made to tests will not be visible
+		 * to {@link TestObserver} instances until this event is fired.
+		 *
+		 * This will signal a change recursively to all children of the given node.
+		 * For example, firing the event with the {@link testRoot} will refresh
+		 * all tests.
+		 */
+		readonly onDidChangeTest: Event<T>;
+
+		/**
+		 * Promise that should be resolved when all tests that are initially
+		 * defined have been discovered. The provider should continue to watch for
+		 * changes and fire `onDidChangeTest` until the hierarchy is disposed.
+		 */
+		readonly discoveredInitialTests?: Thenable<unknown>;
+
+		/**
+		 * An event that fires when a test becomes outdated, as a result of
+		 * file changes, for example. In "watch" mode, tests that are outdated
+		 * will be automatically re-run after a short delay. Firing a test
+		 * with children will mark the entire subtree as outdated.
+		 */
+		readonly onDidInvalidateTest?: Event<T>;
+
+		/**
+		 * Dispose will be called when there are no longer observers interested
+		 * in the hierarchy.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Discovers and provides tests. It's expected that the TestProvider will
+	 * ambiently listen to {@link vscode.window.onDidChangeVisibleTextEditors} to
+	 * provide test information about the open files for use in code lenses and
+	 * other file-specific UI.
+	 *
+	 * Additionally, the UI may request it to discover tests for the workspace
+	 * via `addWorkspaceTests`.
+	 *
+	 * @todo rename from provider
+	 */
+	export interface TestProvider<T extends TestItem = TestItem> {
+		/**
+		 * Requests that tests be provided for the given workspace. This will
+		 * generally be called when tests need to be enumerated for the
+		 * workspace.
+		 *
+		 * It's guaranteed that this method will not be called again while
+		 * there is a previous undisposed watcher for the given workspace folder.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		createWorkspaceTestHierarchy?(workspace: WorkspaceFolder): TestHierarchy<T> | undefined;
+
+		/**
+		 * Requests that tests be provided for the given document. This will
+		 * be called when tests need to be enumerated for a single open file,
+		 * for instance by code lens UI.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		createDocumentTestHierarchy?(document: TextDocument): TestHierarchy<T> | undefined;
+
+		/**
+		 * Starts a test run. This should cause {@link onDidChangeTest} to
+		 * fire with update test states during the run.
+		 * @todo this will eventually need to be able to return a summary report, coverage for example.
+		 */
+		// eslint-disable-next-line vscode-dts-provider-naming
+		runTests?(options: TestRun<T>, cancellationToken: CancellationToken): ProviderResult<void>;
+	}
+
+	/**
+	 * Options given to {@link test.runTests}
+	 */
+	export interface TestRunOptions<T extends TestItem = TestItem> {
+		/**
+		 * Array of specific tests to run. The {@link TestProvider.testRoot} may
+		 * be provided as an indication to run all tests.
+		 */
+		tests: T[];
+
+		/**
+		 * Whether or not tests in this run should be debugged.
+		 */
+		debug: boolean;
+	}
+
+	/**
+	 * Options given to `TestProvider.runTests`
+	 */
+	export interface TestRun<T extends TestItem = TestItem> extends TestRunOptions<T> {
+		/**
+		 * Updates the state of the test in the run. By default, all tests involved
+		 * in the run will have a "queued" state until they are updated by this method.
+		 */
+		setState(test: T, state: TestState): void;
+	}
+
+	/**
+	 * A test item is an item shown in the "test explorer" view. It encompasses
+	 * both a suite and a test, since they have almost or identical capabilities.
+	 */
+	export interface TestItem {
+		/**
+		 * Display name describing the test case.
+		 */
+		label: string;
+
+		/**
+		 * Optional unique identifier for the TestItem. This is used to correlate
+		 * test results and tests in the document with those in the workspace
+		 * (test explorer). This must not change for the lifetime of a test item.
+		 *
+		 * If the ID is not provided, it defaults to the concatenation of the
+		 * item's label and its parent's ID, if any.
+		 */
+		readonly id?: string;
+
+		/**
+		 * Optional description that appears next to the label.
+		 */
+		description?: string;
+
+		/**
+		 * Whether this test item can be run individually, defaults to `true`
+		 * if not provided.
+		 *
+		 * In some cases, like Go's tests, test can have children but these
+		 * children cannot be run independently.
+		 */
+		runnable?: boolean;
+
+		/**
+		 * Whether this test item can be debugged. Defaults to `false` if not provided.
+		 */
+		debuggable?: boolean;
+
+		/**
+		 * VS Code location.
+		 */
+		location?: Location;
+
+		/**
+		 * Optional list of nested tests for this item.
+		 */
+		children?: TestItem[];
+	}
+
+	/**
+	 * A {@link TestItem} with its defaults filled in.
+	 */
+	export type RequiredTestItem = {
+		[K in keyof Required<TestItem>]: K extends 'children'
+		? RequiredTestItem[]
+		: (K extends 'description' | 'location' ? TestItem[K] : Required<TestItem>[K])
+	};
+
+	export enum TestRunState {
+		// Initial state
+		Unset = 0,
+		// Test will be run, but is not currently running.
+		Queued = 1,
+		// Test is currently running
+		Running = 2,
+		// Test run has passed
+		Passed = 3,
+		// Test run has failed (on an assertion)
+		Failed = 4,
+		// Test run has been skipped
+		Skipped = 5,
+		// Test run failed for some other reason (compilation error, timeout, etc)
+		Errored = 6
+	}
+
+	/**
+	 * TestState includes a test and its run state. This is included in the
+	 * {@link TestItem} and is immutable; it should be replaced in th TestItem
+	 * in order to update it. This allows consumers to quickly and easily check
+	 * for changes via object identity.
+	 */
+	export interface TestState {
+		/**
+		 * Current state of the test.
+		 */
+		readonly state: TestRunState;
+
+		/**
+		 * Optional duration of the test run, in milliseconds.
+		 */
+		readonly duration?: number;
+
+		/**
+		 * Associated test run message. Can, for example, contain assertion
+		 * failure information if the test fails.
+		 */
+		readonly messages?: ReadonlyArray<Readonly<TestMessage>>;
+	}
+
+	/**
+	 * Represents the severity of test messages.
+	 */
+	export enum TestMessageSeverity {
+		Error = 0,
+		Warning = 1,
+		Information = 2,
+		Hint = 3
+	}
+
+	/**
+	 * Message associated with the test state. Can be linked to a specific
+	 * source range -- useful for assertion failures, for example.
+	 */
+	export interface TestMessage {
+		/**
+		 * Human-readable message text to display.
+		 */
+		message: string | MarkdownString;
+
+		/**
+		 * Message severity. Defaults to "Error", if not provided.
+		 */
+		severity?: TestMessageSeverity;
+
+		/**
+		 * Expected test output. If given with `actual`, a diff view will be shown.
+		 */
+		expectedOutput?: string;
+
+		/**
+		 * Actual test output. If given with `actual`, a diff view will be shown.
+		 */
+		actualOutput?: string;
+
+		/**
+		 * Associated file location.
+		 */
+		location?: Location;
+	}
+
+	//#endregion
+
+	//#region Opener service (https://github.com/microsoft/vscode/issues/109277)
+
+	/**
+	 * Details if an `ExternalUriOpener` can open a uri.
+	 *
+	 * The priority is also used to rank multiple openers against each other and determine
+	 * if an opener should be selected automatically or if the user should be prompted to
+	 * select an opener.
+	 *
+	 * VS Code will try to use the best available opener, as sorted by `ExternalUriOpenerPriority`.
+	 * If there are multiple potential "best" openers for a URI, then the user will be prompted
+	 * to select an opener.
+	 */
+	export enum ExternalUriOpenerPriority {
+		/**
+		 * The opener is disabled and will never be shown to users.
+		 *
+		 * Note that the opener can still be used if the user specifically
+		 * configures it in their settings.
+		 */
+		None = 0,
+
+		/**
+		 * The opener can open the uri but will not cause a prompt on its own
+		 * since VS Code always contributes a built-in `Default` opener.
+		 */
+		Option = 1,
+
+		/**
+		 * The opener can open the uri.
+		 *
+		 * VS Code's built-in opener has `Default` priority. This means that any additional `Default`
+		 * openers will cause the user to be prompted to select from a list of all potential openers.
+		 */
+		Default = 2,
+
+		/**
+		 * The opener can open the uri and should be automatically selected over any
+		 * default openers, include the built-in one from VS Code.
+		 *
+		 * A preferred opener will be automatically selected if no other preferred openers
+		 * are available. If multiple preferred openers are available, then the user
+		 * is shown a prompt with all potential openers (not just preferred openers).
+		 */
+		Preferred = 3,
+	}
+
+	/**
+	 * Handles opening uris to external resources, such as http(s) links.
+	 *
+	 * Extensions can implement an `ExternalUriOpener` to open `http` links to a webserver
+	 * inside of VS Code instead of having the link be opened by the web browser.
+	 *
+	 * Currently openers may only be registered for `http` and `https` uris.
+	 */
+	export interface ExternalUriOpener {
+
+		/**
+		 * Check if the opener can open a uri.
+		 *
+		 * @param uri The uri being opened. This is the uri that the user clicked on. It has
+		 * not yet gone through port forwarding.
+		 * @param token Cancellation token indicating that the result is no longer needed.
+		 *
+		 * @return Priority indicating if the opener can open the external uri.
+		 */
+		canOpenExternalUri(uri: Uri, token: CancellationToken): ExternalUriOpenerPriority | Thenable<ExternalUriOpenerPriority>;
+
+		/**
+		 * Open a uri.
+		 *
+		 * This is invoked when:
+		 *
+		 * - The user clicks a link which does not have an assigned opener. In this case, first `canOpenExternalUri`
+		 *   is called and if the user selects this opener, then `openExternalUri` is called.
+		 * - The user sets the default opener for a link in their settings and then visits a link.
+		 *
+		 * @param resolvedUri The uri to open. This uri may have been transformed by port forwarding, so it
+		 * may not match the original uri passed to `canOpenExternalUri`. Use `ctx.originalUri` to check the
+		 * original uri.
+		 * @param ctx Additional information about the uri being opened.
+		 * @param token Cancellation token indicating that opening has been canceled.
+		 *
+		 * @return Thenable indicating that the opening has completed.
+		 */
+		openExternalUri(resolvedUri: Uri, ctx: OpenExternalUriContext, token: CancellationToken): Thenable<void> | void;
+	}
+
+	/**
+	 * Additional information about the uri being opened.
+	 */
+	interface OpenExternalUriContext {
+		/**
+		 * The uri that triggered the open.
+		 *
+		 * This is the original uri that the user clicked on or that was passed to `openExternal.`
+		 * Due to port forwarding, this may not match the `resolvedUri` passed to `openExternalUri`.
+		 */
+		readonly sourceUri: Uri;
+	}
+
+	/**
+	 * Additional metadata about a registered `ExternalUriOpener`.
+	 */
+	interface ExternalUriOpenerMetadata {
+
+		/**
+		 * List of uri schemes the opener is triggered for.
+		 *
+		 * Currently only `http` and `https` are supported.
+		 */
+		readonly schemes: readonly string[]
+
+		/**
+		 * Text displayed to the user that explains what the opener does.
+		 *
+		 * For example, 'Open in browser preview'
+		 */
+		readonly label: string;
+	}
+
+	namespace window {
+		/**
+		 * Register a new `ExternalUriOpener`.
+		 *
+		 * When a uri is about to be opened, an `onOpenExternalUri:SCHEME` activation event is fired.
+		 *
+		 * @param id Unique id of the opener, such as `myExtension.browserPreview`. This is used in settings
+		 *   and commands to identify the opener.
+		 * @param opener Opener to register.
+		 * @param metadata Additional information about the opener.
+		 *
+		* @returns Disposable that unregisters the opener.
+		*/
+		export function registerExternalUriOpener(id: string, opener: ExternalUriOpener, metadata: ExternalUriOpenerMetadata): Disposable;
+	}
+
+	interface OpenExternalOptions {
+		/**
+		 * Allows using openers contributed by extensions through  `registerExternalUriOpener`
+		 * when opening the resource.
+		 *
+		 * If `true`, VS Code will check if any contributed openers can handle the
+		 * uri, and fallback to the default opener behavior.
+		 *
+		 * If it is string, this specifies the id of the `ExternalUriOpener`
+		 * that should be used if it is available. Use `'default'` to force VS Code's
+		 * standard external opener to be used.
+		 */
+		readonly allowContributedOpeners?: boolean | string;
+	}
+
+	namespace env {
+		export function openExternal(target: Uri, options?: OpenExternalOptions): Thenable<boolean>;
+	}
+
+	//#endregion
+
+	//#region https://github.com/Microsoft/vscode/issues/15178
+
+	// TODO@API must be a class
+	export interface OpenEditorInfo {
+		name: string;
+		resource: Uri;
+	}
+
+	export namespace window {
+		export const openEditors: ReadonlyArray<OpenEditorInfo>;
+
+		// todo@API proper event type
+		export const onDidChangeOpenEditors: Event<void>;
+	}
+
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/106488
+
+	export enum WorkspaceTrustState {
+		/**
+		 * The workspace is untrusted, and it will have limited functionality.
+		 */
+		Untrusted = 0,
+
+		/**
+		 * The workspace is trusted, and all functionality will be available.
+		 */
+		Trusted = 1,
+
+		/**
+		 * The initial state of the workspace.
+		 *
+		 * If trust will be required, users will be prompted to make a choice.
+		 */
+		Unknown = 2
+	}
+
+	/**
+	 * The event data that is fired when the trust state of the workspace changes
+	 */
+	export interface WorkspaceTrustStateChangeEvent {
+		/**
+		 * Previous trust state of the workspace
+		 */
+		previousTrustState: WorkspaceTrustState;
+
+		/**
+		 * Current trust state of the workspace
+		 */
+		currentTrustState: WorkspaceTrustState;
+	}
+
+	export namespace workspace {
+		/**
+		 * The trust state of the current workspace
+		 */
+		export const trustState: WorkspaceTrustState;
+
+		/**
+		 * Prompt the user to chose whether to trust the current workspace
+		 * @param message Optional message which would be displayed in the prompt
+		 */
+		export function requireWorkspaceTrust(message?: string): Thenable<WorkspaceTrustState>;
+
+		/**
+		 * Event that fires when the trust state of the current workspace changes
+		 */
+		export const onDidChangeWorkspaceTrustState: Event<WorkspaceTrustStateChangeEvent>;
+	}
+
+	//#endregion
+}

From c2606a7bd0b224d6b85e6209d166141653d06136 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Mon, 15 Mar 2021 16:51:18 +0100
Subject: [PATCH 02/14] update to last proposed api

---
 myTests/oo-analysis.moosebook  |   1 +
 package.json                   |   3 +-
 src/moosebookProvider.ts       |  23 +-
 src/types/vscode.proposed.d.ts | 963 ++++++++++++++++++++-------------
 4 files changed, 600 insertions(+), 390 deletions(-)
 create mode 100644 myTests/oo-analysis.moosebook

diff --git a/myTests/oo-analysis.moosebook b/myTests/oo-analysis.moosebook
new file mode 100644
index 0000000..7a222ec
--- /dev/null
+++ b/myTests/oo-analysis.moosebook
@@ -0,0 +1 @@
+[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream."},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , self version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload"},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":""}]
\ No newline at end of file
diff --git a/package.json b/package.json
index eed989d..6d1eb8d 100644
--- a/package.json
+++ b/package.json
@@ -188,7 +188,8 @@
 		"vscode:prepublish": "webpack --mode production",
 		"webpack": "webpack --mode development",
 		"webpack-dev": "webpack --mode development --watch",
-		"test-compile": "tsc -p ./"
+		"test-compile": "tsc -p ./",
+		"get-proposed": "npx vscode-dts dev"
 	},
 	"dependencies": {
 		"vscode-debugadapter": "^1.43.0",
diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
index a3c41fc..3113d4d 100644
--- a/src/moosebookProvider.ts
+++ b/src/moosebookProvider.ts
@@ -1,11 +1,10 @@
 import * as vscode from 'vscode';
-import { WorkspaceEdit } from 'vscode';
 import { Moosebook } from './moosebook';
 
 interface RawNotebookCell {
 	language: string;
 	value: string;
-	kind: vscode.CellKind;
+	kind: vscode.NotebookCellKind;
 	editable?: boolean;
 }
 
@@ -29,7 +28,7 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 					this.register(
 						docKey,
 						project,
-						key => document.cells.some(cell => cell.uri.toString() === key) || (key === docKey),
+						key => document.cells.some(cell => cell.index.toString() === key) || (key === docKey),
 					);
 				}
 			}),
@@ -49,7 +48,7 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 		});
 	}
 
-	public lookupMoosebook(keyOrUri: string | vscode.Uri | undefined): Moosebook | undefined {
+	public lookupMoosebook(keyOrUri: string | number | vscode.Uri | undefined): Moosebook | undefined {
 		if (keyOrUri) {
 			let key: string;
 			if (typeof keyOrUri === 'string') {
@@ -81,18 +80,16 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 		}
 
 		const notebookData: vscode.NotebookData = {
-			languages: ['pharo'],
-			metadata: { cellRunnable: true },
+			metadata: new vscode.NotebookDocumentMetadata().with({ editable: true }),
 			cells: raw.map(item => ({
+				kind: item.kind,
 				source: item.value,
 				language: item.language,
-				cellKind: item.kind,
 				outputs: [],
-				metadata: {
+				metadata: new vscode.NotebookCellMetadata().with({
 					editable: true,
-					runnable: true,
 					breakpointMargin: false
-				 }
+				 })
 			}))
 		};
 		return notebookData;
@@ -120,7 +117,7 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 
 		let output = '';
 		let error: Error | undefined;
-		const moosebook = this.lookupMoosebook(cell.uri);
+		const moosebook = this.lookupMoosebook(cell.index);
 		if (moosebook) {
 			try {
 				output = await moosebook.eval(cell);
@@ -164,8 +161,8 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 		let contents: RawNotebookCell[] = [];
 		for (let cell of document.cells) {
 			contents.push({
-				kind: cell.cellKind,
-				language: cell.language,
+				kind: cell.kind,
+				language: cell.document.languageId,
 				value: cell.document.getText(),
 			});
 		}
diff --git a/src/types/vscode.proposed.d.ts b/src/types/vscode.proposed.d.ts
index 9cf6321..ef11faa 100644
--- a/src/types/vscode.proposed.d.ts
+++ b/src/types/vscode.proposed.d.ts
@@ -33,91 +33,7 @@ declare module 'vscode' {
 		readonly removed: ReadonlyArray<AuthenticationProviderInformation>;
 	}
 
-	/**
-	* An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed.
-	*/
-	export interface AuthenticationProviderAuthenticationSessionsChangeEvent {
-		/**
-		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been added.
-		*/
-		readonly added: ReadonlyArray<AuthenticationSession>;
-
-		/**
-		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been removed.
-		 */
-		readonly removed: ReadonlyArray<AuthenticationSession>;
-
-		/**
-		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been changed.
-		 */
-		readonly changed: ReadonlyArray<AuthenticationSession>;
-	}
-
-	/**
-	 * A provider for performing authentication to a service.
-	 */
-	export interface AuthenticationProvider {
-		/**
-		 * An [event](#Event) which fires when the array of sessions has changed, or data
-		 * within a session has changed.
-		 */
-		readonly onDidChangeSessions: Event<AuthenticationProviderAuthenticationSessionsChangeEvent>;
-
-		/**
-		 * Returns an array of current sessions.
-		 *
-		 * TODO @RMacfarlane finish deprecating this and remove it
-		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		getAllSessions(): Thenable<ReadonlyArray<AuthenticationSession>>;
-
-
-		/**
-		 * Returns an array of current sessions.
-		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		getSessions(scopes: string[]): Thenable<ReadonlyArray<AuthenticationSession>>;
-
-		/**
-		 * Prompts a user to login.
-		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		createSession(scopes: string[]): Thenable<AuthenticationSession>;
-
-		/**
-		 * Removes the session corresponding to session id.
-		 * @param sessionId The session id to log out of
-		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		removeSession(sessionId: string): Thenable<void>;
-	}
-
-	/**
-	 * Options for creating an [AuthenticationProvider](#AuthentcationProvider).
-	 */
-	export interface AuthenticationProviderOptions {
-		/**
-		 * Whether it is possible to be signed into multiple accounts at once with this provider.
-		 * If not specified, will default to false.
-		*/
-		readonly supportsMultipleAccounts?: boolean;
-	}
-
 	export namespace authentication {
-		/**
-		 * Register an authentication provider.
-		 *
-		 * There can only be one provider per id and an error is being thrown when an id
-		 * has already been used by another provider. Ids are case-sensitive.
-		 *
-		 * @param id The unique identifier of the provider.
-		 * @param label The human-readable name of the provider.
-		 * @param provider The authentication provider provider.
-		 * @params options Additional options for the provider.
-		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
-		 */
-		export function registerAuthenticationProvider(id: string, label: string, provider: AuthenticationProvider, options?: AuthenticationProviderOptions): Disposable;
-
 		/**
 		 * @deprecated - getSession should now trigger extension activation.
 		 * Fires with the provider id that was registered or unregistered.
@@ -125,16 +41,18 @@ declare module 'vscode' {
 		export const onDidChangeAuthenticationProviders: Event<AuthenticationProvidersChangeEvent>;
 
 		/**
+		 * @deprecated
 		 * An array of the information of authentication providers that are currently registered.
 		 */
 		export const providers: ReadonlyArray<AuthenticationProviderInformation>;
 
 		/**
-		* Logout of a specific session.
-		* @param providerId The id of the provider to use
-		* @param sessionId The session id to remove
-		* provider
-		*/
+		 * @deprecated
+		 * Logout of a specific session.
+		 * @param providerId The id of the provider to use
+		 * @param sessionId The session id to remove
+		 * provider
+		 */
 		export function logout(providerId: string, sessionId: string): Thenable<void>;
 	}
 
@@ -208,6 +126,12 @@ declare module 'vscode' {
 		elevationRequired?: boolean;
 	}
 
+	export enum CandidatePortSource {
+		None = 0,
+		Process = 1,
+		Output = 2
+	}
+
 	export type ResolverResult = ResolvedAuthority & ResolvedOptions & TunnelInformation;
 
 	export class RemoteAuthorityResolverError extends Error {
@@ -242,6 +166,8 @@ declare module 'vscode' {
 			elevation: boolean;
 			public: boolean;
 		};
+
+		candidatePortSource?: CandidatePortSource;
 	}
 
 	export namespace workspace {
@@ -738,8 +664,158 @@ declare module 'vscode' {
 
 	//#endregion
 
+	//#region inline value provider: https://github.com/microsoft/vscode/issues/105690
+
+	/**
+	 * The inline values provider interface defines the contract between extensions and the VS Code debugger inline values feature.
+	 * In this contract the provider returns inline value information for a given document range
+	 * and VS Code shows this information in the editor at the end of lines.
+	 */
+	export interface InlineValuesProvider {
+
+		/**
+		 * An optional event to signal that inline values have changed.
+		 * @see [EventEmitter](#EventEmitter)
+		 */
+		onDidChangeInlineValues?: Event<void> | undefined;
+
+		/**
+		 * Provide "inline value" information for a given document and range.
+		 * VS Code calls this method whenever debugging stops in the given document.
+		 * The returned inline values information is rendered in the editor at the end of lines.
+		 *
+		 * @param document The document for which the inline values information is needed.
+		 * @param viewPort The visible document range for which inline values should be computed.
+		 * @param context A bag containing contextual information like the current location.
+		 * @param token A cancellation token.
+		 * @return An array of InlineValueDescriptors or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideInlineValues(document: TextDocument, viewPort: Range, context: InlineValueContext, token: CancellationToken): ProviderResult<InlineValue[]>;
+	}
+
+	/**
+	 * A value-object that contains contextual information when requesting inline values from a InlineValuesProvider.
+	 */
+	export interface InlineValueContext {
+
+		/**
+		 * The stack frame (as a DAP Id) where the execution has stopped.
+		 */
+		readonly frameId: number;
+
+		/**
+		 * The document range where execution has stopped.
+		 * Typically the end position of the range denotes the line where the inline values are shown.
+		 */
+		readonly stoppedLocation: Range;
+	}
+
+	/**
+	 * Inline value information can be provided by different means:
+	 * - directly as a text value (class InlineValueText).
+	 * - as a name to use for a variable lookup (class InlineValueVariableLookup)
+	 * - as an evaluatable expression (class InlineValueEvaluatableExpression)
+	 * The InlineValue types combines all inline value types into one type.
+	 */
+	export type InlineValue = InlineValueText | InlineValueVariableLookup | InlineValueEvaluatableExpression;
+
+	/**
+	 * Provide inline value as text.
+	 */
+	export class InlineValueText {
+		/**
+		 * The document range for which the inline value applies.
+		 */
+		readonly range: Range;
+		/**
+		 * The text of the inline value.
+		 */
+		readonly text: string;
+		/**
+		 * Creates a new InlineValueText object.
+		 *
+		 * @param range The document line where to show the inline value.
+		 * @param text The value to be shown for the line.
+		 */
+		constructor(range: Range, text: string);
+	}
+
+	/**
+	 * Provide inline value through a variable lookup.
+	 * If only a range is specified, the variable name will be extracted from the underlying document.
+	 * An optional variable name can be used to override the extracted name.
+	 */
+	export class InlineValueVariableLookup {
+		/**
+		 * The document range for which the inline value applies.
+		 * The range is used to extract the variable name from the underlying document.
+		 */
+		readonly range: Range;
+		/**
+		 * If specified the name of the variable to look up.
+		 */
+		readonly variableName?: string;
+		/**
+		 * How to perform the lookup.
+		 */
+		readonly caseSensitiveLookup: boolean;
+		/**
+		 * Creates a new InlineValueVariableLookup object.
+		 *
+		 * @param range The document line where to show the inline value.
+		 * @param variableName The name of the variable to look up.
+		 * @param caseSensitiveLookup How to perform the lookup. If missing lookup is case sensitive.
+		 */
+		constructor(range: Range, variableName?: string, caseSensitiveLookup?: boolean);
+	}
+
+	/**
+	 * Provide an inline value through an expression evaluation.
+	 * If only a range is specified, the expression will be extracted from the underlying document.
+	 * An optional expression can be used to override the extracted expression.
+	 */
+	export class InlineValueEvaluatableExpression {
+		/**
+		 * The document range for which the inline value applies.
+		 * The range is used to extract the evaluatable expression from the underlying document.
+		 */
+		readonly range: Range;
+		/**
+		 * If specified the expression overrides the extracted expression.
+		 */
+		readonly expression?: string;
+		/**
+		 * Creates a new InlineValueEvaluatableExpression object.
+		 *
+		 * @param range The range in the underlying document from which the evaluatable expression is extracted.
+		 * @param expression If specified overrides the extracted expression.
+		 */
+		constructor(range: Range, expression?: string);
+	}
+
+	export namespace languages {
+
+		/**
+		 * Register a provider that returns data for the debugger's 'inline value' feature.
+		 * Whenever the generic VS Code debugger has stopped in a source file, providers registered for the language of the file
+		 * are called to return textual data that will be shown in the editor at the end of lines.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider An inline values provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerInlineValuesProvider(selector: DocumentSelector, provider: InlineValuesProvider): Disposable;
+	}
+
+	//#endregion
+
 	// eslint-disable-next-line vscode-dts-region-comments
-	//#region debug
+	//#region @weinand: variables view action contributions
 
 	/**
 	 * A DebugProtocolVariableContainer is an opaque stand-in type for the intersection of the Scope and Variable types defined in the Debug Adapter Protocol.
@@ -912,43 +988,43 @@ declare module 'vscode' {
 
 	//#region Status bar item with ID and Name: https://github.com/microsoft/vscode/issues/74972
 
-	export namespace window {
+	/**
+	 * Options to configure the status bar item.
+	 */
+	export interface StatusBarItemOptions {
 
 		/**
-		 * Options to configure the status bar item.
+		 * A unique identifier of the status bar item. The identifier
+		 * is for example used to allow a user to show or hide the
+		 * status bar item in the UI.
 		 */
-		export interface StatusBarItemOptions {
+		id: string;
 
-			/**
-			 * A unique identifier of the status bar item. The identifier
-			 * is for example used to allow a user to show or hide the
-			 * status bar item in the UI.
-			 */
-			id: string;
+		/**
+		 * A human readable name of the status bar item. The name is
+		 * for example used as a label in the UI to show or hide the
+		 * status bar item.
+		 */
+		name: string;
 
-			/**
-			 * A human readable name of the status bar item. The name is
-			 * for example used as a label in the UI to show or hide the
-			 * status bar item.
-			 */
-			name: string;
+		/**
+		 * Accessibility information used when screen reader interacts with this status bar item.
+		 */
+		accessibilityInformation?: AccessibilityInformation;
 
-			/**
-			 * Accessibility information used when screen reader interacts with this status bar item.
-			 */
-			accessibilityInformation?: AccessibilityInformation;
+		/**
+		 * The alignment of the status bar item.
+		 */
+		alignment?: StatusBarAlignment;
 
-			/**
-			 * The alignment of the status bar item.
-			 */
-			alignment?: StatusBarAlignment;
+		/**
+		 * The priority of the status bar item. Higher value means the item should
+		 * be shown more to the left.
+		 */
+		priority?: number;
+	}
 
-			/**
-			 * The priority of the status bar item. Higher value means the item should
-			 * be shown more to the left.
-			 */
-			priority?: number;
-		}
+	export namespace window {
 
 		/**
 		 * Creates a status bar [item](#StatusBarItem).
@@ -998,9 +1074,23 @@ declare module 'vscode' {
 
 	//#endregion
 
+	//#region Provide a way for custom editors to process untitled files without relying on textDocument https://github.com/microsoft/vscode/issues/115631
+	/**
+	 * Additional information about the opening custom document.
+	 */
+	interface CustomDocumentOpenContext {
+		/**
+		 * If the URI is an untitled file, this will be populated with the byte data of that file
+		 *
+		 * If this is provided, your extension should utilize this byte data rather than executing fs APIs on the URI passed in
+		 */
+		readonly untitledDocumentData?: Uint8Array;
+	}
+	//#endregion
+
 	//#region https://github.com/microsoft/vscode/issues/106744, Notebooks (misc)
 
-	export enum CellKind {
+	export enum NotebookCellKind {
 		Markdown = 1,
 		Code = 2
 	}
@@ -1017,83 +1107,85 @@ declare module 'vscode' {
 		Idle = 2
 	}
 
-	// TODO@API
-	// make this a class, allow modified using with-pattern
-	export interface NotebookCellMetadata {
+	export class NotebookCellMetadata {
 		/**
 		 * Controls whether a cell's editor is editable/readonly.
 		 */
-		editable?: boolean;
-
+		readonly editable?: boolean;
 		/**
 		 * Controls if the cell has a margin to support the breakpoint UI.
 		 * This metadata is ignored for markdown cell.
 		 */
-		breakpointMargin?: boolean;
-
+		readonly breakpointMargin?: boolean;
 		/**
 		 * Whether a code cell's editor is collapsed
 		 */
-		inputCollapsed?: boolean;
-
+		readonly outputCollapsed?: boolean;
 		/**
 		 * Whether a code cell's outputs are collapsed
 		 */
-		outputCollapsed?: boolean;
-
+		readonly inputCollapsed?: boolean;
 		/**
 		 * Additional attributes of a cell metadata.
 		 */
-		custom?: { [key: string]: any; };
+		readonly custom?: Record<string, any>;
+
+		// todo@API duplicates status bar API
+		readonly statusMessage?: string;
+
+		// run related API, will be removed
+		readonly hasExecutionOrder?: boolean;
+		readonly executionOrder?: number;
+		readonly runState?: NotebookCellRunState;
+		readonly runStartTime?: number;
+		readonly lastRunDuration?: number;
+
+		constructor(editable?: boolean, breakpointMargin?: boolean, hasExecutionOrder?: boolean, executionOrder?: number, runState?: NotebookCellRunState, runStartTime?: number, statusMessage?: string, lastRunDuration?: number, inputCollapsed?: boolean, outputCollapsed?: boolean, custom?: Record<string, any>)
+
+		with(change: { editable?: boolean | null, breakpointMargin?: boolean | null, hasExecutionOrder?: boolean | null, executionOrder?: number | null, runState?: NotebookCellRunState | null, runStartTime?: number | null, statusMessage?: string | null, lastRunDuration?: number | null, inputCollapsed?: boolean | null, outputCollapsed?: boolean | null, custom?: Record<string, any> | null, }): NotebookCellMetadata;
 	}
 
 	// todo@API support ids https://github.com/jupyter/enhancement-proposals/blob/master/62-cell-id/cell-id.md
 	export interface NotebookCell {
 		readonly index: number;
 		readonly notebook: NotebookDocument;
-		readonly uri: Uri;
-		readonly cellKind: CellKind;
+		readonly kind: NotebookCellKind;
 		readonly document: TextDocument;
-		readonly language: string;
-		readonly outputs: readonly NotebookCellOutput[];
-		readonly metadata: NotebookCellMetadata;
-		/** @deprecated use WorkspaceEdit.replaceCellOutput */
-		// outputs: CellOutput[];
-		// readonly outputs2: NotebookCellOutput[];
-		/** @deprecated use WorkspaceEdit.replaceCellMetadata */
-		// metadata: NotebookCellMetadata;
+		readonly metadata: NotebookCellMetadata
+		readonly outputs: ReadonlyArray<NotebookCellOutput>;
 	}
 
+	export class NotebookDocumentMetadata {
 
-	export interface NotebookDocumentMetadata {
 		/**
 		 * Controls if users can add or delete cells
 		 * Defaults to true
 		 */
-		editable?: boolean;
-
+		readonly editable: boolean;
 		/**
 		 * Default value for [cell editable metadata](#NotebookCellMetadata.editable).
 		 * Defaults to true.
 		 */
-		cellEditable?: boolean;
-		displayOrder?: GlobPattern[];
-
+		readonly cellEditable: boolean;
 		/**
 		 * Additional attributes of the document metadata.
 		 */
-		custom?: { [key: string]: any; };
-
+		readonly custom: { [key: string]: any; };
 		/**
 		 * Whether the document is trusted, default to true
 		 * When false, insecure outputs like HTML, JavaScript, SVG will not be rendered.
 		 */
-		trusted?: boolean;
+		readonly trusted: boolean;
 
-		/**
-		 * Languages the document supports
-		 */
-		languages?: string[];
+		// todo@API is this a kernel property?
+		readonly cellHasExecutionOrder: boolean;
+
+		// todo@API remove
+		readonly runState: NotebookRunState;
+
+		constructor(editable?: boolean, cellEditable?: boolean, cellHasExecutionOrder?: boolean, custom?: { [key: string]: any; }, runState?: NotebookRunState, trusted?: boolean);
+
+		with(change: { editable?: boolean | null, cellEditable?: boolean | null, cellHasExecutionOrder?: boolean | null, custom?: { [key: string]: any; } | null, runState?: NotebookRunState | null, trusted?: boolean | null, }): NotebookDocumentMetadata
 	}
 
 	export interface NotebookDocumentContentOptions {
@@ -1113,27 +1205,40 @@ declare module 'vscode' {
 	export interface NotebookDocument {
 		readonly uri: Uri;
 		readonly version: number;
+
+		// todo@API don't have this...
 		readonly fileName: string;
-		readonly viewType: string;
+
 		readonly isDirty: boolean;
 		readonly isUntitled: boolean;
 		readonly cells: ReadonlyArray<NotebookCell>;
-		readonly contentOptions: NotebookDocumentContentOptions;
-		// todo@API
-		// - move to kernel -> control runnable state of a cell
-		// - remove from this type
-		languages: string[];
+
 		readonly metadata: NotebookDocumentMetadata;
+
+		// todo@API should we really expose this?
+		readonly viewType: string;
+
+		/**
+		 * Save the document. The saving will be handled by the corresponding content provider
+		 *
+		 * @return A promise that will resolve to true when the document
+		 * has been saved. If the file was not dirty or the save failed,
+		 * will return false.
+		 */
+		save(): Thenable<boolean>;
 	}
 
 	// todo@API maybe have a NotebookCellPosition sibling
-	// todo@API should be a class
-	export interface NotebookCellRange {
+	export class NotebookCellRange {
 		readonly start: number;
 		/**
 		 * exclusive
 		 */
 		readonly end: number;
+
+		readonly isEmpty: boolean;
+
+		constructor(start: number, end: number);
 	}
 
 	export enum NotebookEditorRevealType {
@@ -1170,11 +1275,13 @@ declare module 'vscode' {
 		// todo@API should not be undefined, rather a default
 		readonly selection?: NotebookCell;
 
-		// @rebornix
-		// todo@API should replace selection
-		// never empty!
-		// primary/secondary selections
-		// readonly selections: NotebookCellRange[];
+		/**
+		 * todo@API should replace selection
+		 * The selections on this notebook editor.
+		 *
+		 * The primary selection (or focused range) is `selections[0]`. When the document has no cells, the primary selection is empty `{ start: 0, end: 0 }`;
+		 */
+		readonly selections: NotebookCellRange[];
 
 		/**
 		 * The current visible ranges in the editor (vertically).
@@ -1187,8 +1294,7 @@ declare module 'vscode' {
 		 * The column in which this editor shows.
 		 */
 		// @jrieken
-		// todo@API maybe never undefined because notebooks always show in the editor area (unlike text editors)
-		// maybe for notebook diff editor
+		// this is not implemented...
 		readonly viewColumn?: ViewColumn;
 
 		/**
@@ -1245,9 +1351,7 @@ declare module 'vscode' {
 
 	export interface NotebookEditorSelectionChangeEvent {
 		readonly notebookEditor: NotebookEditor;
-		// @rebornix
-		// todo@API show NotebookCellRange[] instead
-		readonly selection?: NotebookCell;
+		readonly selections: ReadonlyArray<NotebookCellRange>
 	}
 
 	export interface NotebookEditorVisibleRangesChangeEvent {
@@ -1256,22 +1360,23 @@ declare module 'vscode' {
 	}
 
 	// todo@API support ids https://github.com/jupyter/enhancement-proposals/blob/master/62-cell-id/cell-id.md
-	export interface NotebookCellData {
-		readonly cellKind: CellKind;
-		readonly source: string;
-		readonly language: string;
-		// todo@API maybe use a separate data type?
-		readonly outputs: NotebookCellOutput[];
-		readonly metadata: NotebookCellMetadata | undefined;
+	export class NotebookCellData {
+		kind: NotebookCellKind;
+		// todo@API better names: value? text?
+		source: string;
+		// todo@API how does language and MD relate?
+		language: string;
+		outputs?: NotebookCellOutput[];
+		metadata?: NotebookCellMetadata;
+		constructor(kind: NotebookCellKind, source: string, language: string, outputs?: NotebookCellOutput[], metadata?: NotebookCellMetadata)
 	}
 
-	export interface NotebookData {
-		readonly cells: NotebookCellData[];
-		readonly languages: string[];
-		readonly metadata: NotebookDocumentMetadata;
+	export class NotebookData {
+		cells: NotebookCellData[];
+		metadata: NotebookDocumentMetadata;
+		constructor(cells: NotebookCellData[], metadata?: NotebookDocumentMetadata);
 	}
 
-
 	/**
 	 * Communication object passed to the {@link NotebookContentProvider} and
 	 * {@link NotebookOutputRenderer} to communicate with the webview.
@@ -1319,11 +1424,11 @@ declare module 'vscode' {
 
 	export namespace notebook {
 
-		export function openNotebookDocument(uri: Uri, viewType?: string): Thenable<NotebookDocument>;
+		export function openNotebookDocument(uri: Uri): Thenable<NotebookDocument>;
+
 		export const onDidOpenNotebookDocument: Event<NotebookDocument>;
 		export const onDidCloseNotebookDocument: Event<NotebookDocument>;
 
-		// todo@API really needed?
 		export const onDidSaveNotebookDocument: Event<NotebookDocument>;
 
 		/**
@@ -1333,7 +1438,7 @@ declare module 'vscode' {
 		export const onDidChangeNotebookDocumentMetadata: Event<NotebookDocumentMetadataChangeEvent>;
 		export const onDidChangeNotebookCells: Event<NotebookCellsChangeEvent>;
 		export const onDidChangeCellOutputs: Event<NotebookCellOutputsChangeEvent>;
-		export const onDidChangeCellLanguage: Event<NotebookCellLanguageChangeEvent>;
+
 		export const onDidChangeCellMetadata: Event<NotebookCellMetadataChangeEvent>;
 	}
 
@@ -1344,6 +1449,8 @@ declare module 'vscode' {
 		export const onDidChangeActiveNotebookEditor: Event<NotebookEditor | undefined>;
 		export const onDidChangeNotebookEditorSelection: Event<NotebookEditorSelectionChangeEvent>;
 		export const onDidChangeNotebookEditorVisibleRanges: Event<NotebookEditorVisibleRangesChangeEvent>;
+
+		export function showNotebookDocument(uri: Uri, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
 		export function showNotebookDocument(document: NotebookDocument, options?: NotebookDocumentShowOptions): Thenable<NotebookEditor>;
 	}
 
@@ -1363,17 +1470,22 @@ declare module 'vscode' {
 
 		readonly mime: string;
 		readonly value: unknown;
-		readonly metadata?: Record<string, string | number | boolean | unknown>;
+		readonly metadata?: Record<string, any>;
 
-		constructor(mime: string, value: unknown, metadata?: Record<string, string | number | boolean | unknown>);
+		constructor(mime: string, value: unknown, metadata?: Record<string, any>);
 	}
 
 	// @jrieken
+	// todo@API think about readonly...
 	//TODO@API add execution count to cell output?
 	export class NotebookCellOutput {
 		readonly id: string;
 		readonly outputs: NotebookCellOutputItem[];
-		constructor(outputs: NotebookCellOutputItem[], id?: string);
+		readonly metadata?: Record<string, any>;
+
+		constructor(outputs: NotebookCellOutputItem[], metadata?: Record<string, any>);
+
+		constructor(outputs: NotebookCellOutputItem[], id: string, metadata?: Record<string, any>);
 	}
 
 	//#endregion
@@ -1445,29 +1557,31 @@ declare module 'vscode' {
 
 	interface NotebookDocumentOpenContext {
 		readonly backupId?: string;
+		readonly untitledDocumentData?: Uint8Array;
 	}
 
+	// todo@API use openNotebookDOCUMENT to align with openCustomDocument etc?
+	// todo@API rename to NotebookDocumentContentProvider
 	export interface NotebookContentProvider {
+
 		readonly options?: NotebookDocumentContentOptions;
 		readonly onDidChangeNotebookContentOptions?: Event<NotebookDocumentContentOptions>;
+
+		// todo@API remove! against separation of data provider and renderer
+		// eslint-disable-next-line vscode-dts-cancellation
+		resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Thenable<void>;
+
 		/**
 		 * Content providers should always use [file system providers](#FileSystemProvider) to
 		 * resolve the raw content for `uri` as the resouce is not necessarily a file on disk.
 		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		openNotebook(uri: Uri, openContext: NotebookDocumentOpenContext): NotebookData | Thenable<NotebookData>;
-		// eslint-disable-next-line vscode-dts-provider-naming
-		// eslint-disable-next-line vscode-dts-cancellation
-		resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Thenable<void>;
-		// eslint-disable-next-line vscode-dts-provider-naming
-		saveNotebook(document: NotebookDocument, cancellation: CancellationToken): Thenable<void>;
-		// eslint-disable-next-line vscode-dts-provider-naming
-		saveNotebookAs(targetResource: Uri, document: NotebookDocument, cancellation: CancellationToken): Thenable<void>;
-		// eslint-disable-next-line vscode-dts-provider-naming
-		backupNotebook(document: NotebookDocument, context: NotebookDocumentBackupContext, cancellation: CancellationToken): Thenable<NotebookDocumentBackup>;
+		openNotebook(uri: Uri, openContext: NotebookDocumentOpenContext, token: CancellationToken): NotebookData | Thenable<NotebookData>;
+
+		saveNotebook(document: NotebookDocument, token: CancellationToken): Thenable<void>;
 
-		// ???
-		// provideKernels(document: NotebookDocument, token: CancellationToken): ProviderResult<T[]>;
+		saveNotebookAs(targetResource: Uri, document: NotebookDocument, token: CancellationToken): Thenable<void>;
+
+		backupNotebook(document: NotebookDocument, context: NotebookDocumentBackupContext, token: CancellationToken): Thenable<NotebookDocumentBackup>;
 	}
 
 	export namespace notebook {
@@ -1492,34 +1606,6 @@ declare module 'vscode' {
 
 	//#region https://github.com/microsoft/vscode/issues/106744, NotebookKernel
 
-	export interface NotebookDocumentMetadata {
-
-		/**
-		 * Controls whether the full notebook can be run at once.
-		 * Defaults to true
-		 */
-		// todo@API infer from kernel
-		// todo@API remove
-		runnable?: boolean;
-
-		/**
-		 * Default value for [cell runnable metadata](#NotebookCellMetadata.runnable).
-		 * Defaults to true.
-		 */
-		cellRunnable?: boolean;
-
-		/**
-		 * Default value for [cell hasExecutionOrder metadata](#NotebookCellMetadata.hasExecutionOrder).
-		 * Defaults to true.
-		 */
-		cellHasExecutionOrder?: boolean;
-
-		/**
-		 * The document's current run state
-		 */
-		runState?: NotebookRunState;
-	}
-
 	// todo@API use the NotebookCellExecution-object as a container to model and enforce
 	// the flow of a cell execution
 
@@ -1541,61 +1627,29 @@ declare module 'vscode' {
 	// export const onDidStartNotebookCellExecution: Event<any>;
 	// export const onDidStopNotebookCellExecution: Event<any>;
 
-	export interface NotebookCellMetadata {
-
-		/**
-		 * Controls if the cell is executable.
-		 * This metadata is ignored for markdown cell.
-		 */
-		// todo@API infer from kernel
-		runnable?: boolean;
-
-		/**
-		 * Whether the [execution order](#NotebookCellMetadata.executionOrder) indicator will be displayed.
-		 * Defaults to true.
-		 */
-		hasExecutionOrder?: boolean;
-
-		/**
-		 * The order in which this cell was executed.
-		 */
-		executionOrder?: number;
-
-		/**
-		 * A status message to be shown in the cell's status bar
-		 */
-		// todo@API duplicates status bar API
-		statusMessage?: string;
-
-		/**
-		 * The cell's current run state
-		 */
-		runState?: NotebookCellRunState;
-
-		/**
-		 * If the cell is running, the time at which the cell started running
-		 */
-		runStartTime?: number;
-
-		/**
-		 * The total duration of the cell's last run
-		 */
-		// todo@API depends on having output
-		lastRunDuration?: number;
-	}
-
 	export interface NotebookKernel {
+
+		// todo@API make this mandatory?
 		readonly id?: string;
+
 		label: string;
 		description?: string;
 		detail?: string;
 		isPreferred?: boolean;
+
+		// todo@API is this maybe an output property?
 		preloads?: Uri[];
 
-		// todo@API
-		// languages supported by kernel
-		// first is preferred
-		// languages: string[];
+		/**
+		 * languages supported by kernel
+		 * - first is preferred
+		 * - `undefined` means all languages available in the editor
+		 */
+		supportedLanguages?: string[];
+
+		// todo@API kernel updating itself
+		// fired when properties like the supported languages etc change
+		// onDidChangeProperties?: Event<void>
 
 		// @roblourens
 		// todo@API change to `executeCells(document: NotebookDocument, cells: NotebookCellRange[], context:{isWholeNotebooke: boolean}, token: CancelationToken): void;`
@@ -2012,6 +2066,7 @@ declare module 'vscode' {
 		 */
 		whitespaceAfter?: boolean;
 
+		// todo@API make range first argument
 		constructor(text: string, range: Range, kind?: InlineHintKind);
 	}
 
@@ -2057,6 +2112,14 @@ declare module 'vscode' {
 
 	//#endregion
 
+	//#region https://github.com/microsoft/vscode/issues/116906
+
+	export interface ExtensionContext {
+		readonly extension: Extension<any>;
+	}
+
+	//#endregion
+
 	//#region https://github.com/microsoft/vscode/issues/102091
 
 	export interface TextDocument {
@@ -2079,9 +2142,7 @@ declare module 'vscode' {
 	*/
 	export namespace test {
 		/**
-		 * Registers a provider that discovers tests for the given document
-		 * selectors. It is activated when either tests need to be enumerated, or
-		 * a document matching the selector is opened.
+		 * Registers a provider that discovers and runs tests.
 		 */
 		export function registerTestProvider<T extends TestItem>(testProvider: TestProvider<T>): Disposable;
 
@@ -2104,29 +2165,38 @@ declare module 'vscode' {
 		export function createDocumentTestObserver(document: TextDocument): TestObserver;
 
 		/**
-		 * The last or selected test run. Cleared when a new test run starts.
+		 * Inserts custom test results into the VS Code UI. The results are
+		 * inserted and sorted based off the `completedAt` timestamp. If the
+		 * results are being read from a file, for example, the `completedAt`
+		 * time should generally be the modified time of the file if not more
+		 * specific time is available.
+		 *
+		 * This will no-op if the inserted results are deeply equal to an
+		 * existing result.
+		 *
+		 * @param results test results
+		 * @param persist whether the test results should be saved by VS Code
+		 * and persisted across reloads. Defaults to true.
 		 */
-		export const testResults: TestResults | undefined;
+		export function publishTestResult(results: TestResults, persist?: boolean): void;
 
 		/**
-		 * Event that fires when the testResults are updated.
-		 */
-		export const onDidChangeTestResults: Event<void>;
-	}
+		* List of test results stored by VS Code, sorted in descnding
+		* order by their `completedAt` time.
+		*/
+		export const testResults: ReadonlyArray<TestResults>;
 
-	export interface TestResults {
 		/**
-		 * The results from the latest test run. The array contains a snapshot of
-		 * all tests involved in the run at the moment when it completed.
-		 */
-		readonly tests: ReadonlyArray<RequiredTestItem> | undefined;
+		* Event that fires when the {@link testResults} array is updated.
+		*/
+		export const onDidChangeTestResults: Event<void>;
 	}
 
 	export interface TestObserver {
 		/**
 		 * List of tests returned by test provider for files in the workspace.
 		 */
-		readonly tests: ReadonlyArray<RequiredTestItem>;
+		readonly tests: ReadonlyArray<TestItem>;
 
 		/**
 		 * An event that fires when an existing test in the collection changes, or
@@ -2136,7 +2206,7 @@ declare module 'vscode' {
 		readonly onDidChangeTest: Event<TestChangeEvent>;
 
 		/**
-		 * An event the fires when all test providers have signalled that the tests
+		 * An event that fires when all test providers have signalled that the tests
 		 * the observer references have been discovered. Providers may continue to
 		 * watch for changes and cause {@link onDidChangeTest} to fire as files
 		 * change, until the observer is disposed.
@@ -2156,23 +2226,17 @@ declare module 'vscode' {
 		/**
 		 * List of all tests that are newly added.
 		 */
-		readonly added: ReadonlyArray<RequiredTestItem>;
+		readonly added: ReadonlyArray<TestItem>;
 
 		/**
 		 * List of existing tests that have updated.
 		 */
-		readonly updated: ReadonlyArray<RequiredTestItem>;
+		readonly updated: ReadonlyArray<TestItem>;
 
 		/**
 		 * List of existing tests that have been removed.
 		 */
-		readonly removed: ReadonlyArray<RequiredTestItem>;
-
-		/**
-		 * Highest node in the test tree under which changes were made. This can
-		 * be easily plugged into events like the TreeDataProvider update event.
-		 */
-		readonly commonChangeAncestor: RequiredTestItem | null;
+		readonly removed: ReadonlyArray<TestItem>;
 	}
 
 	/**
@@ -2180,21 +2244,21 @@ declare module 'vscode' {
 	 */
 	export interface TestHierarchy<T extends TestItem> {
 		/**
-		 * Root node for tests. The `testRoot` instance must not be replaced over
+		 * Root node for tests. The root instance must not be replaced over
 		 * the lifespan of the TestHierarchy, since you will need to reference it
-		 * in `onDidChangeTest` when a test is added or removed.
+		 * in {@link onDidChangeTest} when a test is added or removed.
 		 */
 		readonly root: T;
 
 		/**
-		 * An event that fires when an existing test under the `root` changes.
-		 * This can be a result of a state change in a test run, a property update,
-		 * or an update to its children. Changes made to tests will not be visible
-		 * to {@link TestObserver} instances until this event is fired.
+		 * An event that fires when an existing test `root` changes.  This can be
+		 * a result of a property update, or an update to its children. Changes
+		 * made to tests will not be visible to {@link TestObserver} instances
+		 * until this event is fired.
 		 *
-		 * This will signal a change recursively to all children of the given node.
-		 * For example, firing the event with the {@link testRoot} will refresh
-		 * all tests.
+		 * When a change is signalled, VS Code will check for any new or removed
+		 * direct children of the changed ite, For example, firing the event with
+		 * the {@link testRoot} will detect any new children in `root.children`.
 		 */
 		readonly onDidChangeTest: Event<T>;
 
@@ -2207,24 +2271,15 @@ declare module 'vscode' {
 
 		/**
 		 * An event that fires when a test becomes outdated, as a result of
-		 * file changes, for example. In "watch" mode, tests that are outdated
+		 * file changes, for example. In "auto run" mode, tests that are outdated
 		 * will be automatically re-run after a short delay. Firing a test
 		 * with children will mark the entire subtree as outdated.
 		 */
 		readonly onDidInvalidateTest?: Event<T>;
-
-		/**
-		 * Dispose will be called when there are no longer observers interested
-		 * in the hierarchy.
-		 */
-		dispose(): void;
 	}
 
 	/**
-	 * Discovers and provides tests. It's expected that the TestProvider will
-	 * ambiently listen to {@link vscode.window.onDidChangeVisibleTextEditors} to
-	 * provide test information about the open files for use in code lenses and
-	 * other file-specific UI.
+	 * Discovers and provides tests.
 	 *
 	 * Additionally, the UI may request it to discover tests for the workspace
 	 * via `addWorkspaceTests`.
@@ -2234,34 +2289,48 @@ declare module 'vscode' {
 	export interface TestProvider<T extends TestItem = TestItem> {
 		/**
 		 * Requests that tests be provided for the given workspace. This will
-		 * generally be called when tests need to be enumerated for the
-		 * workspace.
+		 * be called when tests need to be enumerated for the workspace, such as
+		 * when the user opens the test explorer.
 		 *
 		 * It's guaranteed that this method will not be called again while
-		 * there is a previous undisposed watcher for the given workspace folder.
+		 * there is a previous uncancelled hierarchy for the given workspace folder.
+		 *
+		 * @param workspace The workspace in which to observe tests
+		 * @param cancellationToken Token that signals the used asked to abort the test run.
 		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		createWorkspaceTestHierarchy?(workspace: WorkspaceFolder): TestHierarchy<T> | undefined;
+		provideWorkspaceTestHierarchy(workspace: WorkspaceFolder, token: CancellationToken): ProviderResult<TestHierarchy<T>>;
 
 		/**
-		 * Requests that tests be provided for the given document. This will
-		 * be called when tests need to be enumerated for a single open file,
-		 * for instance by code lens UI.
+		 * Requests that tests be provided for the given document. This will be
+		 * called when tests need to be enumerated for a single open file, for
+		 * instance by code lens UI.
+		 *
+		 * It's suggested that the provider listen to change events for the text
+		 * document to provide information for test that might not yet be
+		 * saved, if possible.
+		 *
+		 * If the test system is not able to provide or estimate for tests on a
+		 * per-file basis, this method may not be implemented. In that case, VS
+		 * Code will request and use the information from the workspace hierarchy.
+		 *
+		 * @param document The document in which to observe tests
+		 * @param cancellationToken Token that signals the used asked to abort the test run.
 		 */
-		// eslint-disable-next-line vscode-dts-provider-naming
-		createDocumentTestHierarchy?(document: TextDocument): TestHierarchy<T> | undefined;
+		provideDocumentTestHierarchy?(document: TextDocument, token: CancellationToken): ProviderResult<TestHierarchy<T>>;
 
 		/**
 		 * Starts a test run. This should cause {@link onDidChangeTest} to
 		 * fire with update test states during the run.
 		 * @todo this will eventually need to be able to return a summary report, coverage for example.
+		 * @param options Options for this test run
+		 * @param cancellationToken Token that signals the used asked to abort the test run.
 		 */
 		// eslint-disable-next-line vscode-dts-provider-naming
-		runTests?(options: TestRun<T>, cancellationToken: CancellationToken): ProviderResult<void>;
+		runTests(options: TestRun<T>, token: CancellationToken): ProviderResult<void>;
 	}
 
 	/**
-	 * Options given to {@link test.runTests}
+	 * Options given to {@link test.runTests}.
 	 */
 	export interface TestRunOptions<T extends TestItem = TestItem> {
 		/**
@@ -2270,6 +2339,13 @@ declare module 'vscode' {
 		 */
 		tests: T[];
 
+		/**
+		 * An array of tests the user has marked as excluded in VS Code. May be
+		 * omitted if no exclusions were requested. Test providers should not run
+		 * excluded tests or any children of excluded tests.
+		 */
+		exclude?: T[];
+
 		/**
 		 * Whether or not tests in this run should be debugged.
 		 */
@@ -2283,6 +2359,12 @@ declare module 'vscode' {
 		/**
 		 * Updates the state of the test in the run. By default, all tests involved
 		 * in the run will have a "queued" state until they are updated by this method.
+		 *
+		 * Calling with method with nodes outside the {@link tests} or in the
+		 * {@link exclude} array will no-op.
+		 *
+		 * @param test The test to update
+		 * @param state The state to assign to the test
 		 */
 		setState(test: T, state: TestState): void;
 	}
@@ -2291,21 +2373,18 @@ declare module 'vscode' {
 	 * A test item is an item shown in the "test explorer" view. It encompasses
 	 * both a suite and a test, since they have almost or identical capabilities.
 	 */
-	export interface TestItem {
+	export class TestItem {
 		/**
-		 * Display name describing the test case.
+		 * Unique identifier for the TestItem. This is used to correlate
+		 * test results and tests in the document with those in the workspace
+		 * (test explorer). This must not change for the lifetime of the TestItem.
 		 */
-		label: string;
+		readonly id: string;
 
 		/**
-		 * Optional unique identifier for the TestItem. This is used to correlate
-		 * test results and tests in the document with those in the workspace
-		 * (test explorer). This must not change for the lifetime of a test item.
-		 *
-		 * If the ID is not provided, it defaults to the concatenation of the
-		 * item's label and its parent's ID, if any.
+		 * Display name describing the test case.
 		 */
-		readonly id?: string;
+		label: string;
 
 		/**
 		 * Optional description that appears next to the label.
@@ -2313,40 +2392,44 @@ declare module 'vscode' {
 		description?: string;
 
 		/**
-		 * Whether this test item can be run individually, defaults to `true`
-		 * if not provided.
+		 * Whether this test item can be run individually, defaults to `true`.
 		 *
 		 * In some cases, like Go's tests, test can have children but these
 		 * children cannot be run independently.
 		 */
-		runnable?: boolean;
+		runnable: boolean;
 
 		/**
-		 * Whether this test item can be debugged. Defaults to `false` if not provided.
+		 * Whether this test item can be debugged individually, defaults to `false`.
+		 *
+		 * In some cases, like Go's tests, test can have children but these
+		 * children cannot be run independently.
 		 */
-		debuggable?: boolean;
+		debuggable: boolean;
 
 		/**
-		 * VS Code location.
+		 * Location of the test in the workspace. This is used to show line
+		 * decorations and code lenses for the test.
 		 */
 		location?: Location;
 
 		/**
 		 * Optional list of nested tests for this item.
 		 */
-		children?: TestItem[];
+		children: TestItem[];
+
+		/**
+		 * Creates a new TestItem instance.
+		 * @param id Value of the "id" property
+		 * @param label Value of the "label" property.
+		 */
+		constructor(id: string, label: string);
 	}
 
 	/**
-	 * A {@link TestItem} with its defaults filled in.
+	 * Possible states of tests in a test run.
 	 */
-	export type RequiredTestItem = {
-		[K in keyof Required<TestItem>]: K extends 'children'
-		? RequiredTestItem[]
-		: (K extends 'description' | 'location' ? TestItem[K] : Required<TestItem>[K])
-	};
-
-	export enum TestRunState {
+	export enum TestResult {
 		// Initial state
 		Unset = 0,
 		// Test will be run, but is not currently running.
@@ -2364,27 +2447,29 @@ declare module 'vscode' {
 	}
 
 	/**
-	 * TestState includes a test and its run state. This is included in the
-	 * {@link TestItem} and is immutable; it should be replaced in th TestItem
-	 * in order to update it. This allows consumers to quickly and easily check
-	 * for changes via object identity.
+	 * TestState associated with a test in its results.
 	 */
-	export interface TestState {
+	export class TestState {
 		/**
 		 * Current state of the test.
 		 */
-		readonly state: TestRunState;
+		readonly state: TestResult;
 
 		/**
 		 * Optional duration of the test run, in milliseconds.
 		 */
-		readonly duration?: number;
+		duration?: number;
 
 		/**
 		 * Associated test run message. Can, for example, contain assertion
 		 * failure information if the test fails.
 		 */
-		readonly messages?: ReadonlyArray<Readonly<TestMessage>>;
+		messages: TestMessage[];
+
+		/**
+		 * Creates a new TestState instance.
+		 */
+		constructor(state: TestResult);
 	}
 
 	/**
@@ -2401,24 +2486,24 @@ declare module 'vscode' {
 	 * Message associated with the test state. Can be linked to a specific
 	 * source range -- useful for assertion failures, for example.
 	 */
-	export interface TestMessage {
+	export class TestMessage {
 		/**
 		 * Human-readable message text to display.
 		 */
 		message: string | MarkdownString;
 
 		/**
-		 * Message severity. Defaults to "Error", if not provided.
+		 * Message severity. Defaults to "Error".
 		 */
-		severity?: TestMessageSeverity;
+		severity: TestMessageSeverity;
 
 		/**
-		 * Expected test output. If given with `actual`, a diff view will be shown.
+		 * Expected test output. If given with `actualOutput`, a diff view will be shown.
 		 */
 		expectedOutput?: string;
 
 		/**
-		 * Actual test output. If given with `actual`, a diff view will be shown.
+		 * Actual test output. If given with `expectedOutput`, a diff view will be shown.
 		 */
 		actualOutput?: string;
 
@@ -2426,6 +2511,59 @@ declare module 'vscode' {
 		 * Associated file location.
 		 */
 		location?: Location;
+
+		/**
+		 * Creates a new TestMessage that will present as a diff in the editor.
+		 * @param message Message to display to the user.
+		 * @param expected Expected output.
+		 * @param actual Actual output.
+		 */
+		static diff(message: string | MarkdownString, expected: string, actual: string): TestMessage;
+
+		/**
+		 * Creates a new TestMessage instance.
+		 * @param message The message to show to the user.
+		 */
+		constructor(message: string | MarkdownString);
+	}
+
+	/**
+	 * TestResults can be provided to VS Code, or read from it.
+	 *
+	 * The results contain a 'snapshot' of the tests at the point when the test
+	 * run is complete. Therefore, information such as {@link Location} instances
+	 * may be out of date. If the test still exists in the workspace, consumers
+	 * can use its `id` to correlate the result instance with the living test.
+	 *
+	 * @todo coverage and other info may eventually be provided here
+	 */
+	export interface TestResults {
+		/**
+		 * Unix milliseconds timestamp at which the tests were completed.
+		 */
+		completedAt: number;
+
+		/**
+		 * List of test results. The items in this array are the items that
+		 * were passed in the {@link test.runTests} method.
+		 */
+		results: ReadonlyArray<Readonly<TestItemWithResults>>;
+	}
+
+	/**
+	 * A {@link TestItem} with an associated result, which appear or can be
+	 * provided in {@link TestResult} interfaces.
+	 */
+	export interface TestItemWithResults extends TestItem {
+		/**
+		 * Current result of the test.
+		 */
+		result: TestState;
+
+		/**
+		 * Optional list of nested tests for this item.
+		 */
+		children: Readonly<TestItemWithResults>[];
 	}
 
 	//#endregion
@@ -2641,6 +2779,17 @@ declare module 'vscode' {
 		currentTrustState: WorkspaceTrustState;
 	}
 
+	/**
+	 * The object describing the properties of the workspace trust request
+	 */
+	export interface WorkspaceTrustRequest {
+		/**
+		 * When true, a modal dialog will be used to request workspace trust.
+		 * When false, a badge will be displayed on the Setting activity bar item
+		 */
+		modal: boolean;
+	}
+
 	export namespace workspace {
 		/**
 		 * The trust state of the current workspace
@@ -2649,9 +2798,10 @@ declare module 'vscode' {
 
 		/**
 		 * Prompt the user to chose whether to trust the current workspace
-		 * @param message Optional message which would be displayed in the prompt
+		 * @param request Optional object describing the properties of the
+		 * workspace trust request
 		 */
-		export function requireWorkspaceTrust(message?: string): Thenable<WorkspaceTrustState>;
+		export function requireWorkspaceTrust(request?: WorkspaceTrustRequest): Thenable<WorkspaceTrustState>;
 
 		/**
 		 * Event that fires when the trust state of the current workspace changes
@@ -2660,4 +2810,65 @@ declare module 'vscode' {
 	}
 
 	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/118084
+
+	/**
+	 * The reason why code actions were requested.
+	 */
+	export enum CodeActionTriggerKind {
+		/**
+		 * Code actions were requested automatically.
+		 *
+		 * This typically happens when current selection in a file changes, but can
+		 * also be triggered when file content changes.
+		 */
+		Automatic = 1,
+
+		/**
+		 * Code actions were requested maually by the user or an extension.
+		 */
+		Manual = 2,
+	}
+
+	export interface CodeActionContext {
+		/**
+		 * The reason why code actions were requested.
+		 */
+		readonly triggerKind: CodeActionTriggerKind;
+	}
+	//#endregion
+
+	//#region https://github.com/microsoft/vscode/issues/115616 @alexr00
+	export enum PortAutoForwardAction {
+		Notify = 1,
+		OpenBrowser = 2,
+		OpenPreview = 3,
+		Silent = 4,
+		Ignore = 5
+	}
+
+	export interface PortAttributes {
+		port: number;
+		autoForwardAction: PortAutoForwardAction
+	}
+
+	export interface PortAttributesProvider {
+		providePortAttributes(ports: number[], pid: number | undefined, commandLine: string | undefined, token: CancellationToken): ProviderResult<PortAttributes[]>;
+	}
+
+	export namespace workspace {
+		/**
+		 * If your extension listens on ports, consider registering a PortAttributesProvider to provide information
+		 * about the ports. For example, a debug extension may know about debug ports in it's debuggee. By providing
+		 * this information with a PortAttributesProvider the extension can tell VS Code that these ports should be
+		 * ignored, since they don't need to be user facing.
+		 *
+		 * @param portSelector If registerPortAttributesProvider is called after you start your process then you may already
+		 * know the range of ports or the pid of your process.
+		 * @param provider The PortAttributesProvider
+		 */
+		export function registerPortAttributesProvider(portSelector: { pid?: number, portRange?: [number, number] }, provider: PortAttributesProvider): Disposable;
+	}
+	//#endregion
 }

From 8e67fb0b2f5535cec7fd39f058dd3de76add9c40 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Mon, 15 Mar 2021 18:01:03 +0100
Subject: [PATCH 03/14] enable different mimetype from Pharo

---
 myTests/oo-analysis.moosebook |  2 +-
 src/moosebook.ts              | 10 ++++++++--
 src/moosebookProvider.ts      |  8 +++++---
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/myTests/oo-analysis.moosebook b/myTests/oo-analysis.moosebook
index 7a222ec..f52d627 100644
--- a/myTests/oo-analysis.moosebook
+++ b/myTests/oo-analysis.moosebook
@@ -1 +1 @@
-[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream."},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , self version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload"},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":""}]
\ No newline at end of file
+[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := false.\r\naggregation := false.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"}]
\ No newline at end of file
diff --git a/src/moosebook.ts b/src/moosebook.ts
index 714e124..6a51eb7 100644
--- a/src/moosebook.ts
+++ b/src/moosebook.ts
@@ -6,6 +6,12 @@
 import * as vscode from 'vscode';
 import { client } from './extension';
 
+interface PharoResponse {
+	mimetype: string,
+	content: string
+}
+
+
 export class Moosebook implements vscode.Disposable {
 
 
@@ -25,9 +31,9 @@ export class Moosebook implements vscode.Disposable {
 
 	}
 
-	public async eval(cell: vscode.NotebookCell): Promise<string> {
+	public async eval(cell: vscode.NotebookCell): Promise<PharoResponse> {
 		// Eval
-		return client.sendRequest('command:printIt', {"line": cell.document.getText()}).then( (result: string) => {
+		return client.sendRequest('command:notebookPrintIt', {"line": cell.document.getText()}).then( (result: PharoResponse) => {
 			return result;
 		}).catch((error) => { throw new Error(error);
 		});
diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
index 3113d4d..9c3cf30 100644
--- a/src/moosebookProvider.ts
+++ b/src/moosebookProvider.ts
@@ -12,6 +12,7 @@ interface ProjectAssociation {
 	(key: string): boolean;
 }
 
+
 export class MoosebookContentProvider implements  vscode.NotebookContentProvider, vscode.NotebookKernel {
 	readonly id = 'moosebookKernel';
 	public label = 'Moosebook Kernel';
@@ -115,7 +116,7 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 
 	public async executeCell(_document: vscode.NotebookDocument, cell: vscode.NotebookCell): Promise<void> {
 
-		let output = '';
+		let output = {mimetype: 'text/html', content: 'error... '};
 		let error: Error | undefined;
 		const moosebook = this.lookupMoosebook(cell.index);
 		if (moosebook) {
@@ -125,11 +126,12 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 				error = e;
 			}
 		}
+
 		const edit = new vscode.WorkspaceEdit();
 		edit.replaceNotebookCellOutput(_document.uri, cell.index, [{
 			outputs: [{
-				mime: 'text/html',
-				value: output
+				mime: output.mimetype,
+				value: output.content
 			}],
 			id: cell.index + ''
 		}])

From 51bc77f2260995668db58410cd819e30658d68bf Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Wed, 17 Mar 2021 13:34:18 +0100
Subject: [PATCH 04/14] update moosebook example

---
 myTests/oo-analysis.moosebook | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/myTests/oo-analysis.moosebook b/myTests/oo-analysis.moosebook
index f52d627..c259144 100644
--- a/myTests/oo-analysis.moosebook
+++ b/myTests/oo-analysis.moosebook
@@ -1 +1 @@
-[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := false.\r\naggregation := false.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"}]
\ No newline at end of file
+[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := false.\r\naggregation := false.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\nclasses := { Array. String. Dictionary. Set }.\r\nb := RSPie new.\r\nb objects: classes.\r\nb slice: #numberOfMethods.\r\nb build.\r\nb renderIn: canvas.\r\ncanvas"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\n\r\nshapes := Collection withAllSubclasses collect: [ :cls | | methods |\r\n    methods := cls methods collect: [:met | RSBox new color: Color black; size: 5; yourself ].\r\n    RSGridLayout on: methods.\r\n    RSComposite new\r\n        model: cls;\r\n        popup;\r\n        shapes: methods;\r\n        padding: (Margin\r\n            left: 50\r\n            right: 5\r\n            top: 20\r\n            bottom: 5);\r\n        color: Color blue translucent;\r\n        yourself  ].\r\nRSGridLayout on: shapes.\r\ncanvas addAll: shapes.\r\ncanvas @ RSCanvasController.\r\n^ canvas"},{"kind":2,"language":"pharo","value":"| data radius color canvas border |\r\n\t\"1800 ellipses\"\r\n\tdata := 0 to: 358 by: 2.\r\n\tcanvas := RSCanvas new.\r\n\tradius := NSScale linear\r\n\t\tdomain: #(1 10);\r\n\t\trange: #(180 240).\r\n\tcolor := NSScale linear\r\n\t\tdomain: #(1 7 10);\r\n\t\trange: #('brown' '4682b4' 'brown').\r\n\tborder := RSBorder new.\r\n\t1 to: 10 do: [ :i |\r\n\t\tcanvas addAll: (data collect: [ :a | \r\n\t\t\t| d |\r\n\t\t\td := a degreesToRadians.\r\n\t\t\tRSEllipse new\r\n\t\t\t\tradius: 4.5;\r\n\t\t\t\tcolor: (color scale: i);\r\n\t\t\t\tborder: border;\r\n\t\t\t\tposition: (radius scale: i) * (d cos @ d sin);\r\n\t\t\t\tyourself ]).\r\n\t\t ].\r\n\tcanvas @ RSCanvasController.\r\n\t^ canvas"}]
\ No newline at end of file

From e9c1949e8dd8423a06dfc63d87d87e054c7251ce Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Fri, 19 Mar 2021 13:52:10 +0100
Subject: [PATCH 05/14] add diagnostics gif

---
 README.md                |  17 +++++++++++------
 docs/img/diagnostics.gif | Bin 0 -> 262643 bytes
 2 files changed, 11 insertions(+), 6 deletions(-)
 create mode 100644 docs/img/diagnostics.gif

diff --git a/README.md b/README.md
index caa084f..d6814c5 100644
--- a/README.md
+++ b/README.md
@@ -21,32 +21,37 @@ We present here the existing features
 
 ### Generic feature
 
-1. Code highlighting
+**Code highlighting**
 
 ![Highlighting](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/highlighting.png)
 
 ### Supported Language Server feature
 
-1. Code formatting
+**Code formatting**
 
 ![Format gif](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/format.gif)
 
-2. Tonel file formatting
+**Tonel file formatting**
 
 ![Tonel file formatting](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/format-tonel.gif)
 
-3. Hover
+**Hover**
 
 ![Hover](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/hover.png)
 
-4. Auto-completion
+**Auto-completion**
 
 ![Auto-Completion](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/Auto-completion.gif)
 
-5. Help with method signature
+**Help with method signature**
 
 ![Signature help gif](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/signatureHelp.gif)
 
+**Diagnostics**
+
+![Diagnostics gif](https://raw.githubusercontent.com/badetitou/vscode-pharo/main/docs/img/diagnostics.gif)
+
+
 ### Debug Adapter Protocol feature
 
 1. Break on halt
diff --git a/docs/img/diagnostics.gif b/docs/img/diagnostics.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e82dc93063cbc53fc29b7decf0cb60359b57ba09
GIT binary patch
literal 262643
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

literal 0
HcmV?d00001


From b14225d8e6c19529b69e583979c88978063c40c8 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Tue, 23 Mar 2021 16:10:13 +0100
Subject: [PATCH 06/14] update to last proposed api

---
 myTests/oo-analysis.moosebook  |   2 +-
 src/moosebook.ts               |   2 +
 src/moosebookProvider.ts       |  96 +++---
 src/types/vscode.proposed.d.ts | 534 +++++++++++++++++----------------
 4 files changed, 332 insertions(+), 302 deletions(-)

diff --git a/myTests/oo-analysis.moosebook b/myTests/oo-analysis.moosebook
index c259144..f1ce43f 100644
--- a/myTests/oo-analysis.moosebook
+++ b/myTests/oo-analysis.moosebook
@@ -1 +1 @@
-[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := false.\r\naggregation := false.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\nclasses := { Array. String. Dictionary. Set }.\r\nb := RSPie new.\r\nb objects: classes.\r\nb slice: #numberOfMethods.\r\nb build.\r\nb renderIn: canvas.\r\ncanvas"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\n\r\nshapes := Collection withAllSubclasses collect: [ :cls | | methods |\r\n    methods := cls methods collect: [:met | RSBox new color: Color black; size: 5; yourself ].\r\n    RSGridLayout on: methods.\r\n    RSComposite new\r\n        model: cls;\r\n        popup;\r\n        shapes: methods;\r\n        padding: (Margin\r\n            left: 50\r\n            right: 5\r\n            top: 20\r\n            bottom: 5);\r\n        color: Color blue translucent;\r\n        yourself  ].\r\nRSGridLayout on: shapes.\r\ncanvas addAll: shapes.\r\ncanvas @ RSCanvasController.\r\n^ canvas"},{"kind":2,"language":"pharo","value":"| data radius color canvas border |\r\n\t\"1800 ellipses\"\r\n\tdata := 0 to: 358 by: 2.\r\n\tcanvas := RSCanvas new.\r\n\tradius := NSScale linear\r\n\t\tdomain: #(1 10);\r\n\t\trange: #(180 240).\r\n\tcolor := NSScale linear\r\n\t\tdomain: #(1 7 10);\r\n\t\trange: #('brown' '4682b4' 'brown').\r\n\tborder := RSBorder new.\r\n\t1 to: 10 do: [ :i |\r\n\t\tcanvas addAll: (data collect: [ :a | \r\n\t\t\t| d |\r\n\t\t\td := a degreesToRadians.\r\n\t\t\tRSEllipse new\r\n\t\t\t\tradius: 4.5;\r\n\t\t\t\tcolor: (color scale: i);\r\n\t\t\t\tborder: border;\r\n\t\t\t\tposition: (radius scale: i) * (d cos @ d sin);\r\n\t\t\t\tyourself ]).\r\n\t\t ].\r\n\tcanvas @ RSCanvasController.\r\n\t^ canvas"}]
\ No newline at end of file
+[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8 and VSCode"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := false.\r\naggregation := false.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\nclasses := { Array. String. Dictionary. Set }.\r\nb := RSPie new.\r\nb objects: classes.\r\nb slice: #numberOfMethods.\r\nb build.\r\nb renderIn: canvas.\r\ncanvas"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\n\r\nshapes := Collection withAllSubclasses collect: [ :cls | | methods |\r\n    methods := cls methods collect: [:met | RSBox new color: Color black; size: 5; yourself ].\r\n    RSGridLayout on: methods.\r\n    RSComposite new\r\n        model: cls;\r\n        popup;\r\n        shapes: methods;\r\n        padding: (Margin\r\n            left: 50\r\n            right: 5\r\n            top: 20\r\n            bottom: 5);\r\n        color: Color blue translucent;\r\n        yourself  ].\r\nRSGridLayout on: shapes.\r\ncanvas addAll: shapes.\r\ncanvas @ RSCanvasController.\r\n^ canvas"},{"kind":2,"language":"pharo","value":"| data radius color canvas border |\r\n\t\"1800 ellipses\"\r\n\tdata := 0 to: 358 by: 2.\r\n\tcanvas := RSCanvas new.\r\n\tradius := NSScale linear\r\n\t\tdomain: #(1 10);\r\n\t\trange: #(180 240).\r\n\tcolor := NSScale linear\r\n\t\tdomain: #(1 7 10);\r\n\t\trange: #('brown' '4682b4' 'brown').\r\n\tborder := RSBorder new.\r\n\t1 to: 10 do: [ :i |\r\n\t\tcanvas addAll: (data collect: [ :a | \r\n\t\t\t| d |\r\n\t\t\td := a degreesToRadians.\r\n\t\t\tRSEllipse new\r\n\t\t\t\tradius: 4.5;\r\n\t\t\t\tcolor: (color scale: i);\r\n\t\t\t\tborder: border;\r\n\t\t\t\tposition: (radius scale: i) * (d cos @ d sin);\r\n\t\t\t\tyourself ]).\r\n\t\t ].\r\n\tcanvas @ RSCanvasController.\r\n\t^ canvas"}]
\ No newline at end of file
diff --git a/src/moosebook.ts b/src/moosebook.ts
index 6a51eb7..b2536c9 100644
--- a/src/moosebook.ts
+++ b/src/moosebook.ts
@@ -34,6 +34,8 @@ export class Moosebook implements vscode.Disposable {
 	public async eval(cell: vscode.NotebookCell): Promise<PharoResponse> {
 		// Eval
 		return client.sendRequest('command:notebookPrintIt', {"line": cell.document.getText()}).then( (result: PharoResponse) => {
+			if (result.mimetype == 'error')
+			throw new Error(result.content);
 			return result;
 		}).catch((error) => { throw new Error(error);
 		});
diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
index 9c3cf30..a996704 100644
--- a/src/moosebookProvider.ts
+++ b/src/moosebookProvider.ts
@@ -19,6 +19,8 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 
 	private readonly _associations = new Map<string, [ProjectAssociation, Moosebook]>();
 	private _localDisposables: vscode.Disposable[] = [];
+	supportedLanguages?: string[] = ['pharo'];
+	private _executionOrder = 0;
 
 	constructor() {
 		this._localDisposables.push(
@@ -49,6 +51,58 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 		});
 	}
 
+	interrupt?(document: vscode.NotebookDocument): void {
+		throw new Error('Method not implemented.');
+	}
+
+	async executeCellsRequest(document: vscode.NotebookDocument, ranges: vscode.NotebookCellRange[]) {
+		const cells: vscode.NotebookCell[] = [];
+		for (let range of ranges) {
+			for (let i = range.start; i < range.end; i++) {
+				cells.push(document.cells[i]);
+			}
+		}
+		this._executeCells(cells);
+	}
+
+	private async _executeCells(cells: vscode.NotebookCell[]): Promise<void> {
+		for (const cell of cells) {
+			const execution = vscode.notebook.createNotebookCellExecutionTask(cell.notebook.uri, cell.index, this.id)!;
+			await this._doExecuteCell(execution);
+		}
+	}
+
+	private async _doExecuteCell(execution: vscode.NotebookCellExecutionTask): Promise<void> {
+
+		execution.executionOrder = ++this._executionOrder;
+		execution.start({ startTime: Date.now() });
+
+		let output = {mimetype: 'text/html', content: 'error... '};
+		let error: Error | undefined;
+		const moosebook = this.lookupMoosebook(execution.cell.index);
+		try {
+			output = await moosebook.eval(execution.cell);
+		} catch(err) {
+			execution.replaceOutput([new vscode.NotebookCellOutput([
+				new vscode.NotebookCellOutputItem('application/x.notebook.error-traceback', {
+					ename: err instanceof Error && err.name || 'error',
+					evalue: err instanceof Error && err.message || JSON.stringify(err, undefined, 4),
+					traceback: []
+				})
+			])]);
+			execution.end({ success: false });
+			return;
+		}
+	
+
+		execution.replaceOutput([new vscode.NotebookCellOutput([
+			new vscode.NotebookCellOutputItem(output.mimetype, output.content)])]);
+		execution.end({ success: true });
+	}
+
+
+
+
 	public lookupMoosebook(keyOrUri: string | number | vscode.Uri | undefined): Moosebook | undefined {
 		if (keyOrUri) {
 			let key: string;
@@ -112,48 +166,6 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 		return { id: '', delete: () => {} };
 	}
 
-
-
-	public async executeCell(_document: vscode.NotebookDocument, cell: vscode.NotebookCell): Promise<void> {
-
-		let output = {mimetype: 'text/html', content: 'error... '};
-		let error: Error | undefined;
-		const moosebook = this.lookupMoosebook(cell.index);
-		if (moosebook) {
-			try {
-				output = await moosebook.eval(cell);
-			} catch(e) {
-				error = e;
-			}
-		}
-
-		const edit = new vscode.WorkspaceEdit();
-		edit.replaceNotebookCellOutput(_document.uri, cell.index, [{
-			outputs: [{
-				mime: output.mimetype,
-				value: output.content
-			}],
-			id: cell.index + ''
-		}])
-		// edit.replaceNotebookCellMetadata(_document.uri, cell.index, metadata);
-        vscode.workspace.applyEdit(edit);
-		
-	}
-
-	public cancelCellExecution(_document: vscode.NotebookDocument, _cell: vscode.NotebookCell): void {
-		// not yet supported
-	}
-
-	public async executeAllCells(document: vscode.NotebookDocument): Promise<void> {
-	  for (const cell of document.cells) {
-		await this.executeCell(document, cell);
-	  }
-	}
-
-	cancelAllCellsExecution(_document: vscode.NotebookDocument): void {
-		// not yet supported
-	}
-
 	public dispose() {
 	}
 
diff --git a/src/types/vscode.proposed.d.ts b/src/types/vscode.proposed.d.ts
index ef11faa..d78a878 100644
--- a/src/types/vscode.proposed.d.ts
+++ b/src/types/vscode.proposed.d.ts
@@ -664,156 +664,6 @@ declare module 'vscode' {
 
 	//#endregion
 
-	//#region inline value provider: https://github.com/microsoft/vscode/issues/105690
-
-	/**
-	 * The inline values provider interface defines the contract between extensions and the VS Code debugger inline values feature.
-	 * In this contract the provider returns inline value information for a given document range
-	 * and VS Code shows this information in the editor at the end of lines.
-	 */
-	export interface InlineValuesProvider {
-
-		/**
-		 * An optional event to signal that inline values have changed.
-		 * @see [EventEmitter](#EventEmitter)
-		 */
-		onDidChangeInlineValues?: Event<void> | undefined;
-
-		/**
-		 * Provide "inline value" information for a given document and range.
-		 * VS Code calls this method whenever debugging stops in the given document.
-		 * The returned inline values information is rendered in the editor at the end of lines.
-		 *
-		 * @param document The document for which the inline values information is needed.
-		 * @param viewPort The visible document range for which inline values should be computed.
-		 * @param context A bag containing contextual information like the current location.
-		 * @param token A cancellation token.
-		 * @return An array of InlineValueDescriptors or a thenable that resolves to such. The lack of a result can be
-		 * signaled by returning `undefined` or `null`.
-		 */
-		provideInlineValues(document: TextDocument, viewPort: Range, context: InlineValueContext, token: CancellationToken): ProviderResult<InlineValue[]>;
-	}
-
-	/**
-	 * A value-object that contains contextual information when requesting inline values from a InlineValuesProvider.
-	 */
-	export interface InlineValueContext {
-
-		/**
-		 * The stack frame (as a DAP Id) where the execution has stopped.
-		 */
-		readonly frameId: number;
-
-		/**
-		 * The document range where execution has stopped.
-		 * Typically the end position of the range denotes the line where the inline values are shown.
-		 */
-		readonly stoppedLocation: Range;
-	}
-
-	/**
-	 * Inline value information can be provided by different means:
-	 * - directly as a text value (class InlineValueText).
-	 * - as a name to use for a variable lookup (class InlineValueVariableLookup)
-	 * - as an evaluatable expression (class InlineValueEvaluatableExpression)
-	 * The InlineValue types combines all inline value types into one type.
-	 */
-	export type InlineValue = InlineValueText | InlineValueVariableLookup | InlineValueEvaluatableExpression;
-
-	/**
-	 * Provide inline value as text.
-	 */
-	export class InlineValueText {
-		/**
-		 * The document range for which the inline value applies.
-		 */
-		readonly range: Range;
-		/**
-		 * The text of the inline value.
-		 */
-		readonly text: string;
-		/**
-		 * Creates a new InlineValueText object.
-		 *
-		 * @param range The document line where to show the inline value.
-		 * @param text The value to be shown for the line.
-		 */
-		constructor(range: Range, text: string);
-	}
-
-	/**
-	 * Provide inline value through a variable lookup.
-	 * If only a range is specified, the variable name will be extracted from the underlying document.
-	 * An optional variable name can be used to override the extracted name.
-	 */
-	export class InlineValueVariableLookup {
-		/**
-		 * The document range for which the inline value applies.
-		 * The range is used to extract the variable name from the underlying document.
-		 */
-		readonly range: Range;
-		/**
-		 * If specified the name of the variable to look up.
-		 */
-		readonly variableName?: string;
-		/**
-		 * How to perform the lookup.
-		 */
-		readonly caseSensitiveLookup: boolean;
-		/**
-		 * Creates a new InlineValueVariableLookup object.
-		 *
-		 * @param range The document line where to show the inline value.
-		 * @param variableName The name of the variable to look up.
-		 * @param caseSensitiveLookup How to perform the lookup. If missing lookup is case sensitive.
-		 */
-		constructor(range: Range, variableName?: string, caseSensitiveLookup?: boolean);
-	}
-
-	/**
-	 * Provide an inline value through an expression evaluation.
-	 * If only a range is specified, the expression will be extracted from the underlying document.
-	 * An optional expression can be used to override the extracted expression.
-	 */
-	export class InlineValueEvaluatableExpression {
-		/**
-		 * The document range for which the inline value applies.
-		 * The range is used to extract the evaluatable expression from the underlying document.
-		 */
-		readonly range: Range;
-		/**
-		 * If specified the expression overrides the extracted expression.
-		 */
-		readonly expression?: string;
-		/**
-		 * Creates a new InlineValueEvaluatableExpression object.
-		 *
-		 * @param range The range in the underlying document from which the evaluatable expression is extracted.
-		 * @param expression If specified overrides the extracted expression.
-		 */
-		constructor(range: Range, expression?: string);
-	}
-
-	export namespace languages {
-
-		/**
-		 * Register a provider that returns data for the debugger's 'inline value' feature.
-		 * Whenever the generic VS Code debugger has stopped in a source file, providers registered for the language of the file
-		 * are called to return textual data that will be shown in the editor at the end of lines.
-		 *
-		 * Multiple providers can be registered for a language. In that case providers are asked in
-		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
-		 * not cause a failure of the whole operation.
-		 *
-		 * @param selector A selector that defines the documents this provider is applicable to.
-		 * @param provider An inline values provider.
-		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
-		 */
-		export function registerInlineValuesProvider(selector: DocumentSelector, provider: InlineValuesProvider): Disposable;
-	}
-
-	//#endregion
-
 	// eslint-disable-next-line vscode-dts-region-comments
 	//#region @weinand: variables view action contributions
 
@@ -1074,6 +924,24 @@ declare module 'vscode' {
 
 	//#endregion
 
+	//#region allow title property to QuickPickOptions/InputBoxOptions: https://github.com/microsoft/vscode/issues/77423
+
+	interface QuickPickOptions {
+		/**
+		 * An optional string that represents the tile of the quick pick.
+		 */
+		title?: string;
+	}
+
+	interface InputBoxOptions {
+		/**
+		 * An optional string that represents the tile of the input box.
+		 */
+		title?: string;
+	}
+
+	//#endregion
+
 	//#region Provide a way for custom editors to process untitled files without relying on textDocument https://github.com/microsoft/vscode/issues/115631
 	/**
 	 * Additional information about the opening custom document.
@@ -1095,18 +963,6 @@ declare module 'vscode' {
 		Code = 2
 	}
 
-	export enum NotebookCellRunState {
-		Running = 1,
-		Idle = 2,
-		Success = 3,
-		Error = 4
-	}
-
-	export enum NotebookRunState {
-		Running = 1,
-		Idle = 2
-	}
-
 	export class NotebookCellMetadata {
 		/**
 		 * Controls whether a cell's editor is editable/readonly.
@@ -1135,14 +991,16 @@ declare module 'vscode' {
 
 		// run related API, will be removed
 		readonly hasExecutionOrder?: boolean;
-		readonly executionOrder?: number;
-		readonly runState?: NotebookCellRunState;
-		readonly runStartTime?: number;
-		readonly lastRunDuration?: number;
 
-		constructor(editable?: boolean, breakpointMargin?: boolean, hasExecutionOrder?: boolean, executionOrder?: number, runState?: NotebookCellRunState, runStartTime?: number, statusMessage?: string, lastRunDuration?: number, inputCollapsed?: boolean, outputCollapsed?: boolean, custom?: Record<string, any>)
+		constructor(editable?: boolean, breakpointMargin?: boolean, hasExecutionOrder?: boolean, statusMessage?: string, lastRunDuration?: number, inputCollapsed?: boolean, outputCollapsed?: boolean, custom?: Record<string, any>)
+
+		with(change: { editable?: boolean | null, breakpointMargin?: boolean | null, hasExecutionOrder?: boolean | null, statusMessage?: string | null, lastRunDuration?: number | null, inputCollapsed?: boolean | null, outputCollapsed?: boolean | null, custom?: Record<string, any> | null, }): NotebookCellMetadata;
+	}
 
-		with(change: { editable?: boolean | null, breakpointMargin?: boolean | null, hasExecutionOrder?: boolean | null, executionOrder?: number | null, runState?: NotebookCellRunState | null, runStartTime?: number | null, statusMessage?: string | null, lastRunDuration?: number | null, inputCollapsed?: boolean | null, outputCollapsed?: boolean | null, custom?: Record<string, any> | null, }): NotebookCellMetadata;
+	export interface NotebookCellExecutionSummary {
+		executionOrder?: number;
+		success?: boolean;
+		duration?: number;
 	}
 
 	// todo@API support ids https://github.com/jupyter/enhancement-proposals/blob/master/62-cell-id/cell-id.md
@@ -1153,6 +1011,7 @@ declare module 'vscode' {
 		readonly document: TextDocument;
 		readonly metadata: NotebookCellMetadata
 		readonly outputs: ReadonlyArray<NotebookCellOutput>;
+		readonly latestExecutionSummary: NotebookCellExecutionSummary | undefined;
 	}
 
 	export class NotebookDocumentMetadata {
@@ -1180,12 +1039,9 @@ declare module 'vscode' {
 		// todo@API is this a kernel property?
 		readonly cellHasExecutionOrder: boolean;
 
-		// todo@API remove
-		readonly runState: NotebookRunState;
-
-		constructor(editable?: boolean, cellEditable?: boolean, cellHasExecutionOrder?: boolean, custom?: { [key: string]: any; }, runState?: NotebookRunState, trusted?: boolean);
+		constructor(editable?: boolean, cellEditable?: boolean, cellHasExecutionOrder?: boolean, custom?: { [key: string]: any; }, trusted?: boolean);
 
-		with(change: { editable?: boolean | null, cellEditable?: boolean | null, cellHasExecutionOrder?: boolean | null, custom?: { [key: string]: any; } | null, runState?: NotebookRunState | null, trusted?: boolean | null, }): NotebookDocumentMetadata
+		with(change: { editable?: boolean | null, cellEditable?: boolean | null, cellHasExecutionOrder?: boolean | null, custom?: { [key: string]: any; } | null, trusted?: boolean | null, }): NotebookDocumentMetadata
 	}
 
 	export interface NotebookDocumentContentOptions {
@@ -1270,7 +1126,7 @@ declare module 'vscode' {
 		readonly document: NotebookDocument;
 
 		/**
-		 * The primary selected cell on this notebook editor.
+		 * @deprecated
 		 */
 		// todo@API should not be undefined, rather a default
 		readonly selection?: NotebookCell;
@@ -1298,7 +1154,7 @@ declare module 'vscode' {
 		readonly viewColumn?: ViewColumn;
 
 		/**
-		 * Fired when the panel is disposed.
+		 * @deprecated
 		 */
 		// @rebornix REMOVE/REplace NotebookCommunication
 		// todo@API fishy? notebooks are public objects, there should be a "global" events for this
@@ -1359,6 +1215,12 @@ declare module 'vscode' {
 		readonly visibleRanges: ReadonlyArray<NotebookCellRange>;
 	}
 
+	export interface NotebookCellExecutionStateChangeEvent {
+		readonly document: NotebookDocument;
+		readonly cell: NotebookCell;
+		readonly executionState: NotebookCellExecutionState;
+	}
+
 	// todo@API support ids https://github.com/jupyter/enhancement-proposals/blob/master/62-cell-id/cell-id.md
 	export class NotebookCellData {
 		kind: NotebookCellKind;
@@ -1368,7 +1230,8 @@ declare module 'vscode' {
 		language: string;
 		outputs?: NotebookCellOutput[];
 		metadata?: NotebookCellMetadata;
-		constructor(kind: NotebookCellKind, source: string, language: string, outputs?: NotebookCellOutput[], metadata?: NotebookCellMetadata)
+		latestExecutionSummary?: NotebookCellExecutionSummary;
+		constructor(kind: NotebookCellKind, source: string, language: string, outputs?: NotebookCellOutput[], metadata?: NotebookCellMetadata, latestExecutionSummary?: NotebookCellExecutionSummary);
 	}
 
 	export class NotebookData {
@@ -1460,6 +1323,8 @@ declare module 'vscode' {
 
 	// code specific mime types
 	// application/x.notebook.error-traceback
+	// application/x.notebook.stdout
+	// application/x.notebook.stderr
 	// application/x.notebook.stream
 	export class NotebookCellOutputItem {
 
@@ -1532,8 +1397,25 @@ declare module 'vscode' {
 
 	//#endregion
 
+	//#region https://github.com/microsoft/vscode/issues/106744, NotebookSerializer
+
+	export interface NotebookSerializer {
+		dataToNotebook(data: Uint8Array): NotebookData | Thenable<NotebookData>;
+		notebookToData(data: NotebookData): Uint8Array | Thenable<Uint8Array>;
+	}
+
+	export namespace notebook {
+
+		// TODO@api use NotebookDocumentFilter instead of just notebookType:string?
+		// TODO@API options duplicates the more powerful variant on NotebookContentProvider
+		export function registerNotebookSerializer(notebookType: string, provider: NotebookSerializer, options?: NotebookDocumentContentOptions): Disposable;
+	}
+
+	//#endregion
+
 	//#region https://github.com/microsoft/vscode/issues/106744, NotebookContentProvider
 
+
 	interface NotebookDocumentBackup {
 		/**
 		 * Unique identifier for the backup.
@@ -1568,6 +1450,9 @@ declare module 'vscode' {
 		readonly onDidChangeNotebookContentOptions?: Event<NotebookDocumentContentOptions>;
 
 		// todo@API remove! against separation of data provider and renderer
+		/**
+		 * @deprecated
+		 */
 		// eslint-disable-next-line vscode-dts-cancellation
 		resolveNotebook(document: NotebookDocument, webview: NotebookCommunication): Thenable<void>;
 
@@ -1606,27 +1491,6 @@ declare module 'vscode' {
 
 	//#region https://github.com/microsoft/vscode/issues/106744, NotebookKernel
 
-	// todo@API use the NotebookCellExecution-object as a container to model and enforce
-	// the flow of a cell execution
-
-	// kernel -> execute_info
-	// ext -> createNotebookCellExecution(cell)
-	// kernel -> done
-	// exec.dispose();
-
-	// export interface NotebookCellExecution {
-	// 	dispose(): void;
-	// 	clearOutput(): void;
-	// 	appendOutput(out: NotebookCellOutput): void;
-	// 	replaceOutput(out: NotebookCellOutput): void;
-	//  appendOutputItems(output:string, items: NotebookCellOutputItem[]):void;
-	//  replaceOutputItems(output:string, items: NotebookCellOutputItem[]):void;
-	// }
-
-	// export function createNotebookCellExecution(cell: NotebookCell, startTime?: number): NotebookCellExecution;
-	// export const onDidStartNotebookCellExecution: Event<any>;
-	// export const onDidStopNotebookCellExecution: Event<any>;
-
 	export interface NotebookKernel {
 
 		// todo@API make this mandatory?
@@ -1651,14 +1515,86 @@ declare module 'vscode' {
 		// fired when properties like the supported languages etc change
 		// onDidChangeProperties?: Event<void>
 
-		// @roblourens
-		// todo@API change to `executeCells(document: NotebookDocument, cells: NotebookCellRange[], context:{isWholeNotebooke: boolean}, token: CancelationToken): void;`
-		// todo@API interrupt vs cancellation, https://github.com/microsoft/vscode/issues/106741
-		// interrupt?():void;
-		executeCell(document: NotebookDocument, cell: NotebookCell): void;
-		cancelCellExecution(document: NotebookDocument, cell: NotebookCell): void;
-		executeAllCells(document: NotebookDocument): void;
-		cancelAllCellsExecution(document: NotebookDocument): void;
+		/**
+		 * A kernel can optionally implement this which will be called when any "cancel" button is clicked in the document.
+		 */
+		interrupt?(document: NotebookDocument): void;
+
+		/**
+		 * Called when the user triggers execution of a cell by clicking the run button for a cell, multiple cells,
+		 * or full notebook. The cell will be put into the Pending state when this method is called. If
+		 * createNotebookCellExecutionTask has not been called by the time the promise returned by this method is
+		 * resolved, the cell will be put back into the Idle state.
+		 */
+		executeCellsRequest(document: NotebookDocument, ranges: NotebookCellRange[]): Thenable<void>;
+	}
+
+	export interface NotebookCellExecuteStartContext {
+		// TODO@roblou are we concerned about clock issues with this absolute time?
+		/**
+		 * The time that execution began, in milliseconds in the Unix epoch. Used to drive the clock
+		 * that shows for how long a cell has been running. If not given, the clock won't be shown.
+		 */
+		startTime?: number;
+	}
+
+	export interface NotebookCellExecuteEndContext {
+		/**
+		 * If true, a green check is shown on the cell status bar.
+		 * If false, a red X is shown.
+		 */
+		success?: boolean;
+
+		/**
+		 * The total execution time in milliseconds.
+		 */
+		duration?: number;
+	}
+
+	/**
+	 * A NotebookCellExecutionTask is how the kernel modifies a notebook cell as it is executing. When
+	 * [`createNotebookCellExecutionTask`](#notebook.createNotebookCellExecutionTask) is called, the cell
+	 * enters the Pending state. When `start()` is called on the execution task, it enters the Executing state. When
+	 * `end()` is called, it enters the Idle state. While in the Executing state, cell outputs can be
+	 * modified with the methods on the run task.
+	 *
+	 * All outputs methods operate on this NotebookCellExecutionTask's cell by default. They optionally take
+	 * a cellIndex parameter that allows them to modify the outputs of other cells. `appendOutputItems` and
+	 * `replaceOutputItems` operate on the output with the given ID, which can be an output on any cell. They
+	 * all resolve once the output edit has been applied.
+	 */
+	export interface NotebookCellExecutionTask {
+		readonly document: NotebookDocument;
+		readonly cell: NotebookCell;
+
+		start(context?: NotebookCellExecuteStartContext): void;
+		executionOrder: number | undefined;
+		end(result?: NotebookCellExecuteEndContext): void;
+		readonly token: CancellationToken;
+
+		clearOutput(cellIndex?: number): Thenable<void>;
+		appendOutput(out: NotebookCellOutput[], cellIndex?: number): Thenable<void>;
+		replaceOutput(out: NotebookCellOutput[], cellIndex?: number): Thenable<void>;
+		appendOutputItems(items: NotebookCellOutputItem[], outputId: string): Thenable<void>;
+		replaceOutputItems(items: NotebookCellOutputItem[], outputId: string): Thenable<void>;
+	}
+
+	export enum NotebookCellExecutionState {
+		Idle = 1,
+		Pending = 2,
+		Executing = 3,
+	}
+
+	export namespace notebook {
+		/**
+		 * Creates a [`NotebookCellExecutionTask`](#NotebookCellExecutionTask). Should only be called by a kernel. Returns undefined unless requested by the active kernel.
+		 * @param uri The [uri](#Uri) of the notebook document.
+		 * @param index The index of the cell.
+		 * @param kernelId The id of the kernel requesting this run task. If this kernel is not the current active kernel, `undefined` is returned.
+		 */
+		export function createNotebookCellExecutionTask(uri: Uri, index: number, kernelId: string): NotebookCellExecutionTask | undefined;
+
+		export const onDidChangeCellExecutionState: Event<NotebookCellExecutionStateChangeEvent>;
 	}
 
 	export type NotebookFilenamePattern = GlobPattern | { include: GlobPattern; exclude: GlobPattern; };
@@ -2249,33 +2185,6 @@ declare module 'vscode' {
 		 * in {@link onDidChangeTest} when a test is added or removed.
 		 */
 		readonly root: T;
-
-		/**
-		 * An event that fires when an existing test `root` changes.  This can be
-		 * a result of a property update, or an update to its children. Changes
-		 * made to tests will not be visible to {@link TestObserver} instances
-		 * until this event is fired.
-		 *
-		 * When a change is signalled, VS Code will check for any new or removed
-		 * direct children of the changed ite, For example, firing the event with
-		 * the {@link testRoot} will detect any new children in `root.children`.
-		 */
-		readonly onDidChangeTest: Event<T>;
-
-		/**
-		 * Promise that should be resolved when all tests that are initially
-		 * defined have been discovered. The provider should continue to watch for
-		 * changes and fire `onDidChangeTest` until the hierarchy is disposed.
-		 */
-		readonly discoveredInitialTests?: Thenable<unknown>;
-
-		/**
-		 * An event that fires when a test becomes outdated, as a result of
-		 * file changes, for example. In "auto run" mode, tests that are outdated
-		 * will be automatically re-run after a short delay. Firing a test
-		 * with children will mark the entire subtree as outdated.
-		 */
-		readonly onDidInvalidateTest?: Event<T>;
 	}
 
 	/**
@@ -2297,8 +2206,9 @@ declare module 'vscode' {
 		 *
 		 * @param workspace The workspace in which to observe tests
 		 * @param cancellationToken Token that signals the used asked to abort the test run.
+		 * @returns the root test item for the workspace
 		 */
-		provideWorkspaceTestHierarchy(workspace: WorkspaceFolder, token: CancellationToken): ProviderResult<TestHierarchy<T>>;
+		provideWorkspaceTestRoot(workspace: WorkspaceFolder, token: CancellationToken): ProviderResult<T>;
 
 		/**
 		 * Requests that tests be provided for the given document. This will be
@@ -2310,18 +2220,21 @@ declare module 'vscode' {
 		 * saved, if possible.
 		 *
 		 * If the test system is not able to provide or estimate for tests on a
-		 * per-file basis, this method may not be implemented. In that case, VS
-		 * Code will request and use the information from the workspace hierarchy.
+		 * per-file basis, this method may not be implemented. In that case, the
+		 * editor will request and use the information from the workspace tree.
 		 *
 		 * @param document The document in which to observe tests
 		 * @param cancellationToken Token that signals the used asked to abort the test run.
+		 * @returns the root test item for the workspace
 		 */
-		provideDocumentTestHierarchy?(document: TextDocument, token: CancellationToken): ProviderResult<TestHierarchy<T>>;
+		provideDocumentTestRoot?(document: TextDocument, token: CancellationToken): ProviderResult<T>;
 
 		/**
+		 * @todo this will move out of the provider soon
+		 * @todo this will eventually need to be able to return a summary report, coverage for example.
+		 *
 		 * Starts a test run. This should cause {@link onDidChangeTest} to
 		 * fire with update test states during the run.
-		 * @todo this will eventually need to be able to return a summary report, coverage for example.
 		 * @param options Options for this test run
 		 * @param cancellationToken Token that signals the used asked to abort the test run.
 		 */
@@ -2369,11 +2282,42 @@ declare module 'vscode' {
 		setState(test: T, state: TestState): void;
 	}
 
+	export interface TestChildrenCollection<T> extends Iterable<T> {
+		/**
+		 * Gets the number of children in the collection.
+		 */
+		readonly size: number;
+
+		/**
+		 * Gets an existing TestItem by its ID, if it exists.
+		 * @param id ID of the test.
+		 * @returns the TestItem instance if it exists.
+		 */
+		get(id: string): T | undefined;
+
+		/**
+		 * Adds a new child test item. No-ops if the test was already a child.
+		 * @param child The test item to add.
+		 */
+		add(child: T): void;
+
+		/**
+		 * Removes the child test item by reference or ID from the collection.
+		 * @param child Child ID or instance to remove.
+		 */
+		delete(child: T | string): void;
+
+		/**
+		 * Removes all children from the collection.
+		 */
+		clear(): void;
+	}
+
 	/**
 	 * A test item is an item shown in the "test explorer" view. It encompasses
 	 * both a suite and a test, since they have almost or identical capabilities.
 	 */
-	export class TestItem {
+	export class TestItem<TChildren = any> {
 		/**
 		 * Unique identifier for the TestItem. This is used to correlate
 		 * test results and tests in the document with those in the workspace
@@ -2381,6 +2325,12 @@ declare module 'vscode' {
 		 */
 		readonly id: string;
 
+		/**
+		 * A set of children this item has. You can add new children to it, which
+		 * will propagate to the editor UI.
+		 */
+		readonly children: TestChildrenCollection<TChildren>;
+
 		/**
 		 * Display name describing the test case.
 		 */
@@ -2391,6 +2341,12 @@ declare module 'vscode' {
 		 */
 		description?: string;
 
+		/**
+		 * Location of the test in the workspace. This is used to show line
+		 * decorations and code lenses for the test.
+		 */
+		location?: Location;
+
 		/**
 		 * Whether this test item can be run individually, defaults to `true`.
 		 *
@@ -2408,22 +2364,53 @@ declare module 'vscode' {
 		debuggable: boolean;
 
 		/**
-		 * Location of the test in the workspace. This is used to show line
-		 * decorations and code lenses for the test.
-		 */
-		location?: Location;
-
-		/**
-		 * Optional list of nested tests for this item.
+		 * Whether this test item can be expanded in the tree view, implying it
+		 * has (or may have) children. If this is given, the item may be
+		 * passed to the {@link TestHierarchy.getChildren} method.
 		 */
-		children: TestItem[];
+		expandable: boolean;
 
 		/**
 		 * Creates a new TestItem instance.
 		 * @param id Value of the "id" property
 		 * @param label Value of the "label" property.
+		 * @param parent Parent of this item. This should only be defined for the
+		 * test root.
 		 */
-		constructor(id: string, label: string);
+		constructor(id: string, label: string, expandable: boolean);
+
+		/**
+		 * Marks the test as outdated. This can happen as a result of file changes,
+		 * for example. In "auto run" mode, tests that are outdated will be
+		 * automatically re-run after a short delay. Invoking this on a
+		 * test with children will mark the entire subtree as outdated.
+		 *
+		 * Extensions should generally not override this method.
+		 */
+		invalidate(): void;
+
+		/**
+		 * Requests the children of the test item. Extensions should override this
+		 * method for any test that can discover children.
+		 *
+		 * When called, the item should discover tests and update its's `children`.
+		 * The provider will be marked as 'busy' when this method is called, and
+		 * the provider should report `{ busy: false }` to {@link Progress.report}
+		 * once discovery is complete.
+		 *
+		 * The item should continue watching for changes to the children and
+		 * firing updates until the token is cancelled. The process of watching
+		 * the tests may involve creating a file watcher, for example.
+		 *
+		 * The editor will only call this method when it's interested in refreshing
+		 * the children of the item, and will not call it again while there's an
+		 * existing, uncancelled discovery for an item.
+		 *
+		 * @param token Cancellation for the request. Cancellation will be
+		 * requested if the test changes before the previous call completes.
+		 * @returns a provider result of child test items
+		 */
+		discoverChildren(progress: Progress<{ busy: boolean }>, token: CancellationToken): void;
 	}
 
 	/**
@@ -2547,23 +2534,46 @@ declare module 'vscode' {
 		 * List of test results. The items in this array are the items that
 		 * were passed in the {@link test.runTests} method.
 		 */
-		results: ReadonlyArray<Readonly<TestItemWithResults>>;
+		results: ReadonlyArray<Readonly<TestResultSnapshot>>;
 	}
 
 	/**
-	 * A {@link TestItem} with an associated result, which appear or can be
-	 * provided in {@link TestResult} interfaces.
+	 * A {@link TestItem}-like interface with an associated result, which appear
+	 * or can be provided in {@link TestResult} interfaces.
 	 */
-	export interface TestItemWithResults extends TestItem {
+	export interface TestResultSnapshot {
+		/**
+		 * Unique identifier that matches that of the associated TestItem.
+		 * This is used to correlate test results and tests in the document with
+		 * those in the workspace (test explorer).
+		 */
+		readonly id: string;
+
+		/**
+		 * Display name describing the test case.
+		 */
+		readonly label: string;
+
+		/**
+		 * Optional description that appears next to the label.
+		 */
+		readonly description?: string;
+
+		/**
+		 * Location of the test in the workspace. This is used to show line
+		 * decorations and code lenses for the test.
+		 */
+		readonly location?: Location;
+
 		/**
 		 * Current result of the test.
 		 */
-		result: TestState;
+		readonly result: TestState;
 
 		/**
 		 * Optional list of nested tests for this item.
 		 */
-		children: Readonly<TestItemWithResults>[];
+		readonly children: Readonly<TestResultSnapshot>[];
 	}
 
 	//#endregion
@@ -2817,18 +2827,18 @@ declare module 'vscode' {
 	 * The reason why code actions were requested.
 	 */
 	export enum CodeActionTriggerKind {
+		/**
+		 * Code actions were explicitly requested by the user or by an extension.
+		 */
+		Invoke = 1,
+
 		/**
 		 * Code actions were requested automatically.
 		 *
 		 * This typically happens when current selection in a file changes, but can
 		 * also be triggered when file content changes.
 		 */
-		Automatic = 1,
-
-		/**
-		 * Code actions were requested maually by the user or an extension.
-		 */
-		Manual = 2,
+		Automatic = 2,
 	}
 
 	export interface CodeActionContext {
@@ -2854,6 +2864,11 @@ declare module 'vscode' {
 	}
 
 	export interface PortAttributesProvider {
+		/**
+		 * Provides attributes for the given ports. For ports that your extension doesn't know about, simply don't include
+		 * them in the returned array. For example, if `providePortAttributes` is called with ports [3000, 4000] but your
+		 * extension doesn't know anything about those ports you can return an empty array.
+		 */
 		providePortAttributes(ports: number[], pid: number | undefined, commandLine: string | undefined, token: CancellationToken): ProviderResult<PortAttributes[]>;
 	}
 
@@ -2866,6 +2881,7 @@ declare module 'vscode' {
 		 *
 		 * @param portSelector If registerPortAttributesProvider is called after you start your process then you may already
 		 * know the range of ports or the pid of your process.
+		 * The `portRange` is start inclusive and end exclusive.
 		 * @param provider The PortAttributesProvider
 		 */
 		export function registerPortAttributesProvider(portSelector: { pid?: number, portRange?: [number, number] }, provider: PortAttributesProvider): Disposable;

From e5519c5148ad07be952c775a550b676ac59c7a46 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Mon, 29 Mar 2021 15:03:10 +0200
Subject: [PATCH 07/14] Auto stash before merge of "proposed" and "main"

---
 .vscodeignore                  |  12 +-
 myTests/hello.moosebook        |   0
 myTests/oo-analysis.moosebook  |   2 +-
 package-lock.json              | 493 +++++++++++++++++----------------
 package.json                   |   5 +-
 src/extension.ts               |   4 +-
 src/requirements.ts            |   5 +-
 src/types/vscode.proposed.d.ts |  53 ++--
 8 files changed, 293 insertions(+), 281 deletions(-)
 create mode 100644 myTests/hello.moosebook

diff --git a/.vscodeignore b/.vscodeignore
index 5947fd5..277da05 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -1,8 +1,12 @@
 .vscode
-/node_modules
-/out/
-/src/
+node_modules/
+out/
+src/
 /textFixture
 scripts/
 /tsconfig.json
-webpack.config.js
\ No newline at end of file
+webpack.config.js
+myTests/
+docs/
+*.vsix
+.gitignore
diff --git a/myTests/hello.moosebook b/myTests/hello.moosebook
new file mode 100644
index 0000000..e69de29
diff --git a/myTests/oo-analysis.moosebook b/myTests/oo-analysis.moosebook
index f1ce43f..d2da59b 100644
--- a/myTests/oo-analysis.moosebook
+++ b/myTests/oo-analysis.moosebook
@@ -1 +1 @@
-[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8 and VSCode"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\n    client\r\n        signalProgress: true;\r\n        url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n        downloadTo: FileLocator imageDirectory.\r\n    client isSuccess\r\n        ifTrue: [ ZipArchive new\r\n                readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n                extractAllTo: FileLocator imageDirectory.\r\n\r\n            \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n            LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n        ifFalse: [ self inform: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := false.\r\naggregation := false.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\nclasses := { Array. String. Dictionary. Set }.\r\nb := RSPie new.\r\nb objects: classes.\r\nb slice: #numberOfMethods.\r\nb build.\r\nb renderIn: canvas.\r\ncanvas"},{"kind":2,"language":"pharo","value":"canvas := RSCanvas new.\r\n\r\nshapes := Collection withAllSubclasses collect: [ :cls | | methods |\r\n    methods := cls methods collect: [:met | RSBox new color: Color black; size: 5; yourself ].\r\n    RSGridLayout on: methods.\r\n    RSComposite new\r\n        model: cls;\r\n        popup;\r\n        shapes: methods;\r\n        padding: (Margin\r\n            left: 50\r\n            right: 5\r\n            top: 20\r\n            bottom: 5);\r\n        color: Color blue translucent;\r\n        yourself  ].\r\nRSGridLayout on: shapes.\r\ncanvas addAll: shapes.\r\ncanvas @ RSCanvasController.\r\n^ canvas"},{"kind":2,"language":"pharo","value":"| data radius color canvas border |\r\n\t\"1800 ellipses\"\r\n\tdata := 0 to: 358 by: 2.\r\n\tcanvas := RSCanvas new.\r\n\tradius := NSScale linear\r\n\t\tdomain: #(1 10);\r\n\t\trange: #(180 240).\r\n\tcolor := NSScale linear\r\n\t\tdomain: #(1 7 10);\r\n\t\trange: #('brown' '4682b4' 'brown').\r\n\tborder := RSBorder new.\r\n\t1 to: 10 do: [ :i |\r\n\t\tcanvas addAll: (data collect: [ :a | \r\n\t\t\t| d |\r\n\t\t\td := a degreesToRadians.\r\n\t\t\tRSEllipse new\r\n\t\t\t\tradius: 4.5;\r\n\t\t\t\tcolor: (color scale: i);\r\n\t\t\t\tborder: border;\r\n\t\t\t\tposition: (radius scale: i) * (d cos @ d sin);\r\n\t\t\t\tyourself ]).\r\n\t\t ].\r\n\tcanvas @ RSCanvasController.\r\n\t^ canvas"}]
\ No newline at end of file
+[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8 and VSCode"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\nclient\r\n    signalProgress: false;\r\n    url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n    downloadTo: FileLocator imageDirectory.\r\nclient isSuccess\r\n    ifTrue: [ ZipArchive new\r\n        readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n        extractAllTo: FileLocator imageDirectory.\r\n\r\n        \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n        \"This line is not required in Windows system\"\r\n        LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n    ifFalse: [ Error signal: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := true.\r\naggregation := true.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"view := RTView new.\r\nFAMIXSystemNestingMap new\r\n\t\tviewNamespaces: (mooseModel allNamespaces select: [ :each | each allClasses anySatisfy: [ :c | c isStub not ] ])\r\n\t\thighlighting: {}\r\n\t\tonRaw: view.\r\nview"}]
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index f87379c..3176906 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
 	"name": "pharo-language-server",
-	"version": "0.0.7",
+	"version": "0.0.11",
 	"lockfileVersion": 2,
 	"requires": true,
 	"packages": {
 		"": {
 			"name": "pharo-language-server",
-			"version": "0.0.7",
+			"version": "0.0.11",
 			"license": "MIT",
 			"dependencies": {
 				"vscode-debugadapter": "^1.43.0",
@@ -19,6 +19,7 @@
 				"@types/node": "^12.12.0",
 				"@types/vscode": "1.49.0",
 				"@typescript-eslint/parser": "^2.3.0",
+				"esbuild": "^0.11.0",
 				"eslint": "^6.4.0",
 				"mocha": "^8.1.1",
 				"ts-loader": "^8.0.12",
@@ -29,7 +30,7 @@
 				"webpack-cli": "^4.3.0"
 			},
 			"engines": {
-				"vscode": "^1.49.0"
+				"vscode": "1.55.0-insider"
 			}
 		},
 		"node_modules/@babel/code-frame": {
@@ -48,9 +49,9 @@
 			"dev": true
 		},
 		"node_modules/@babel/highlight": {
-			"version": "7.12.13",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
-			"integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
+			"version": "7.13.10",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
+			"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
 			"dev": true,
 			"dependencies": {
 				"@babel/helper-validator-identifier": "^7.12.11",
@@ -77,9 +78,9 @@
 			}
 		},
 		"node_modules/@types/eslint": {
-			"version": "7.2.6",
-			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
-			"integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==",
+			"version": "7.2.7",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz",
+			"integrity": "sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q==",
 			"dev": true,
 			"dependencies": {
 				"@types/estree": "*",
@@ -115,15 +116,15 @@
 			"dev": true
 		},
 		"node_modules/@types/mocha": {
-			"version": "8.2.0",
-			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.0.tgz",
-			"integrity": "sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==",
+			"version": "8.2.2",
+			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
+			"integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
 			"dev": true
 		},
 		"node_modules/@types/node": {
-			"version": "12.19.16",
-			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz",
-			"integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==",
+			"version": "12.20.7",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz",
+			"integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==",
 			"dev": true
 		},
 		"node_modules/@types/vscode": {
@@ -361,9 +362,9 @@
 			}
 		},
 		"node_modules/@webpack-cli/configtest": {
-			"version": "1.0.1",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz",
-			"integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==",
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
+			"integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
 			"dev": true,
 			"peerDependencies": {
 				"webpack": "4.x.x || 5.x.x",
@@ -371,9 +372,9 @@
 			}
 		},
 		"node_modules/@webpack-cli/info": {
-			"version": "1.2.2",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz",
-			"integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==",
+			"version": "1.2.3",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz",
+			"integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==",
 			"dev": true,
 			"dependencies": {
 				"envinfo": "^7.7.3"
@@ -383,9 +384,9 @@
 			}
 		},
 		"node_modules/@webpack-cli/serve": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz",
-			"integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==",
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
+			"integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
 			"dev": true,
 			"peerDependencies": {
 				"webpack-cli": "4.x.x"
@@ -476,12 +477,12 @@
 			}
 		},
 		"node_modules/ansi-escapes": {
-			"version": "4.3.1",
-			"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
-			"integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+			"version": "4.3.2",
+			"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+			"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
 			"dev": true,
 			"dependencies": {
-				"type-fest": "^0.11.0"
+				"type-fest": "^0.21.3"
 			},
 			"engines": {
 				"node": ">=8"
@@ -491,12 +492,12 @@
 			}
 		},
 		"node_modules/ansi-escapes/node_modules/type-fest": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
-			"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+			"version": "0.21.3",
+			"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+			"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
 			"dev": true,
 			"engines": {
-				"node": ">=8"
+				"node": ">=10"
 			},
 			"funding": {
 				"url": "https://github.com/sponsors/sindresorhus"
@@ -698,9 +699,9 @@
 			}
 		},
 		"node_modules/caniuse-lite": {
-			"version": "1.0.30001185",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
-			"integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
+			"version": "1.0.30001204",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz",
+			"integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==",
 			"dev": true
 		},
 		"node_modules/chainsaw": {
@@ -740,7 +741,6 @@
 			"dependencies": {
 				"anymatch": "~3.1.1",
 				"braces": "~3.0.2",
-				"fsevents": "~2.3.1",
 				"glob-parent": "~5.1.0",
 				"is-binary-path": "~2.1.0",
 				"is-glob": "~4.0.1",
@@ -849,9 +849,9 @@
 			"dev": true
 		},
 		"node_modules/colorette": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
-			"integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+			"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
 			"dev": true
 		},
 		"node_modules/commander": {
@@ -962,9 +962,9 @@
 			}
 		},
 		"node_modules/electron-to-chromium": {
-			"version": "1.3.663",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz",
-			"integrity": "sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw==",
+			"version": "1.3.701",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz",
+			"integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==",
 			"dev": true
 		},
 		"node_modules/emoji-regex": {
@@ -1033,11 +1033,21 @@
 			}
 		},
 		"node_modules/es-module-lexer": {
-			"version": "0.3.26",
-			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz",
-			"integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==",
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
+			"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
 			"dev": true
 		},
+		"node_modules/esbuild": {
+			"version": "0.11.0",
+			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.0.tgz",
+			"integrity": "sha512-soxN5dic/pDMM0LKLUKmpOY/MVfF+6n3RHLS2ez0YQoM0dmd2tTs/hmAC4pxfhm2Pvn/28UtMJyFedRYC+8olA==",
+			"dev": true,
+			"hasInstallScript": true,
+			"bin": {
+				"esbuild": "bin/esbuild"
+			}
+		},
 		"node_modules/escalade": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -1256,9 +1266,9 @@
 			}
 		},
 		"node_modules/events": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
-			"integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+			"version": "3.3.0",
+			"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+			"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
 			"dev": true,
 			"engines": {
 				"node": ">=0.8.x"
@@ -1555,9 +1565,9 @@
 			}
 		},
 		"node_modules/glob-parent": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
-			"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
 			"dev": true,
 			"dependencies": {
 				"is-glob": "^4.0.1"
@@ -2144,9 +2154,9 @@
 			}
 		},
 		"node_modules/lodash": {
-			"version": "4.17.20",
-			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-			"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+			"version": "4.17.21",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
 			"dev": true
 		},
 		"node_modules/log-symbols": {
@@ -2276,21 +2286,21 @@
 			}
 		},
 		"node_modules/mime-db": {
-			"version": "1.45.0",
-			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
-			"integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+			"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
 			"dev": true,
 			"engines": {
 				"node": ">= 0.6"
 			}
 		},
 		"node_modules/mime-types": {
-			"version": "2.1.28",
-			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
-			"integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+			"version": "2.1.29",
+			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+			"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
 			"dev": true,
 			"dependencies": {
-				"mime-db": "1.45.0"
+				"mime-db": "1.46.0"
 			},
 			"engines": {
 				"node": ">= 0.6"
@@ -2333,9 +2343,9 @@
 			}
 		},
 		"node_modules/mocha": {
-			"version": "8.3.0",
-			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
-			"integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==",
+			"version": "8.3.2",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz",
+			"integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==",
 			"dev": true,
 			"dependencies": {
 				"@ungap/promise-all-settled": "1.1.2",
@@ -2494,9 +2504,9 @@
 			"dev": true
 		},
 		"node_modules/node-releases": {
-			"version": "1.1.70",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
-			"integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
+			"version": "1.1.71",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
+			"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
 			"dev": true
 		},
 		"node_modules/normalize-path": {
@@ -2938,9 +2948,9 @@
 			}
 		},
 		"node_modules/rxjs": {
-			"version": "6.6.3",
-			"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
-			"integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
+			"version": "6.6.7",
+			"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+			"integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
 			"dev": true,
 			"dependencies": {
 				"tslib": "^1.9.0"
@@ -2994,9 +3004,9 @@
 			}
 		},
 		"node_modules/semver": {
-			"version": "7.3.4",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-			"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+			"version": "7.3.5",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
 			"dev": true,
 			"dependencies": {
 				"lru-cache": "^6.0.0"
@@ -3137,9 +3147,9 @@
 			"dev": true
 		},
 		"node_modules/string-width": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
-			"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+			"version": "4.2.2",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+			"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
 			"dev": true,
 			"dependencies": {
 				"emoji-regex": "^8.0.0",
@@ -3270,9 +3280,9 @@
 			}
 		},
 		"node_modules/terser": {
-			"version": "5.5.1",
-			"resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz",
-			"integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==",
+			"version": "5.6.1",
+			"resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz",
+			"integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==",
 			"dev": true,
 			"dependencies": {
 				"commander": "^2.20.0",
@@ -3362,9 +3372,9 @@
 			"dev": true
 		},
 		"node_modules/ts-loader": {
-			"version": "8.0.17",
-			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.17.tgz",
-			"integrity": "sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w==",
+			"version": "8.1.0",
+			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz",
+			"integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==",
 			"dev": true,
 			"dependencies": {
 				"chalk": "^4.1.0",
@@ -3458,9 +3468,9 @@
 			"dev": true
 		},
 		"node_modules/tsutils": {
-			"version": "3.20.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
-			"integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
+			"version": "3.21.0",
+			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
 			"dev": true,
 			"dependencies": {
 				"tslib": "^1.8.1"
@@ -3494,9 +3504,9 @@
 			}
 		},
 		"node_modules/typescript": {
-			"version": "4.1.5",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
-			"integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
+			"version": "4.2.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
+			"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
 			"dev": true,
 			"bin": {
 				"tsc": "bin/tsc",
@@ -3540,33 +3550,33 @@
 			"dev": true
 		},
 		"node_modules/v8-compile-cache": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
-			"integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+			"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
 			"dev": true
 		},
 		"node_modules/vscode-debugadapter": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.44.0.tgz",
-			"integrity": "sha512-cOYQiDLAdq64rKP1KYcEr7NOlOcNFv13NcW6fCnknX3RR5MKveORKPjgOFFV4HMp04kJ4GtjLm1PFxcrYgg9ZQ==",
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.46.0.tgz",
+			"integrity": "sha512-DUOplVSgePFjFi8WLDU4ZQP+95+Zsj5vclxtwlxiqm9V6YhLBtU57FveG2xivBBhVuq1rsD+AauvxfeEo7yIKw==",
 			"dependencies": {
 				"mkdirp": "^0.5.5",
-				"vscode-debugprotocol": "1.44.0"
+				"vscode-debugprotocol": "1.46.0"
 			}
 		},
 		"node_modules/vscode-debugadapter-testsupport": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.44.0.tgz",
-			"integrity": "sha512-5sPAQ4/OFPBvZoyx2nPI91Zv7CCZ63CS9XrsCaR1t2awEY+hv+yjwryaWpV0AQX6lrYOCO/PehYvzmDsGLEy6A==",
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.46.0.tgz",
+			"integrity": "sha512-6n+uu4+Q5sZvN2FgFLNJkyaE6AECYzFh+Hfv+IeJoVKA7KNiQ1SNd3yTsvSFxkS00LmVU6V00XGaqZRlwM15Jg==",
 			"dev": true,
 			"dependencies": {
-				"vscode-debugprotocol": "^1.44.0"
+				"vscode-debugprotocol": "^1.46.0"
 			}
 		},
 		"node_modules/vscode-debugprotocol": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.44.0.tgz",
-			"integrity": "sha512-qf+eBnrDyR2MpP08y1JfzJnFZGHdkk86+SRGRp0XepDGNA6n/Nann5XhtAzdGX/yaZokjTAINK313S2yYhHoPQ=="
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.46.0.tgz",
+			"integrity": "sha512-V10u1L679DJZfOtQXhKylJPMqNbhazav4mRxPrBE8/Jpznow1b1j1EGDDvJ4prQ623CLAnvpFfVkVQ+CX3xdtg=="
 		},
 		"node_modules/vscode-dts": {
 			"version": "0.3.1",
@@ -3638,9 +3648,9 @@
 			"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ=="
 		},
 		"node_modules/vscode-test": {
-			"version": "1.5.0",
-			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.0.tgz",
-			"integrity": "sha512-svwE/mhBBqrB77C1U7pkUKfUmxnkzg0dLGi1vEmitsleu88oNsqZEhG3ANZrL/Ia4m0CW0oYEKRw2EojpFxLlQ==",
+			"version": "1.5.2",
+			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz",
+			"integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==",
 			"dev": true,
 			"dependencies": {
 				"http-proxy-agent": "^4.0.1",
@@ -3681,9 +3691,9 @@
 			}
 		},
 		"node_modules/webpack": {
-			"version": "5.21.2",
-			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.21.2.tgz",
-			"integrity": "sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg==",
+			"version": "5.28.0",
+			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz",
+			"integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==",
 			"dev": true,
 			"dependencies": {
 				"@types/eslint-scope": "^3.7.0",
@@ -3695,7 +3705,7 @@
 				"browserslist": "^4.14.5",
 				"chrome-trace-event": "^1.0.2",
 				"enhanced-resolve": "^5.7.0",
-				"es-module-lexer": "^0.3.26",
+				"es-module-lexer": "^0.4.0",
 				"eslint-scope": "^5.1.1",
 				"events": "^3.2.0",
 				"glob-to-regexp": "^0.4.1",
@@ -3727,15 +3737,15 @@
 			}
 		},
 		"node_modules/webpack-cli": {
-			"version": "4.5.0",
-			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz",
-			"integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==",
+			"version": "4.6.0",
+			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz",
+			"integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==",
 			"dev": true,
 			"dependencies": {
 				"@discoveryjs/json-ext": "^0.5.0",
-				"@webpack-cli/configtest": "^1.0.1",
-				"@webpack-cli/info": "^1.2.2",
-				"@webpack-cli/serve": "^1.3.0",
+				"@webpack-cli/configtest": "^1.0.2",
+				"@webpack-cli/info": "^1.2.3",
+				"@webpack-cli/serve": "^1.3.1",
 				"colorette": "^1.2.1",
 				"commander": "^7.0.0",
 				"enquirer": "^2.3.6",
@@ -3760,9 +3770,6 @@
 				"@webpack-cli/generators": {
 					"optional": true
 				},
-				"@webpack-cli/init": {
-					"optional": true
-				},
 				"@webpack-cli/migrate": {
 					"optional": true
 				},
@@ -3775,9 +3782,9 @@
 			}
 		},
 		"node_modules/webpack-cli/node_modules/commander": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz",
-			"integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==",
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
 			"dev": true,
 			"engines": {
 				"node": ">= 10"
@@ -3810,9 +3817,9 @@
 			}
 		},
 		"node_modules/webpack/node_modules/acorn": {
-			"version": "8.0.5",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz",
-			"integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==",
+			"version": "8.1.0",
+			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
+			"integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
 			"dev": true,
 			"bin": {
 				"acorn": "bin/acorn"
@@ -4103,9 +4110,9 @@
 			"dev": true
 		},
 		"@babel/highlight": {
-			"version": "7.12.13",
-			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
-			"integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
+			"version": "7.13.10",
+			"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz",
+			"integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==",
 			"dev": true,
 			"requires": {
 				"@babel/helper-validator-identifier": "^7.12.11",
@@ -4126,9 +4133,9 @@
 			"dev": true
 		},
 		"@types/eslint": {
-			"version": "7.2.6",
-			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz",
-			"integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==",
+			"version": "7.2.7",
+			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz",
+			"integrity": "sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q==",
 			"dev": true,
 			"requires": {
 				"@types/estree": "*",
@@ -4164,15 +4171,15 @@
 			"dev": true
 		},
 		"@types/mocha": {
-			"version": "8.2.0",
-			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.0.tgz",
-			"integrity": "sha512-/Sge3BymXo4lKc31C8OINJgXLaw+7vL1/L1pGiBNpGrBiT8FQiaFpSYV0uhTaG4y78vcMBTMFsWaHDvuD+xGzQ==",
+			"version": "8.2.2",
+			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
+			"integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
 			"dev": true
 		},
 		"@types/node": {
-			"version": "12.19.16",
-			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.16.tgz",
-			"integrity": "sha512-7xHmXm/QJ7cbK2laF+YYD7gb5MggHIIQwqyjin3bpEGiSuvScMQ5JZZXPvRipi1MwckTQbJZROMns/JxdnIL1Q==",
+			"version": "12.20.7",
+			"resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.7.tgz",
+			"integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==",
 			"dev": true
 		},
 		"@types/vscode": {
@@ -4373,25 +4380,25 @@
 			}
 		},
 		"@webpack-cli/configtest": {
-			"version": "1.0.1",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.1.tgz",
-			"integrity": "sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ==",
+			"version": "1.0.2",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
+			"integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
 			"dev": true,
 			"requires": {}
 		},
 		"@webpack-cli/info": {
-			"version": "1.2.2",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.2.tgz",
-			"integrity": "sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ==",
+			"version": "1.2.3",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz",
+			"integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==",
 			"dev": true,
 			"requires": {
 				"envinfo": "^7.7.3"
 			}
 		},
 		"@webpack-cli/serve": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.0.tgz",
-			"integrity": "sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw==",
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
+			"integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
 			"dev": true,
 			"requires": {}
 		},
@@ -4455,18 +4462,18 @@
 			"dev": true
 		},
 		"ansi-escapes": {
-			"version": "4.3.1",
-			"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
-			"integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+			"version": "4.3.2",
+			"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+			"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
 			"dev": true,
 			"requires": {
-				"type-fest": "^0.11.0"
+				"type-fest": "^0.21.3"
 			},
 			"dependencies": {
 				"type-fest": {
-					"version": "0.11.0",
-					"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
-					"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+					"version": "0.21.3",
+					"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+					"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
 					"dev": true
 				}
 			}
@@ -4618,9 +4625,9 @@
 			"dev": true
 		},
 		"caniuse-lite": {
-			"version": "1.0.30001185",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz",
-			"integrity": "sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg==",
+			"version": "1.0.30001204",
+			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz",
+			"integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==",
 			"dev": true
 		},
 		"chainsaw": {
@@ -4744,9 +4751,9 @@
 			"dev": true
 		},
 		"colorette": {
-			"version": "1.2.1",
-			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
-			"integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==",
+			"version": "1.2.2",
+			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+			"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
 			"dev": true
 		},
 		"commander": {
@@ -4833,9 +4840,9 @@
 			}
 		},
 		"electron-to-chromium": {
-			"version": "1.3.663",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz",
-			"integrity": "sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw==",
+			"version": "1.3.701",
+			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz",
+			"integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==",
 			"dev": true
 		},
 		"emoji-regex": {
@@ -4886,9 +4893,15 @@
 			}
 		},
 		"es-module-lexer": {
-			"version": "0.3.26",
-			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz",
-			"integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==",
+			"version": "0.4.1",
+			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
+			"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
+			"dev": true
+		},
+		"esbuild": {
+			"version": "0.11.0",
+			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.0.tgz",
+			"integrity": "sha512-soxN5dic/pDMM0LKLUKmpOY/MVfF+6n3RHLS2ez0YQoM0dmd2tTs/hmAC4pxfhm2Pvn/28UtMJyFedRYC+8olA==",
 			"dev": true
 		},
 		"escalade": {
@@ -5054,9 +5067,9 @@
 			"dev": true
 		},
 		"events": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
-			"integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+			"version": "3.3.0",
+			"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+			"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
 			"dev": true
 		},
 		"execa": {
@@ -5276,9 +5289,9 @@
 			}
 		},
 		"glob-parent": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
-			"integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+			"version": "5.1.2",
+			"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+			"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
 			"dev": true,
 			"requires": {
 				"is-glob": "^4.0.1"
@@ -5716,9 +5729,9 @@
 			}
 		},
 		"lodash": {
-			"version": "4.17.20",
-			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-			"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+			"version": "4.17.21",
+			"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+			"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
 			"dev": true
 		},
 		"log-symbols": {
@@ -5817,18 +5830,18 @@
 			}
 		},
 		"mime-db": {
-			"version": "1.45.0",
-			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
-			"integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
+			"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
 			"dev": true
 		},
 		"mime-types": {
-			"version": "2.1.28",
-			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
-			"integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
+			"version": "2.1.29",
+			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
+			"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
 			"dev": true,
 			"requires": {
-				"mime-db": "1.45.0"
+				"mime-db": "1.46.0"
 			}
 		},
 		"mimic-fn": {
@@ -5859,9 +5872,9 @@
 			}
 		},
 		"mocha": {
-			"version": "8.3.0",
-			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.0.tgz",
-			"integrity": "sha512-TQqyC89V1J/Vxx0DhJIXlq9gbbL9XFNdeLQ1+JsnZsVaSOV1z3tWfw0qZmQJGQRIfkvZcs7snQnZnOCKoldq1Q==",
+			"version": "8.3.2",
+			"resolved": "https://registry.npmjs.org/mocha/-/mocha-8.3.2.tgz",
+			"integrity": "sha512-UdmISwr/5w+uXLPKspgoV7/RXZwKRTiTjJ2/AC5ZiEztIoOYdfKb19+9jNmEInzx5pBsCyJQzarAxqIGBNYJhg==",
 			"dev": true,
 			"requires": {
 				"@ungap/promise-all-settled": "1.1.2",
@@ -5981,9 +5994,9 @@
 			"dev": true
 		},
 		"node-releases": {
-			"version": "1.1.70",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
-			"integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
+			"version": "1.1.71",
+			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
+			"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
 			"dev": true
 		},
 		"normalize-path": {
@@ -6316,9 +6329,9 @@
 			"dev": true
 		},
 		"rxjs": {
-			"version": "6.6.3",
-			"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz",
-			"integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==",
+			"version": "6.6.7",
+			"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+			"integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
 			"dev": true,
 			"requires": {
 				"tslib": "^1.9.0"
@@ -6348,9 +6361,9 @@
 			}
 		},
 		"semver": {
-			"version": "7.3.4",
-			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
-			"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+			"version": "7.3.5",
+			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+			"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
 			"dev": true,
 			"requires": {
 				"lru-cache": "^6.0.0"
@@ -6471,9 +6484,9 @@
 			}
 		},
 		"string-width": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
-			"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+			"version": "4.2.2",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
+			"integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
 			"dev": true,
 			"requires": {
 				"emoji-regex": "^8.0.0",
@@ -6572,9 +6585,9 @@
 			"dev": true
 		},
 		"terser": {
-			"version": "5.5.1",
-			"resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz",
-			"integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==",
+			"version": "5.6.1",
+			"resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz",
+			"integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==",
 			"dev": true,
 			"requires": {
 				"commander": "^2.20.0",
@@ -6641,9 +6654,9 @@
 			"dev": true
 		},
 		"ts-loader": {
-			"version": "8.0.17",
-			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.17.tgz",
-			"integrity": "sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w==",
+			"version": "8.1.0",
+			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz",
+			"integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==",
 			"dev": true,
 			"requires": {
 				"chalk": "^4.1.0",
@@ -6711,9 +6724,9 @@
 			"dev": true
 		},
 		"tsutils": {
-			"version": "3.20.0",
-			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
-			"integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
+			"version": "3.21.0",
+			"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+			"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
 			"dev": true,
 			"requires": {
 				"tslib": "^1.8.1"
@@ -6735,9 +6748,9 @@
 			"dev": true
 		},
 		"typescript": {
-			"version": "4.1.5",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
-			"integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
+			"version": "4.2.3",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
+			"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
 			"dev": true
 		},
 		"unzipper": {
@@ -6774,33 +6787,33 @@
 			"dev": true
 		},
 		"v8-compile-cache": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz",
-			"integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==",
+			"version": "2.3.0",
+			"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+			"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
 			"dev": true
 		},
 		"vscode-debugadapter": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.44.0.tgz",
-			"integrity": "sha512-cOYQiDLAdq64rKP1KYcEr7NOlOcNFv13NcW6fCnknX3RR5MKveORKPjgOFFV4HMp04kJ4GtjLm1PFxcrYgg9ZQ==",
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.46.0.tgz",
+			"integrity": "sha512-DUOplVSgePFjFi8WLDU4ZQP+95+Zsj5vclxtwlxiqm9V6YhLBtU57FveG2xivBBhVuq1rsD+AauvxfeEo7yIKw==",
 			"requires": {
 				"mkdirp": "^0.5.5",
-				"vscode-debugprotocol": "1.44.0"
+				"vscode-debugprotocol": "1.46.0"
 			}
 		},
 		"vscode-debugadapter-testsupport": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.44.0.tgz",
-			"integrity": "sha512-5sPAQ4/OFPBvZoyx2nPI91Zv7CCZ63CS9XrsCaR1t2awEY+hv+yjwryaWpV0AQX6lrYOCO/PehYvzmDsGLEy6A==",
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.46.0.tgz",
+			"integrity": "sha512-6n+uu4+Q5sZvN2FgFLNJkyaE6AECYzFh+Hfv+IeJoVKA7KNiQ1SNd3yTsvSFxkS00LmVU6V00XGaqZRlwM15Jg==",
 			"dev": true,
 			"requires": {
-				"vscode-debugprotocol": "^1.44.0"
+				"vscode-debugprotocol": "^1.46.0"
 			}
 		},
 		"vscode-debugprotocol": {
-			"version": "1.44.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.44.0.tgz",
-			"integrity": "sha512-qf+eBnrDyR2MpP08y1JfzJnFZGHdkk86+SRGRp0XepDGNA6n/Nann5XhtAzdGX/yaZokjTAINK313S2yYhHoPQ=="
+			"version": "1.46.0",
+			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.46.0.tgz",
+			"integrity": "sha512-V10u1L679DJZfOtQXhKylJPMqNbhazav4mRxPrBE8/Jpznow1b1j1EGDDvJ4prQ623CLAnvpFfVkVQ+CX3xdtg=="
 		},
 		"vscode-dts": {
 			"version": "0.3.1",
@@ -6858,9 +6871,9 @@
 			"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ=="
 		},
 		"vscode-test": {
-			"version": "1.5.0",
-			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.0.tgz",
-			"integrity": "sha512-svwE/mhBBqrB77C1U7pkUKfUmxnkzg0dLGi1vEmitsleu88oNsqZEhG3ANZrL/Ia4m0CW0oYEKRw2EojpFxLlQ==",
+			"version": "1.5.2",
+			"resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.5.2.tgz",
+			"integrity": "sha512-x9PVfKxF6EInH9iSFGQi0V8H5zIW1fC7RAer6yNQR6sy3WyOwlWkuT3I+wf75xW/cO53hxMi1aj/EvqQfDFOAg==",
 			"dev": true,
 			"requires": {
 				"http-proxy-agent": "^4.0.1",
@@ -6891,9 +6904,9 @@
 			}
 		},
 		"webpack": {
-			"version": "5.21.2",
-			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.21.2.tgz",
-			"integrity": "sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg==",
+			"version": "5.28.0",
+			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz",
+			"integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==",
 			"dev": true,
 			"requires": {
 				"@types/eslint-scope": "^3.7.0",
@@ -6905,7 +6918,7 @@
 				"browserslist": "^4.14.5",
 				"chrome-trace-event": "^1.0.2",
 				"enhanced-resolve": "^5.7.0",
-				"es-module-lexer": "^0.3.26",
+				"es-module-lexer": "^0.4.0",
 				"eslint-scope": "^5.1.1",
 				"events": "^3.2.0",
 				"glob-to-regexp": "^0.4.1",
@@ -6922,9 +6935,9 @@
 			},
 			"dependencies": {
 				"acorn": {
-					"version": "8.0.5",
-					"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.5.tgz",
-					"integrity": "sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg==",
+					"version": "8.1.0",
+					"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
+					"integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
 					"dev": true
 				},
 				"enhanced-resolve": {
@@ -6946,15 +6959,15 @@
 			}
 		},
 		"webpack-cli": {
-			"version": "4.5.0",
-			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.5.0.tgz",
-			"integrity": "sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q==",
+			"version": "4.6.0",
+			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz",
+			"integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==",
 			"dev": true,
 			"requires": {
 				"@discoveryjs/json-ext": "^0.5.0",
-				"@webpack-cli/configtest": "^1.0.1",
-				"@webpack-cli/info": "^1.2.2",
-				"@webpack-cli/serve": "^1.3.0",
+				"@webpack-cli/configtest": "^1.0.2",
+				"@webpack-cli/info": "^1.2.3",
+				"@webpack-cli/serve": "^1.3.1",
 				"colorette": "^1.2.1",
 				"commander": "^7.0.0",
 				"enquirer": "^2.3.6",
@@ -6968,9 +6981,9 @@
 			},
 			"dependencies": {
 				"commander": {
-					"version": "7.0.0",
-					"resolved": "https://registry.npmjs.org/commander/-/commander-7.0.0.tgz",
-					"integrity": "sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==",
+					"version": "7.2.0",
+					"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+					"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
 					"dev": true
 				}
 			}
diff --git a/package.json b/package.json
index b71e0a7..e2827e0 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
 	"description": "Highlighting, Auto-completion, Execution, ...",
 	"author": "Benoît Verhaeghe",
 	"license": "MIT",
-	"version": "0.0.10",
+	"version": "0.0.11",
 	"icon": "icon.png",
 	"enableProposedApi": true,
 	"repository": {
@@ -22,7 +22,7 @@
 		"pharo smalltalk"
 	],
 	"engines": {
-		"vscode": "^1.49.0"
+		"vscode": "1.55.0-insider"
 	},
 	"activationEvents": [
 		"onDebugResolve:pharodb",
@@ -31,7 +31,6 @@
 		"onCommand:pharo.printIt",
 		"onCommand:pharo.showIt",
 		"onCommand:extension.pharo-debug.debugEditorContents",
-		"onNotebookEditor:moosebook",
 		"onNotebook:moosebook"
 	],
 	"main": "./out/extension",
diff --git a/src/extension.ts b/src/extension.ts
index 6eb183e..14b3cb2 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -3,7 +3,7 @@
  * Licensed under the MIT License. See License.txt in the project root for license information.
  * ------------------------------------------------------------------------------------------ */
 
-const vscode = require('vscode');
+import * as vscode from 'vscode';
 import { workspace, ExtensionContext, commands, window, Selection } from 'vscode';
 import {
 	LanguageClient,
@@ -23,6 +23,7 @@ let socket: net.Socket;
 
 export async function activate(context: ExtensionContext) {
 	// Testing Pharo can be used
+	console.info('Start Pharo Language extension');
 	return requirements.resolveRequirements().catch(error => {
 		window.showErrorMessage(error.message, error.label).then((selection) => {
 			if (error.label && error.label === selection && error.command) {
@@ -47,6 +48,7 @@ export async function activate(context: ExtensionContext) {
 		activateDebug(context, factory);
 
 		// Create Moosebook
+		console.info('Start moosebook');
 		const moosebookContentProvider = new MoosebookContentProvider();
 		context.subscriptions.push(vscode.notebook.registerNotebookContentProvider('moosebook', moosebookContentProvider));
 	})
diff --git a/src/requirements.ts b/src/requirements.ts
index f046535..454215e 100644
--- a/src/requirements.ts
+++ b/src/requirements.ts
@@ -1,7 +1,4 @@
-
-import { workspace, Uri, env, window, ConfigurationTarget, commands, ExtensionContext } from 'vscode';
-
-const vscode = require('vscode');
+import * as vscode from 'vscode';
 
 export interface RequirementsData {
     pathToVM: string;
diff --git a/src/types/vscode.proposed.d.ts b/src/types/vscode.proposed.d.ts
index d78a878..a262196 100644
--- a/src/types/vscode.proposed.d.ts
+++ b/src/types/vscode.proposed.d.ts
@@ -942,20 +942,6 @@ declare module 'vscode' {
 
 	//#endregion
 
-	//#region Provide a way for custom editors to process untitled files without relying on textDocument https://github.com/microsoft/vscode/issues/115631
-	/**
-	 * Additional information about the opening custom document.
-	 */
-	interface CustomDocumentOpenContext {
-		/**
-		 * If the URI is an untitled file, this will be populated with the byte data of that file
-		 *
-		 * If this is provided, your extension should utilize this byte data rather than executing fs APIs on the URI passed in
-		 */
-		readonly untitledDocumentData?: Uint8Array;
-	}
-	//#endregion
-
 	//#region https://github.com/microsoft/vscode/issues/106744, Notebooks (misc)
 
 	export enum NotebookCellKind {
@@ -1573,10 +1559,10 @@ declare module 'vscode' {
 		readonly token: CancellationToken;
 
 		clearOutput(cellIndex?: number): Thenable<void>;
-		appendOutput(out: NotebookCellOutput[], cellIndex?: number): Thenable<void>;
-		replaceOutput(out: NotebookCellOutput[], cellIndex?: number): Thenable<void>;
-		appendOutputItems(items: NotebookCellOutputItem[], outputId: string): Thenable<void>;
-		replaceOutputItems(items: NotebookCellOutputItem[], outputId: string): Thenable<void>;
+		appendOutput(out: NotebookCellOutput | NotebookCellOutput[], cellIndex?: number): Thenable<void>;
+		replaceOutput(out: NotebookCellOutput | NotebookCellOutput[], cellIndex?: number): Thenable<void>;
+		appendOutputItems(items: NotebookCellOutputItem | NotebookCellOutputItem[], outputId: string): Thenable<void>;
+		replaceOutputItems(items: NotebookCellOutputItem | NotebookCellOutputItem[], outputId: string): Thenable<void>;
 	}
 
 	export enum NotebookCellExecutionState {
@@ -2325,6 +2311,11 @@ declare module 'vscode' {
 		 */
 		readonly id: string;
 
+		/**
+		 * URI this TestItem is associated with. May be a file or file.
+		 */
+		readonly uri: Uri;
+
 		/**
 		 * A set of children this item has. You can add new children to it, which
 		 * will propagate to the editor UI.
@@ -2342,10 +2333,10 @@ declare module 'vscode' {
 		description?: string;
 
 		/**
-		 * Location of the test in the workspace. This is used to show line
-		 * decorations and code lenses for the test.
+		 * Location of the test item in its `uri`. This is only meaningful if the
+		 * `uri` points to a file.
 		 */
-		location?: Location;
+		range?: Range;
 
 		/**
 		 * Whether this test item can be run individually, defaults to `true`.
@@ -2374,10 +2365,11 @@ declare module 'vscode' {
 		 * Creates a new TestItem instance.
 		 * @param id Value of the "id" property
 		 * @param label Value of the "label" property.
+		 * @param uri Value of the "uri" property.
 		 * @param parent Parent of this item. This should only be defined for the
 		 * test root.
 		 */
-		constructor(id: string, label: string, expandable: boolean);
+		constructor(id: string, label: string, uri: Uri, expandable: boolean);
 
 		/**
 		 * Marks the test as outdated. This can happen as a result of file changes,
@@ -2549,6 +2541,11 @@ declare module 'vscode' {
 		 */
 		readonly id: string;
 
+		/**
+		 * URI this TestItem is associated with. May be a file or file.
+		 */
+		readonly uri: Uri;
+
 		/**
 		 * Display name describing the test case.
 		 */
@@ -2560,10 +2557,10 @@ declare module 'vscode' {
 		readonly description?: string;
 
 		/**
-		 * Location of the test in the workspace. This is used to show line
-		 * decorations and code lenses for the test.
+		 * Location of the test item in its `uri`. This is only meaningful if the
+		 * `uri` points to a file.
 		 */
-		readonly location?: Location;
+		readonly range?: Range;
 
 		/**
 		 * Current result of the test.
@@ -2792,7 +2789,7 @@ declare module 'vscode' {
 	/**
 	 * The object describing the properties of the workspace trust request
 	 */
-	export interface WorkspaceTrustRequest {
+	export interface WorkspaceTrustRequestOptions {
 		/**
 		 * When true, a modal dialog will be used to request workspace trust.
 		 * When false, a badge will be displayed on the Setting activity bar item
@@ -2808,10 +2805,10 @@ declare module 'vscode' {
 
 		/**
 		 * Prompt the user to chose whether to trust the current workspace
-		 * @param request Optional object describing the properties of the
+		 * @param options Optional object describing the properties of the
 		 * workspace trust request
 		 */
-		export function requireWorkspaceTrust(request?: WorkspaceTrustRequest): Thenable<WorkspaceTrustState>;
+		export function requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Thenable<WorkspaceTrustState>;
 
 		/**
 		 * Event that fires when the trust state of the current workspace changes

From fb1dcd26e5c7483b1ba8e26d4d0aa2eded3379db Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Mon, 29 Mar 2021 15:16:52 +0200
Subject: [PATCH 08/14] improve vscideignore

---
 .vscodeignore                  |  4 ++--
 package-lock.json              | 19 +------------------
 package.json                   |  2 +-
 {src/res => res}/run-server.st |  0
 src/extension.ts               |  2 +-
 5 files changed, 5 insertions(+), 22 deletions(-)
 rename {src/res => res}/run-server.st (100%)

diff --git a/.vscodeignore b/.vscodeignore
index 277da05..b911cbd 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -1,10 +1,10 @@
 .vscode
 node_modules/
-out/
+/out/
 src/
 /textFixture
 scripts/
-/tsconfig.json
+tsconfig.json
 webpack.config.js
 myTests/
 docs/
diff --git a/package-lock.json b/package-lock.json
index 3176906..590b513 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,7 +19,6 @@
 				"@types/node": "^12.12.0",
 				"@types/vscode": "1.49.0",
 				"@typescript-eslint/parser": "^2.3.0",
-				"esbuild": "^0.11.0",
 				"eslint": "^6.4.0",
 				"mocha": "^8.1.1",
 				"ts-loader": "^8.0.12",
@@ -30,7 +29,7 @@
 				"webpack-cli": "^4.3.0"
 			},
 			"engines": {
-				"vscode": "1.55.0-insider"
+				"vscode": "^1.49.0"
 			}
 		},
 		"node_modules/@babel/code-frame": {
@@ -1038,16 +1037,6 @@
 			"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
 			"dev": true
 		},
-		"node_modules/esbuild": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.0.tgz",
-			"integrity": "sha512-soxN5dic/pDMM0LKLUKmpOY/MVfF+6n3RHLS2ez0YQoM0dmd2tTs/hmAC4pxfhm2Pvn/28UtMJyFedRYC+8olA==",
-			"dev": true,
-			"hasInstallScript": true,
-			"bin": {
-				"esbuild": "bin/esbuild"
-			}
-		},
 		"node_modules/escalade": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -4898,12 +4887,6 @@
 			"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
 			"dev": true
 		},
-		"esbuild": {
-			"version": "0.11.0",
-			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.0.tgz",
-			"integrity": "sha512-soxN5dic/pDMM0LKLUKmpOY/MVfF+6n3RHLS2ez0YQoM0dmd2tTs/hmAC4pxfhm2Pvn/28UtMJyFedRYC+8olA==",
-			"dev": true
-		},
 		"escalade": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
diff --git a/package.json b/package.json
index e2827e0..ba8a29b 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
 		"pharo smalltalk"
 	],
 	"engines": {
-		"vscode": "1.55.0-insider"
+		"vscode": "^1.49.0"
 	},
 	"activationEvents": [
 		"onDebugResolve:pharodb",
diff --git a/src/res/run-server.st b/res/run-server.st
similarity index 100%
rename from src/res/run-server.st
rename to res/run-server.st
diff --git a/src/extension.ts b/src/extension.ts
index 14b3cb2..56c899c 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -130,7 +130,7 @@ function createPharoLanguageServer(requirements: requirements.RequirementsData,
 async function createServerWithSocket(pharoPath: string, pathToImage: string, context: ExtensionContext) {
     let dls: child_process.ChildProcess;
 	dls = child_process.spawn(pharoPath.trim(), [
-		pathToImage, 'st', context.asAbsolutePath('/src/res/run-server.st')
+		pathToImage, 'st', context.asAbsolutePath('/res/run-server.st')
 	]);
 
 	await sleep(8000); // Wait that the Pharo server start

From eee7bde373176082b515e29653f117fca5ceab7b Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Mon, 29 Mar 2021 15:49:46 +0200
Subject: [PATCH 09/14] update the all build process

---
 .vscode/launch.json                        |     3 +-
 .vscodeignore                              |     4 +-
 dist/extension.js                          | 10575 ++++++++++++++++
 dist/extension.js.map                      |     7 +
 esbuild.js                                 |    37 +
 package-lock.json                          |  3092 +----
 package.json                               |    32 +-
 {myTests => samples}/hello.moosebook       |     0
 {myTests => samples}/oo-analysis.moosebook |     0
 {myTests => samples}/test.moosebook        |     0
 src/tsconfig.json                          |     7 +
 src/types/vscode.d.ts                      | 12680 +++++++++++++++++++
 tsconfig.base.json                         |    11 +
 tsconfig.json                              |    21 +-
 14 files changed, 24032 insertions(+), 2437 deletions(-)
 create mode 100644 dist/extension.js
 create mode 100644 dist/extension.js.map
 create mode 100644 esbuild.js
 rename {myTests => samples}/hello.moosebook (100%)
 rename {myTests => samples}/oo-analysis.moosebook (100%)
 rename {myTests => samples}/test.moosebook (100%)
 create mode 100644 src/tsconfig.json
 create mode 100644 src/types/vscode.d.ts
 create mode 100644 tsconfig.base.json

diff --git a/.vscode/launch.json b/.vscode/launch.json
index c4d193d..a97d705 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -7,7 +7,8 @@
 			"request": "launch",
 			"name": "Launch Client",
 			"runtimeExecutable": "${execPath}",
-			"args": ["--extensionDevelopmentPath=${workspaceRoot}"],
+			"args": ["--extensionDevelopmentPath=${workspaceRoot}", 
+				"${workspaceFolder}/samples"],
 			"outFiles": ["${workspaceRoot}/out/**/*.js"],
 			"preLaunchTask": {
 				"type": "npm",
diff --git a/.vscodeignore b/.vscodeignore
index b911cbd..6887617 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -1,12 +1,12 @@
 .vscode
 node_modules/
-/out/
+out/
 src/
 /textFixture
 scripts/
 tsconfig.json
 webpack.config.js
-myTests/
+samples/
 docs/
 *.vsix
 .gitignore
diff --git a/dist/extension.js b/dist/extension.js
new file mode 100644
index 0000000..d2f1d70
--- /dev/null
+++ b/dist/extension.js
@@ -0,0 +1,10575 @@
+var __create = Object.create;
+var __defProp = Object.defineProperty;
+var __getProtoOf = Object.getPrototypeOf;
+var __hasOwnProp = Object.prototype.hasOwnProperty;
+var __getOwnPropNames = Object.getOwnPropertyNames;
+var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
+var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
+var __commonJS = (callback, module2) => () => {
+  if (!module2) {
+    module2 = {exports: {}};
+    callback(module2.exports, module2);
+  }
+  return module2.exports;
+};
+var __export = (target, all) => {
+  for (var name in all)
+    __defProp(target, name, {get: all[name], enumerable: true});
+};
+var __exportStar = (target, module2, desc) => {
+  if (module2 && typeof module2 === "object" || typeof module2 === "function") {
+    for (let key of __getOwnPropNames(module2))
+      if (!__hasOwnProp.call(target, key) && key !== "default")
+        __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
+  }
+  return target;
+};
+var __toModule = (module2) => {
+  return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
+};
+
+// node_modules/vscode-languageclient/node_modules/semver/semver.js
+var require_semver = __commonJS((exports2, module2) => {
+  exports2 = module2.exports = SemVer;
+  var debug2;
+  if (typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
+    debug2 = function() {
+      var args = Array.prototype.slice.call(arguments, 0);
+      args.unshift("SEMVER");
+      console.log.apply(console, args);
+    };
+  } else {
+    debug2 = function() {
+    };
+  }
+  exports2.SEMVER_SPEC_VERSION = "2.0.0";
+  var MAX_LENGTH = 256;
+  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
+  var MAX_SAFE_COMPONENT_LENGTH = 16;
+  var re = exports2.re = [];
+  var src = exports2.src = [];
+  var t = exports2.tokens = {};
+  var R = 0;
+  function tok(n) {
+    t[n] = R++;
+  }
+  tok("NUMERICIDENTIFIER");
+  src[t.NUMERICIDENTIFIER] = "0|[1-9]\\d*";
+  tok("NUMERICIDENTIFIERLOOSE");
+  src[t.NUMERICIDENTIFIERLOOSE] = "[0-9]+";
+  tok("NONNUMERICIDENTIFIER");
+  src[t.NONNUMERICIDENTIFIER] = "\\d*[a-zA-Z-][a-zA-Z0-9-]*";
+  tok("MAINVERSION");
+  src[t.MAINVERSION] = "(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")";
+  tok("MAINVERSIONLOOSE");
+  src[t.MAINVERSIONLOOSE] = "(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")";
+  tok("PRERELEASEIDENTIFIER");
+  src[t.PRERELEASEIDENTIFIER] = "(?:" + src[t.NUMERICIDENTIFIER] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
+  tok("PRERELEASEIDENTIFIERLOOSE");
+  src[t.PRERELEASEIDENTIFIERLOOSE] = "(?:" + src[t.NUMERICIDENTIFIERLOOSE] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
+  tok("PRERELEASE");
+  src[t.PRERELEASE] = "(?:-(" + src[t.PRERELEASEIDENTIFIER] + "(?:\\." + src[t.PRERELEASEIDENTIFIER] + ")*))";
+  tok("PRERELEASELOOSE");
+  src[t.PRERELEASELOOSE] = "(?:-?(" + src[t.PRERELEASEIDENTIFIERLOOSE] + "(?:\\." + src[t.PRERELEASEIDENTIFIERLOOSE] + ")*))";
+  tok("BUILDIDENTIFIER");
+  src[t.BUILDIDENTIFIER] = "[0-9A-Za-z-]+";
+  tok("BUILD");
+  src[t.BUILD] = "(?:\\+(" + src[t.BUILDIDENTIFIER] + "(?:\\." + src[t.BUILDIDENTIFIER] + ")*))";
+  tok("FULL");
+  tok("FULLPLAIN");
+  src[t.FULLPLAIN] = "v?" + src[t.MAINVERSION] + src[t.PRERELEASE] + "?" + src[t.BUILD] + "?";
+  src[t.FULL] = "^" + src[t.FULLPLAIN] + "$";
+  tok("LOOSEPLAIN");
+  src[t.LOOSEPLAIN] = "[v=\\s]*" + src[t.MAINVERSIONLOOSE] + src[t.PRERELEASELOOSE] + "?" + src[t.BUILD] + "?";
+  tok("LOOSE");
+  src[t.LOOSE] = "^" + src[t.LOOSEPLAIN] + "$";
+  tok("GTLT");
+  src[t.GTLT] = "((?:<|>)?=?)";
+  tok("XRANGEIDENTIFIERLOOSE");
+  src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + "|x|X|\\*";
+  tok("XRANGEIDENTIFIER");
+  src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + "|x|X|\\*";
+  tok("XRANGEPLAIN");
+  src[t.XRANGEPLAIN] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:" + src[t.PRERELEASE] + ")?" + src[t.BUILD] + "?)?)?";
+  tok("XRANGEPLAINLOOSE");
+  src[t.XRANGEPLAINLOOSE] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:" + src[t.PRERELEASELOOSE] + ")?" + src[t.BUILD] + "?)?)?";
+  tok("XRANGE");
+  src[t.XRANGE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAIN] + "$";
+  tok("XRANGELOOSE");
+  src[t.XRANGELOOSE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAINLOOSE] + "$";
+  tok("COERCE");
+  src[t.COERCE] = "(^|[^\\d])(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "})(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:$|[^\\d])";
+  tok("COERCERTL");
+  re[t.COERCERTL] = new RegExp(src[t.COERCE], "g");
+  tok("LONETILDE");
+  src[t.LONETILDE] = "(?:~>?)";
+  tok("TILDETRIM");
+  src[t.TILDETRIM] = "(\\s*)" + src[t.LONETILDE] + "\\s+";
+  re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], "g");
+  var tildeTrimReplace = "$1~";
+  tok("TILDE");
+  src[t.TILDE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAIN] + "$";
+  tok("TILDELOOSE");
+  src[t.TILDELOOSE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + "$";
+  tok("LONECARET");
+  src[t.LONECARET] = "(?:\\^)";
+  tok("CARETTRIM");
+  src[t.CARETTRIM] = "(\\s*)" + src[t.LONECARET] + "\\s+";
+  re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], "g");
+  var caretTrimReplace = "$1^";
+  tok("CARET");
+  src[t.CARET] = "^" + src[t.LONECARET] + src[t.XRANGEPLAIN] + "$";
+  tok("CARETLOOSE");
+  src[t.CARETLOOSE] = "^" + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + "$";
+  tok("COMPARATORLOOSE");
+  src[t.COMPARATORLOOSE] = "^" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + ")$|^$";
+  tok("COMPARATOR");
+  src[t.COMPARATOR] = "^" + src[t.GTLT] + "\\s*(" + src[t.FULLPLAIN] + ")$|^$";
+  tok("COMPARATORTRIM");
+  src[t.COMPARATORTRIM] = "(\\s*)" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + "|" + src[t.XRANGEPLAIN] + ")";
+  re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], "g");
+  var comparatorTrimReplace = "$1$2$3";
+  tok("HYPHENRANGE");
+  src[t.HYPHENRANGE] = "^\\s*(" + src[t.XRANGEPLAIN] + ")\\s+-\\s+(" + src[t.XRANGEPLAIN] + ")\\s*$";
+  tok("HYPHENRANGELOOSE");
+  src[t.HYPHENRANGELOOSE] = "^\\s*(" + src[t.XRANGEPLAINLOOSE] + ")\\s+-\\s+(" + src[t.XRANGEPLAINLOOSE] + ")\\s*$";
+  tok("STAR");
+  src[t.STAR] = "(<|>)?=?\\s*\\*";
+  for (var i = 0; i < R; i++) {
+    debug2(i, src[i]);
+    if (!re[i]) {
+      re[i] = new RegExp(src[i]);
+    }
+  }
+  exports2.parse = parse;
+  function parse(version, options) {
+    if (!options || typeof options !== "object") {
+      options = {
+        loose: !!options,
+        includePrerelease: false
+      };
+    }
+    if (version instanceof SemVer) {
+      return version;
+    }
+    if (typeof version !== "string") {
+      return null;
+    }
+    if (version.length > MAX_LENGTH) {
+      return null;
+    }
+    var r = options.loose ? re[t.LOOSE] : re[t.FULL];
+    if (!r.test(version)) {
+      return null;
+    }
+    try {
+      return new SemVer(version, options);
+    } catch (er) {
+      return null;
+    }
+  }
+  exports2.valid = valid;
+  function valid(version, options) {
+    var v = parse(version, options);
+    return v ? v.version : null;
+  }
+  exports2.clean = clean;
+  function clean(version, options) {
+    var s = parse(version.trim().replace(/^[=v]+/, ""), options);
+    return s ? s.version : null;
+  }
+  exports2.SemVer = SemVer;
+  function SemVer(version, options) {
+    if (!options || typeof options !== "object") {
+      options = {
+        loose: !!options,
+        includePrerelease: false
+      };
+    }
+    if (version instanceof SemVer) {
+      if (version.loose === options.loose) {
+        return version;
+      } else {
+        version = version.version;
+      }
+    } else if (typeof version !== "string") {
+      throw new TypeError("Invalid Version: " + version);
+    }
+    if (version.length > MAX_LENGTH) {
+      throw new TypeError("version is longer than " + MAX_LENGTH + " characters");
+    }
+    if (!(this instanceof SemVer)) {
+      return new SemVer(version, options);
+    }
+    debug2("SemVer", version, options);
+    this.options = options;
+    this.loose = !!options.loose;
+    var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
+    if (!m) {
+      throw new TypeError("Invalid Version: " + version);
+    }
+    this.raw = version;
+    this.major = +m[1];
+    this.minor = +m[2];
+    this.patch = +m[3];
+    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
+      throw new TypeError("Invalid major version");
+    }
+    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
+      throw new TypeError("Invalid minor version");
+    }
+    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
+      throw new TypeError("Invalid patch version");
+    }
+    if (!m[4]) {
+      this.prerelease = [];
+    } else {
+      this.prerelease = m[4].split(".").map(function(id) {
+        if (/^[0-9]+$/.test(id)) {
+          var num = +id;
+          if (num >= 0 && num < MAX_SAFE_INTEGER) {
+            return num;
+          }
+        }
+        return id;
+      });
+    }
+    this.build = m[5] ? m[5].split(".") : [];
+    this.format();
+  }
+  SemVer.prototype.format = function() {
+    this.version = this.major + "." + this.minor + "." + this.patch;
+    if (this.prerelease.length) {
+      this.version += "-" + this.prerelease.join(".");
+    }
+    return this.version;
+  };
+  SemVer.prototype.toString = function() {
+    return this.version;
+  };
+  SemVer.prototype.compare = function(other) {
+    debug2("SemVer.compare", this.version, this.options, other);
+    if (!(other instanceof SemVer)) {
+      other = new SemVer(other, this.options);
+    }
+    return this.compareMain(other) || this.comparePre(other);
+  };
+  SemVer.prototype.compareMain = function(other) {
+    if (!(other instanceof SemVer)) {
+      other = new SemVer(other, this.options);
+    }
+    return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
+  };
+  SemVer.prototype.comparePre = function(other) {
+    if (!(other instanceof SemVer)) {
+      other = new SemVer(other, this.options);
+    }
+    if (this.prerelease.length && !other.prerelease.length) {
+      return -1;
+    } else if (!this.prerelease.length && other.prerelease.length) {
+      return 1;
+    } else if (!this.prerelease.length && !other.prerelease.length) {
+      return 0;
+    }
+    var i2 = 0;
+    do {
+      var a = this.prerelease[i2];
+      var b = other.prerelease[i2];
+      debug2("prerelease compare", i2, a, b);
+      if (a === void 0 && b === void 0) {
+        return 0;
+      } else if (b === void 0) {
+        return 1;
+      } else if (a === void 0) {
+        return -1;
+      } else if (a === b) {
+        continue;
+      } else {
+        return compareIdentifiers(a, b);
+      }
+    } while (++i2);
+  };
+  SemVer.prototype.compareBuild = function(other) {
+    if (!(other instanceof SemVer)) {
+      other = new SemVer(other, this.options);
+    }
+    var i2 = 0;
+    do {
+      var a = this.build[i2];
+      var b = other.build[i2];
+      debug2("prerelease compare", i2, a, b);
+      if (a === void 0 && b === void 0) {
+        return 0;
+      } else if (b === void 0) {
+        return 1;
+      } else if (a === void 0) {
+        return -1;
+      } else if (a === b) {
+        continue;
+      } else {
+        return compareIdentifiers(a, b);
+      }
+    } while (++i2);
+  };
+  SemVer.prototype.inc = function(release, identifier) {
+    switch (release) {
+      case "premajor":
+        this.prerelease.length = 0;
+        this.patch = 0;
+        this.minor = 0;
+        this.major++;
+        this.inc("pre", identifier);
+        break;
+      case "preminor":
+        this.prerelease.length = 0;
+        this.patch = 0;
+        this.minor++;
+        this.inc("pre", identifier);
+        break;
+      case "prepatch":
+        this.prerelease.length = 0;
+        this.inc("patch", identifier);
+        this.inc("pre", identifier);
+        break;
+      case "prerelease":
+        if (this.prerelease.length === 0) {
+          this.inc("patch", identifier);
+        }
+        this.inc("pre", identifier);
+        break;
+      case "major":
+        if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
+          this.major++;
+        }
+        this.minor = 0;
+        this.patch = 0;
+        this.prerelease = [];
+        break;
+      case "minor":
+        if (this.patch !== 0 || this.prerelease.length === 0) {
+          this.minor++;
+        }
+        this.patch = 0;
+        this.prerelease = [];
+        break;
+      case "patch":
+        if (this.prerelease.length === 0) {
+          this.patch++;
+        }
+        this.prerelease = [];
+        break;
+      case "pre":
+        if (this.prerelease.length === 0) {
+          this.prerelease = [0];
+        } else {
+          var i2 = this.prerelease.length;
+          while (--i2 >= 0) {
+            if (typeof this.prerelease[i2] === "number") {
+              this.prerelease[i2]++;
+              i2 = -2;
+            }
+          }
+          if (i2 === -1) {
+            this.prerelease.push(0);
+          }
+        }
+        if (identifier) {
+          if (this.prerelease[0] === identifier) {
+            if (isNaN(this.prerelease[1])) {
+              this.prerelease = [identifier, 0];
+            }
+          } else {
+            this.prerelease = [identifier, 0];
+          }
+        }
+        break;
+      default:
+        throw new Error("invalid increment argument: " + release);
+    }
+    this.format();
+    this.raw = this.version;
+    return this;
+  };
+  exports2.inc = inc;
+  function inc(version, release, loose, identifier) {
+    if (typeof loose === "string") {
+      identifier = loose;
+      loose = void 0;
+    }
+    try {
+      return new SemVer(version, loose).inc(release, identifier).version;
+    } catch (er) {
+      return null;
+    }
+  }
+  exports2.diff = diff;
+  function diff(version1, version2) {
+    if (eq(version1, version2)) {
+      return null;
+    } else {
+      var v1 = parse(version1);
+      var v2 = parse(version2);
+      var prefix = "";
+      if (v1.prerelease.length || v2.prerelease.length) {
+        prefix = "pre";
+        var defaultResult = "prerelease";
+      }
+      for (var key in v1) {
+        if (key === "major" || key === "minor" || key === "patch") {
+          if (v1[key] !== v2[key]) {
+            return prefix + key;
+          }
+        }
+      }
+      return defaultResult;
+    }
+  }
+  exports2.compareIdentifiers = compareIdentifiers;
+  var numeric = /^[0-9]+$/;
+  function compareIdentifiers(a, b) {
+    var anum = numeric.test(a);
+    var bnum = numeric.test(b);
+    if (anum && bnum) {
+      a = +a;
+      b = +b;
+    }
+    return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
+  }
+  exports2.rcompareIdentifiers = rcompareIdentifiers;
+  function rcompareIdentifiers(a, b) {
+    return compareIdentifiers(b, a);
+  }
+  exports2.major = major;
+  function major(a, loose) {
+    return new SemVer(a, loose).major;
+  }
+  exports2.minor = minor;
+  function minor(a, loose) {
+    return new SemVer(a, loose).minor;
+  }
+  exports2.patch = patch;
+  function patch(a, loose) {
+    return new SemVer(a, loose).patch;
+  }
+  exports2.compare = compare;
+  function compare(a, b, loose) {
+    return new SemVer(a, loose).compare(new SemVer(b, loose));
+  }
+  exports2.compareLoose = compareLoose;
+  function compareLoose(a, b) {
+    return compare(a, b, true);
+  }
+  exports2.compareBuild = compareBuild;
+  function compareBuild(a, b, loose) {
+    var versionA = new SemVer(a, loose);
+    var versionB = new SemVer(b, loose);
+    return versionA.compare(versionB) || versionA.compareBuild(versionB);
+  }
+  exports2.rcompare = rcompare;
+  function rcompare(a, b, loose) {
+    return compare(b, a, loose);
+  }
+  exports2.sort = sort;
+  function sort(list, loose) {
+    return list.sort(function(a, b) {
+      return exports2.compareBuild(a, b, loose);
+    });
+  }
+  exports2.rsort = rsort;
+  function rsort(list, loose) {
+    return list.sort(function(a, b) {
+      return exports2.compareBuild(b, a, loose);
+    });
+  }
+  exports2.gt = gt;
+  function gt(a, b, loose) {
+    return compare(a, b, loose) > 0;
+  }
+  exports2.lt = lt;
+  function lt(a, b, loose) {
+    return compare(a, b, loose) < 0;
+  }
+  exports2.eq = eq;
+  function eq(a, b, loose) {
+    return compare(a, b, loose) === 0;
+  }
+  exports2.neq = neq;
+  function neq(a, b, loose) {
+    return compare(a, b, loose) !== 0;
+  }
+  exports2.gte = gte;
+  function gte(a, b, loose) {
+    return compare(a, b, loose) >= 0;
+  }
+  exports2.lte = lte;
+  function lte(a, b, loose) {
+    return compare(a, b, loose) <= 0;
+  }
+  exports2.cmp = cmp;
+  function cmp(a, op, b, loose) {
+    switch (op) {
+      case "===":
+        if (typeof a === "object")
+          a = a.version;
+        if (typeof b === "object")
+          b = b.version;
+        return a === b;
+      case "!==":
+        if (typeof a === "object")
+          a = a.version;
+        if (typeof b === "object")
+          b = b.version;
+        return a !== b;
+      case "":
+      case "=":
+      case "==":
+        return eq(a, b, loose);
+      case "!=":
+        return neq(a, b, loose);
+      case ">":
+        return gt(a, b, loose);
+      case ">=":
+        return gte(a, b, loose);
+      case "<":
+        return lt(a, b, loose);
+      case "<=":
+        return lte(a, b, loose);
+      default:
+        throw new TypeError("Invalid operator: " + op);
+    }
+  }
+  exports2.Comparator = Comparator;
+  function Comparator(comp, options) {
+    if (!options || typeof options !== "object") {
+      options = {
+        loose: !!options,
+        includePrerelease: false
+      };
+    }
+    if (comp instanceof Comparator) {
+      if (comp.loose === !!options.loose) {
+        return comp;
+      } else {
+        comp = comp.value;
+      }
+    }
+    if (!(this instanceof Comparator)) {
+      return new Comparator(comp, options);
+    }
+    debug2("comparator", comp, options);
+    this.options = options;
+    this.loose = !!options.loose;
+    this.parse(comp);
+    if (this.semver === ANY) {
+      this.value = "";
+    } else {
+      this.value = this.operator + this.semver.version;
+    }
+    debug2("comp", this);
+  }
+  var ANY = {};
+  Comparator.prototype.parse = function(comp) {
+    var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
+    var m = comp.match(r);
+    if (!m) {
+      throw new TypeError("Invalid comparator: " + comp);
+    }
+    this.operator = m[1] !== void 0 ? m[1] : "";
+    if (this.operator === "=") {
+      this.operator = "";
+    }
+    if (!m[2]) {
+      this.semver = ANY;
+    } else {
+      this.semver = new SemVer(m[2], this.options.loose);
+    }
+  };
+  Comparator.prototype.toString = function() {
+    return this.value;
+  };
+  Comparator.prototype.test = function(version) {
+    debug2("Comparator.test", version, this.options.loose);
+    if (this.semver === ANY || version === ANY) {
+      return true;
+    }
+    if (typeof version === "string") {
+      try {
+        version = new SemVer(version, this.options);
+      } catch (er) {
+        return false;
+      }
+    }
+    return cmp(version, this.operator, this.semver, this.options);
+  };
+  Comparator.prototype.intersects = function(comp, options) {
+    if (!(comp instanceof Comparator)) {
+      throw new TypeError("a Comparator is required");
+    }
+    if (!options || typeof options !== "object") {
+      options = {
+        loose: !!options,
+        includePrerelease: false
+      };
+    }
+    var rangeTmp;
+    if (this.operator === "") {
+      if (this.value === "") {
+        return true;
+      }
+      rangeTmp = new Range(comp.value, options);
+      return satisfies(this.value, rangeTmp, options);
+    } else if (comp.operator === "") {
+      if (comp.value === "") {
+        return true;
+      }
+      rangeTmp = new Range(this.value, options);
+      return satisfies(comp.semver, rangeTmp, options);
+    }
+    var sameDirectionIncreasing = (this.operator === ">=" || this.operator === ">") && (comp.operator === ">=" || comp.operator === ">");
+    var sameDirectionDecreasing = (this.operator === "<=" || this.operator === "<") && (comp.operator === "<=" || comp.operator === "<");
+    var sameSemVer = this.semver.version === comp.semver.version;
+    var differentDirectionsInclusive = (this.operator === ">=" || this.operator === "<=") && (comp.operator === ">=" || comp.operator === "<=");
+    var oppositeDirectionsLessThan = cmp(this.semver, "<", comp.semver, options) && ((this.operator === ">=" || this.operator === ">") && (comp.operator === "<=" || comp.operator === "<"));
+    var oppositeDirectionsGreaterThan = cmp(this.semver, ">", comp.semver, options) && ((this.operator === "<=" || this.operator === "<") && (comp.operator === ">=" || comp.operator === ">"));
+    return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
+  };
+  exports2.Range = Range;
+  function Range(range, options) {
+    if (!options || typeof options !== "object") {
+      options = {
+        loose: !!options,
+        includePrerelease: false
+      };
+    }
+    if (range instanceof Range) {
+      if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
+        return range;
+      } else {
+        return new Range(range.raw, options);
+      }
+    }
+    if (range instanceof Comparator) {
+      return new Range(range.value, options);
+    }
+    if (!(this instanceof Range)) {
+      return new Range(range, options);
+    }
+    this.options = options;
+    this.loose = !!options.loose;
+    this.includePrerelease = !!options.includePrerelease;
+    this.raw = range;
+    this.set = range.split(/\s*\|\|\s*/).map(function(range2) {
+      return this.parseRange(range2.trim());
+    }, this).filter(function(c) {
+      return c.length;
+    });
+    if (!this.set.length) {
+      throw new TypeError("Invalid SemVer Range: " + range);
+    }
+    this.format();
+  }
+  Range.prototype.format = function() {
+    this.range = this.set.map(function(comps) {
+      return comps.join(" ").trim();
+    }).join("||").trim();
+    return this.range;
+  };
+  Range.prototype.toString = function() {
+    return this.range;
+  };
+  Range.prototype.parseRange = function(range) {
+    var loose = this.options.loose;
+    range = range.trim();
+    var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
+    range = range.replace(hr, hyphenReplace);
+    debug2("hyphen replace", range);
+    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
+    debug2("comparator trim", range, re[t.COMPARATORTRIM]);
+    range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
+    range = range.replace(re[t.CARETTRIM], caretTrimReplace);
+    range = range.split(/\s+/).join(" ");
+    var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
+    var set = range.split(" ").map(function(comp) {
+      return parseComparator(comp, this.options);
+    }, this).join(" ").split(/\s+/);
+    if (this.options.loose) {
+      set = set.filter(function(comp) {
+        return !!comp.match(compRe);
+      });
+    }
+    set = set.map(function(comp) {
+      return new Comparator(comp, this.options);
+    }, this);
+    return set;
+  };
+  Range.prototype.intersects = function(range, options) {
+    if (!(range instanceof Range)) {
+      throw new TypeError("a Range is required");
+    }
+    return this.set.some(function(thisComparators) {
+      return isSatisfiable(thisComparators, options) && range.set.some(function(rangeComparators) {
+        return isSatisfiable(rangeComparators, options) && thisComparators.every(function(thisComparator) {
+          return rangeComparators.every(function(rangeComparator) {
+            return thisComparator.intersects(rangeComparator, options);
+          });
+        });
+      });
+    });
+  };
+  function isSatisfiable(comparators, options) {
+    var result = true;
+    var remainingComparators = comparators.slice();
+    var testComparator = remainingComparators.pop();
+    while (result && remainingComparators.length) {
+      result = remainingComparators.every(function(otherComparator) {
+        return testComparator.intersects(otherComparator, options);
+      });
+      testComparator = remainingComparators.pop();
+    }
+    return result;
+  }
+  exports2.toComparators = toComparators;
+  function toComparators(range, options) {
+    return new Range(range, options).set.map(function(comp) {
+      return comp.map(function(c) {
+        return c.value;
+      }).join(" ").trim().split(" ");
+    });
+  }
+  function parseComparator(comp, options) {
+    debug2("comp", comp, options);
+    comp = replaceCarets(comp, options);
+    debug2("caret", comp);
+    comp = replaceTildes(comp, options);
+    debug2("tildes", comp);
+    comp = replaceXRanges(comp, options);
+    debug2("xrange", comp);
+    comp = replaceStars(comp, options);
+    debug2("stars", comp);
+    return comp;
+  }
+  function isX(id) {
+    return !id || id.toLowerCase() === "x" || id === "*";
+  }
+  function replaceTildes(comp, options) {
+    return comp.trim().split(/\s+/).map(function(comp2) {
+      return replaceTilde(comp2, options);
+    }).join(" ");
+  }
+  function replaceTilde(comp, options) {
+    var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
+    return comp.replace(r, function(_, M, m, p, pr) {
+      debug2("tilde", comp, _, M, m, p, pr);
+      var ret;
+      if (isX(M)) {
+        ret = "";
+      } else if (isX(m)) {
+        ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
+      } else if (isX(p)) {
+        ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
+      } else if (pr) {
+        debug2("replaceTilde pr", pr);
+        ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
+      } else {
+        ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
+      }
+      debug2("tilde return", ret);
+      return ret;
+    });
+  }
+  function replaceCarets(comp, options) {
+    return comp.trim().split(/\s+/).map(function(comp2) {
+      return replaceCaret(comp2, options);
+    }).join(" ");
+  }
+  function replaceCaret(comp, options) {
+    debug2("caret", comp, options);
+    var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
+    return comp.replace(r, function(_, M, m, p, pr) {
+      debug2("caret", comp, _, M, m, p, pr);
+      var ret;
+      if (isX(M)) {
+        ret = "";
+      } else if (isX(m)) {
+        ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
+      } else if (isX(p)) {
+        if (M === "0") {
+          ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
+        } else {
+          ret = ">=" + M + "." + m + ".0 <" + (+M + 1) + ".0.0";
+        }
+      } else if (pr) {
+        debug2("replaceCaret pr", pr);
+        if (M === "0") {
+          if (m === "0") {
+            ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + m + "." + (+p + 1);
+          } else {
+            ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
+          }
+        } else {
+          ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + (+M + 1) + ".0.0";
+        }
+      } else {
+        debug2("no pr");
+        if (M === "0") {
+          if (m === "0") {
+            ret = ">=" + M + "." + m + "." + p + " <" + M + "." + m + "." + (+p + 1);
+          } else {
+            ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
+          }
+        } else {
+          ret = ">=" + M + "." + m + "." + p + " <" + (+M + 1) + ".0.0";
+        }
+      }
+      debug2("caret return", ret);
+      return ret;
+    });
+  }
+  function replaceXRanges(comp, options) {
+    debug2("replaceXRanges", comp, options);
+    return comp.split(/\s+/).map(function(comp2) {
+      return replaceXRange(comp2, options);
+    }).join(" ");
+  }
+  function replaceXRange(comp, options) {
+    comp = comp.trim();
+    var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
+    return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
+      debug2("xRange", comp, ret, gtlt, M, m, p, pr);
+      var xM = isX(M);
+      var xm = xM || isX(m);
+      var xp = xm || isX(p);
+      var anyX = xp;
+      if (gtlt === "=" && anyX) {
+        gtlt = "";
+      }
+      pr = options.includePrerelease ? "-0" : "";
+      if (xM) {
+        if (gtlt === ">" || gtlt === "<") {
+          ret = "<0.0.0-0";
+        } else {
+          ret = "*";
+        }
+      } else if (gtlt && anyX) {
+        if (xm) {
+          m = 0;
+        }
+        p = 0;
+        if (gtlt === ">") {
+          gtlt = ">=";
+          if (xm) {
+            M = +M + 1;
+            m = 0;
+            p = 0;
+          } else {
+            m = +m + 1;
+            p = 0;
+          }
+        } else if (gtlt === "<=") {
+          gtlt = "<";
+          if (xm) {
+            M = +M + 1;
+          } else {
+            m = +m + 1;
+          }
+        }
+        ret = gtlt + M + "." + m + "." + p + pr;
+      } else if (xm) {
+        ret = ">=" + M + ".0.0" + pr + " <" + (+M + 1) + ".0.0" + pr;
+      } else if (xp) {
+        ret = ">=" + M + "." + m + ".0" + pr + " <" + M + "." + (+m + 1) + ".0" + pr;
+      }
+      debug2("xRange return", ret);
+      return ret;
+    });
+  }
+  function replaceStars(comp, options) {
+    debug2("replaceStars", comp, options);
+    return comp.trim().replace(re[t.STAR], "");
+  }
+  function hyphenReplace($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) {
+    if (isX(fM)) {
+      from = "";
+    } else if (isX(fm)) {
+      from = ">=" + fM + ".0.0";
+    } else if (isX(fp)) {
+      from = ">=" + fM + "." + fm + ".0";
+    } else {
+      from = ">=" + from;
+    }
+    if (isX(tM)) {
+      to = "";
+    } else if (isX(tm)) {
+      to = "<" + (+tM + 1) + ".0.0";
+    } else if (isX(tp)) {
+      to = "<" + tM + "." + (+tm + 1) + ".0";
+    } else if (tpr) {
+      to = "<=" + tM + "." + tm + "." + tp + "-" + tpr;
+    } else {
+      to = "<=" + to;
+    }
+    return (from + " " + to).trim();
+  }
+  Range.prototype.test = function(version) {
+    if (!version) {
+      return false;
+    }
+    if (typeof version === "string") {
+      try {
+        version = new SemVer(version, this.options);
+      } catch (er) {
+        return false;
+      }
+    }
+    for (var i2 = 0; i2 < this.set.length; i2++) {
+      if (testSet(this.set[i2], version, this.options)) {
+        return true;
+      }
+    }
+    return false;
+  };
+  function testSet(set, version, options) {
+    for (var i2 = 0; i2 < set.length; i2++) {
+      if (!set[i2].test(version)) {
+        return false;
+      }
+    }
+    if (version.prerelease.length && !options.includePrerelease) {
+      for (i2 = 0; i2 < set.length; i2++) {
+        debug2(set[i2].semver);
+        if (set[i2].semver === ANY) {
+          continue;
+        }
+        if (set[i2].semver.prerelease.length > 0) {
+          var allowed = set[i2].semver;
+          if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+    return true;
+  }
+  exports2.satisfies = satisfies;
+  function satisfies(version, range, options) {
+    try {
+      range = new Range(range, options);
+    } catch (er) {
+      return false;
+    }
+    return range.test(version);
+  }
+  exports2.maxSatisfying = maxSatisfying;
+  function maxSatisfying(versions, range, options) {
+    var max = null;
+    var maxSV = null;
+    try {
+      var rangeObj = new Range(range, options);
+    } catch (er) {
+      return null;
+    }
+    versions.forEach(function(v) {
+      if (rangeObj.test(v)) {
+        if (!max || maxSV.compare(v) === -1) {
+          max = v;
+          maxSV = new SemVer(max, options);
+        }
+      }
+    });
+    return max;
+  }
+  exports2.minSatisfying = minSatisfying;
+  function minSatisfying(versions, range, options) {
+    var min = null;
+    var minSV = null;
+    try {
+      var rangeObj = new Range(range, options);
+    } catch (er) {
+      return null;
+    }
+    versions.forEach(function(v) {
+      if (rangeObj.test(v)) {
+        if (!min || minSV.compare(v) === 1) {
+          min = v;
+          minSV = new SemVer(min, options);
+        }
+      }
+    });
+    return min;
+  }
+  exports2.minVersion = minVersion;
+  function minVersion(range, loose) {
+    range = new Range(range, loose);
+    var minver = new SemVer("0.0.0");
+    if (range.test(minver)) {
+      return minver;
+    }
+    minver = new SemVer("0.0.0-0");
+    if (range.test(minver)) {
+      return minver;
+    }
+    minver = null;
+    for (var i2 = 0; i2 < range.set.length; ++i2) {
+      var comparators = range.set[i2];
+      comparators.forEach(function(comparator) {
+        var compver = new SemVer(comparator.semver.version);
+        switch (comparator.operator) {
+          case ">":
+            if (compver.prerelease.length === 0) {
+              compver.patch++;
+            } else {
+              compver.prerelease.push(0);
+            }
+            compver.raw = compver.format();
+          case "":
+          case ">=":
+            if (!minver || gt(minver, compver)) {
+              minver = compver;
+            }
+            break;
+          case "<":
+          case "<=":
+            break;
+          default:
+            throw new Error("Unexpected operation: " + comparator.operator);
+        }
+      });
+    }
+    if (minver && range.test(minver)) {
+      return minver;
+    }
+    return null;
+  }
+  exports2.validRange = validRange;
+  function validRange(range, options) {
+    try {
+      return new Range(range, options).range || "*";
+    } catch (er) {
+      return null;
+    }
+  }
+  exports2.ltr = ltr;
+  function ltr(version, range, options) {
+    return outside(version, range, "<", options);
+  }
+  exports2.gtr = gtr;
+  function gtr(version, range, options) {
+    return outside(version, range, ">", options);
+  }
+  exports2.outside = outside;
+  function outside(version, range, hilo, options) {
+    version = new SemVer(version, options);
+    range = new Range(range, options);
+    var gtfn, ltefn, ltfn, comp, ecomp;
+    switch (hilo) {
+      case ">":
+        gtfn = gt;
+        ltefn = lte;
+        ltfn = lt;
+        comp = ">";
+        ecomp = ">=";
+        break;
+      case "<":
+        gtfn = lt;
+        ltefn = gte;
+        ltfn = gt;
+        comp = "<";
+        ecomp = "<=";
+        break;
+      default:
+        throw new TypeError('Must provide a hilo val of "<" or ">"');
+    }
+    if (satisfies(version, range, options)) {
+      return false;
+    }
+    for (var i2 = 0; i2 < range.set.length; ++i2) {
+      var comparators = range.set[i2];
+      var high = null;
+      var low = null;
+      comparators.forEach(function(comparator) {
+        if (comparator.semver === ANY) {
+          comparator = new Comparator(">=0.0.0");
+        }
+        high = high || comparator;
+        low = low || comparator;
+        if (gtfn(comparator.semver, high.semver, options)) {
+          high = comparator;
+        } else if (ltfn(comparator.semver, low.semver, options)) {
+          low = comparator;
+        }
+      });
+      if (high.operator === comp || high.operator === ecomp) {
+        return false;
+      }
+      if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) {
+        return false;
+      } else if (low.operator === ecomp && ltfn(version, low.semver)) {
+        return false;
+      }
+    }
+    return true;
+  }
+  exports2.prerelease = prerelease;
+  function prerelease(version, options) {
+    var parsed = parse(version, options);
+    return parsed && parsed.prerelease.length ? parsed.prerelease : null;
+  }
+  exports2.intersects = intersects;
+  function intersects(r1, r2, options) {
+    r1 = new Range(r1, options);
+    r2 = new Range(r2, options);
+    return r1.intersects(r2);
+  }
+  exports2.coerce = coerce;
+  function coerce(version, options) {
+    if (version instanceof SemVer) {
+      return version;
+    }
+    if (typeof version === "number") {
+      version = String(version);
+    }
+    if (typeof version !== "string") {
+      return null;
+    }
+    options = options || {};
+    var match = null;
+    if (!options.rtl) {
+      match = version.match(re[t.COERCE]);
+    } else {
+      var next;
+      while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) {
+        if (!match || next.index + next[0].length !== match.index + match[0].length) {
+          match = next;
+        }
+        re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
+      }
+      re[t.COERCERTL].lastIndex = -1;
+    }
+    if (match === null) {
+      return null;
+    }
+    return parse(match[2] + "." + (match[3] || "0") + "." + (match[4] || "0"), options);
+  }
+});
+
+// node_modules/vscode-jsonrpc/lib/is.js
+var require_is = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  function boolean(value) {
+    return value === true || value === false;
+  }
+  exports2.boolean = boolean;
+  function string(value) {
+    return typeof value === "string" || value instanceof String;
+  }
+  exports2.string = string;
+  function number(value) {
+    return typeof value === "number" || value instanceof Number;
+  }
+  exports2.number = number;
+  function error(value) {
+    return value instanceof Error;
+  }
+  exports2.error = error;
+  function func(value) {
+    return typeof value === "function";
+  }
+  exports2.func = func;
+  function array(value) {
+    return Array.isArray(value);
+  }
+  exports2.array = array;
+  function stringArray(value) {
+    return array(value) && value.every((elem) => string(elem));
+  }
+  exports2.stringArray = stringArray;
+});
+
+// node_modules/vscode-jsonrpc/lib/messages.js
+var require_messages = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var is = require_is();
+  var ErrorCodes;
+  (function(ErrorCodes2) {
+    ErrorCodes2.ParseError = -32700;
+    ErrorCodes2.InvalidRequest = -32600;
+    ErrorCodes2.MethodNotFound = -32601;
+    ErrorCodes2.InvalidParams = -32602;
+    ErrorCodes2.InternalError = -32603;
+    ErrorCodes2.serverErrorStart = -32099;
+    ErrorCodes2.serverErrorEnd = -32e3;
+    ErrorCodes2.ServerNotInitialized = -32002;
+    ErrorCodes2.UnknownErrorCode = -32001;
+    ErrorCodes2.RequestCancelled = -32800;
+    ErrorCodes2.ContentModified = -32801;
+    ErrorCodes2.MessageWriteError = 1;
+    ErrorCodes2.MessageReadError = 2;
+  })(ErrorCodes = exports2.ErrorCodes || (exports2.ErrorCodes = {}));
+  var ResponseError = class extends Error {
+    constructor(code, message, data) {
+      super(message);
+      this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
+      this.data = data;
+      Object.setPrototypeOf(this, ResponseError.prototype);
+    }
+    toJson() {
+      return {
+        code: this.code,
+        message: this.message,
+        data: this.data
+      };
+    }
+  };
+  exports2.ResponseError = ResponseError;
+  var AbstractMessageType = class {
+    constructor(_method, _numberOfParams) {
+      this._method = _method;
+      this._numberOfParams = _numberOfParams;
+    }
+    get method() {
+      return this._method;
+    }
+    get numberOfParams() {
+      return this._numberOfParams;
+    }
+  };
+  exports2.AbstractMessageType = AbstractMessageType;
+  var RequestType0 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 0);
+    }
+  };
+  exports2.RequestType0 = RequestType0;
+  var RequestType = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 1);
+    }
+  };
+  exports2.RequestType = RequestType;
+  var RequestType1 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 1);
+    }
+  };
+  exports2.RequestType1 = RequestType1;
+  var RequestType2 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 2);
+    }
+  };
+  exports2.RequestType2 = RequestType2;
+  var RequestType3 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 3);
+    }
+  };
+  exports2.RequestType3 = RequestType3;
+  var RequestType4 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 4);
+    }
+  };
+  exports2.RequestType4 = RequestType4;
+  var RequestType5 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 5);
+    }
+  };
+  exports2.RequestType5 = RequestType5;
+  var RequestType6 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 6);
+    }
+  };
+  exports2.RequestType6 = RequestType6;
+  var RequestType7 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 7);
+    }
+  };
+  exports2.RequestType7 = RequestType7;
+  var RequestType8 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 8);
+    }
+  };
+  exports2.RequestType8 = RequestType8;
+  var RequestType9 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 9);
+    }
+  };
+  exports2.RequestType9 = RequestType9;
+  var NotificationType = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 1);
+      this._ = void 0;
+    }
+  };
+  exports2.NotificationType = NotificationType;
+  var NotificationType0 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 0);
+    }
+  };
+  exports2.NotificationType0 = NotificationType0;
+  var NotificationType1 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 1);
+    }
+  };
+  exports2.NotificationType1 = NotificationType1;
+  var NotificationType2 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 2);
+    }
+  };
+  exports2.NotificationType2 = NotificationType2;
+  var NotificationType3 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 3);
+    }
+  };
+  exports2.NotificationType3 = NotificationType3;
+  var NotificationType4 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 4);
+    }
+  };
+  exports2.NotificationType4 = NotificationType4;
+  var NotificationType5 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 5);
+    }
+  };
+  exports2.NotificationType5 = NotificationType5;
+  var NotificationType6 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 6);
+    }
+  };
+  exports2.NotificationType6 = NotificationType6;
+  var NotificationType7 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 7);
+    }
+  };
+  exports2.NotificationType7 = NotificationType7;
+  var NotificationType8 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 8);
+    }
+  };
+  exports2.NotificationType8 = NotificationType8;
+  var NotificationType9 = class extends AbstractMessageType {
+    constructor(method) {
+      super(method, 9);
+    }
+  };
+  exports2.NotificationType9 = NotificationType9;
+  function isRequestMessage(message) {
+    let candidate = message;
+    return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
+  }
+  exports2.isRequestMessage = isRequestMessage;
+  function isNotificationMessage(message) {
+    let candidate = message;
+    return candidate && is.string(candidate.method) && message.id === void 0;
+  }
+  exports2.isNotificationMessage = isNotificationMessage;
+  function isResponseMessage(message) {
+    let candidate = message;
+    return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
+  }
+  exports2.isResponseMessage = isResponseMessage;
+});
+
+// node_modules/vscode-jsonrpc/lib/events.js
+var require_events = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var Disposable;
+  (function(Disposable2) {
+    function create(func) {
+      return {
+        dispose: func
+      };
+    }
+    Disposable2.create = create;
+  })(Disposable = exports2.Disposable || (exports2.Disposable = {}));
+  var Event;
+  (function(Event2) {
+    const _disposable = {dispose() {
+    }};
+    Event2.None = function() {
+      return _disposable;
+    };
+  })(Event = exports2.Event || (exports2.Event = {}));
+  var CallbackList = class {
+    add(callback, context = null, bucket) {
+      if (!this._callbacks) {
+        this._callbacks = [];
+        this._contexts = [];
+      }
+      this._callbacks.push(callback);
+      this._contexts.push(context);
+      if (Array.isArray(bucket)) {
+        bucket.push({dispose: () => this.remove(callback, context)});
+      }
+    }
+    remove(callback, context = null) {
+      if (!this._callbacks) {
+        return;
+      }
+      var foundCallbackWithDifferentContext = false;
+      for (var i = 0, len = this._callbacks.length; i < len; i++) {
+        if (this._callbacks[i] === callback) {
+          if (this._contexts[i] === context) {
+            this._callbacks.splice(i, 1);
+            this._contexts.splice(i, 1);
+            return;
+          } else {
+            foundCallbackWithDifferentContext = true;
+          }
+        }
+      }
+      if (foundCallbackWithDifferentContext) {
+        throw new Error("When adding a listener with a context, you should remove it with the same context");
+      }
+    }
+    invoke(...args) {
+      if (!this._callbacks) {
+        return [];
+      }
+      var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
+      for (var i = 0, len = callbacks.length; i < len; i++) {
+        try {
+          ret.push(callbacks[i].apply(contexts[i], args));
+        } catch (e) {
+          console.error(e);
+        }
+      }
+      return ret;
+    }
+    isEmpty() {
+      return !this._callbacks || this._callbacks.length === 0;
+    }
+    dispose() {
+      this._callbacks = void 0;
+      this._contexts = void 0;
+    }
+  };
+  var Emitter = class {
+    constructor(_options) {
+      this._options = _options;
+    }
+    get event() {
+      if (!this._event) {
+        this._event = (listener, thisArgs, disposables) => {
+          if (!this._callbacks) {
+            this._callbacks = new CallbackList();
+          }
+          if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
+            this._options.onFirstListenerAdd(this);
+          }
+          this._callbacks.add(listener, thisArgs);
+          let result;
+          result = {
+            dispose: () => {
+              this._callbacks.remove(listener, thisArgs);
+              result.dispose = Emitter._noop;
+              if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
+                this._options.onLastListenerRemove(this);
+              }
+            }
+          };
+          if (Array.isArray(disposables)) {
+            disposables.push(result);
+          }
+          return result;
+        };
+      }
+      return this._event;
+    }
+    fire(event) {
+      if (this._callbacks) {
+        this._callbacks.invoke.call(this._callbacks, event);
+      }
+    }
+    dispose() {
+      if (this._callbacks) {
+        this._callbacks.dispose();
+        this._callbacks = void 0;
+      }
+    }
+  };
+  exports2.Emitter = Emitter;
+  Emitter._noop = function() {
+  };
+});
+
+// node_modules/vscode-jsonrpc/lib/messageReader.js
+var require_messageReader = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var events_1 = require_events();
+  var Is = require_is();
+  var DefaultSize = 8192;
+  var CR = Buffer.from("\r", "ascii")[0];
+  var LF = Buffer.from("\n", "ascii")[0];
+  var CRLF = "\r\n";
+  var MessageBuffer = class {
+    constructor(encoding = "utf8") {
+      this.encoding = encoding;
+      this.index = 0;
+      this.buffer = Buffer.allocUnsafe(DefaultSize);
+    }
+    append(chunk) {
+      var toAppend = chunk;
+      if (typeof chunk === "string") {
+        var str = chunk;
+        var bufferLen = Buffer.byteLength(str, this.encoding);
+        toAppend = Buffer.allocUnsafe(bufferLen);
+        toAppend.write(str, 0, bufferLen, this.encoding);
+      }
+      if (this.buffer.length - this.index >= toAppend.length) {
+        toAppend.copy(this.buffer, this.index, 0, toAppend.length);
+      } else {
+        var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
+        if (this.index === 0) {
+          this.buffer = Buffer.allocUnsafe(newSize);
+          toAppend.copy(this.buffer, 0, 0, toAppend.length);
+        } else {
+          this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
+        }
+      }
+      this.index += toAppend.length;
+    }
+    tryReadHeaders() {
+      let result = void 0;
+      let current = 0;
+      while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
+        current++;
+      }
+      if (current + 3 >= this.index) {
+        return result;
+      }
+      result = Object.create(null);
+      let headers = this.buffer.toString("ascii", 0, current).split(CRLF);
+      headers.forEach((header) => {
+        let index = header.indexOf(":");
+        if (index === -1) {
+          throw new Error("Message header must separate key and value using :");
+        }
+        let key = header.substr(0, index);
+        let value = header.substr(index + 1).trim();
+        result[key] = value;
+      });
+      let nextStart = current + 4;
+      this.buffer = this.buffer.slice(nextStart);
+      this.index = this.index - nextStart;
+      return result;
+    }
+    tryReadContent(length) {
+      if (this.index < length) {
+        return null;
+      }
+      let result = this.buffer.toString(this.encoding, 0, length);
+      let nextStart = length;
+      this.buffer.copy(this.buffer, 0, nextStart);
+      this.index = this.index - nextStart;
+      return result;
+    }
+    get numberOfBytes() {
+      return this.index;
+    }
+  };
+  var MessageReader;
+  (function(MessageReader2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) && Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
+    }
+    MessageReader2.is = is;
+  })(MessageReader = exports2.MessageReader || (exports2.MessageReader = {}));
+  var AbstractMessageReader = class {
+    constructor() {
+      this.errorEmitter = new events_1.Emitter();
+      this.closeEmitter = new events_1.Emitter();
+      this.partialMessageEmitter = new events_1.Emitter();
+    }
+    dispose() {
+      this.errorEmitter.dispose();
+      this.closeEmitter.dispose();
+    }
+    get onError() {
+      return this.errorEmitter.event;
+    }
+    fireError(error) {
+      this.errorEmitter.fire(this.asError(error));
+    }
+    get onClose() {
+      return this.closeEmitter.event;
+    }
+    fireClose() {
+      this.closeEmitter.fire(void 0);
+    }
+    get onPartialMessage() {
+      return this.partialMessageEmitter.event;
+    }
+    firePartialMessage(info) {
+      this.partialMessageEmitter.fire(info);
+    }
+    asError(error) {
+      if (error instanceof Error) {
+        return error;
+      } else {
+        return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
+      }
+    }
+  };
+  exports2.AbstractMessageReader = AbstractMessageReader;
+  var StreamMessageReader = class extends AbstractMessageReader {
+    constructor(readable, encoding = "utf8") {
+      super();
+      this.readable = readable;
+      this.buffer = new MessageBuffer(encoding);
+      this._partialMessageTimeout = 1e4;
+    }
+    set partialMessageTimeout(timeout) {
+      this._partialMessageTimeout = timeout;
+    }
+    get partialMessageTimeout() {
+      return this._partialMessageTimeout;
+    }
+    listen(callback) {
+      this.nextMessageLength = -1;
+      this.messageToken = 0;
+      this.partialMessageTimer = void 0;
+      this.callback = callback;
+      this.readable.on("data", (data) => {
+        this.onData(data);
+      });
+      this.readable.on("error", (error) => this.fireError(error));
+      this.readable.on("close", () => this.fireClose());
+    }
+    onData(data) {
+      this.buffer.append(data);
+      while (true) {
+        if (this.nextMessageLength === -1) {
+          let headers = this.buffer.tryReadHeaders();
+          if (!headers) {
+            return;
+          }
+          let contentLength = headers["Content-Length"];
+          if (!contentLength) {
+            throw new Error("Header must provide a Content-Length property.");
+          }
+          let length = parseInt(contentLength);
+          if (isNaN(length)) {
+            throw new Error("Content-Length value must be a number.");
+          }
+          this.nextMessageLength = length;
+        }
+        var msg = this.buffer.tryReadContent(this.nextMessageLength);
+        if (msg === null) {
+          this.setPartialMessageTimer();
+          return;
+        }
+        this.clearPartialMessageTimer();
+        this.nextMessageLength = -1;
+        this.messageToken++;
+        var json = JSON.parse(msg);
+        this.callback(json);
+      }
+    }
+    clearPartialMessageTimer() {
+      if (this.partialMessageTimer) {
+        clearTimeout(this.partialMessageTimer);
+        this.partialMessageTimer = void 0;
+      }
+    }
+    setPartialMessageTimer() {
+      this.clearPartialMessageTimer();
+      if (this._partialMessageTimeout <= 0) {
+        return;
+      }
+      this.partialMessageTimer = setTimeout((token, timeout) => {
+        this.partialMessageTimer = void 0;
+        if (token === this.messageToken) {
+          this.firePartialMessage({messageToken: token, waitingTime: timeout});
+          this.setPartialMessageTimer();
+        }
+      }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
+    }
+  };
+  exports2.StreamMessageReader = StreamMessageReader;
+  var IPCMessageReader = class extends AbstractMessageReader {
+    constructor(process2) {
+      super();
+      this.process = process2;
+      let eventEmitter = this.process;
+      eventEmitter.on("error", (error) => this.fireError(error));
+      eventEmitter.on("close", () => this.fireClose());
+    }
+    listen(callback) {
+      this.process.on("message", callback);
+    }
+  };
+  exports2.IPCMessageReader = IPCMessageReader;
+  var SocketMessageReader = class extends StreamMessageReader {
+    constructor(socket2, encoding = "utf-8") {
+      super(socket2, encoding);
+    }
+  };
+  exports2.SocketMessageReader = SocketMessageReader;
+});
+
+// node_modules/vscode-jsonrpc/lib/messageWriter.js
+var require_messageWriter = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var events_1 = require_events();
+  var Is = require_is();
+  var ContentLength = "Content-Length: ";
+  var CRLF = "\r\n";
+  var MessageWriter;
+  (function(MessageWriter2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) && Is.func(candidate.onError) && Is.func(candidate.write);
+    }
+    MessageWriter2.is = is;
+  })(MessageWriter = exports2.MessageWriter || (exports2.MessageWriter = {}));
+  var AbstractMessageWriter = class {
+    constructor() {
+      this.errorEmitter = new events_1.Emitter();
+      this.closeEmitter = new events_1.Emitter();
+    }
+    dispose() {
+      this.errorEmitter.dispose();
+      this.closeEmitter.dispose();
+    }
+    get onError() {
+      return this.errorEmitter.event;
+    }
+    fireError(error, message, count) {
+      this.errorEmitter.fire([this.asError(error), message, count]);
+    }
+    get onClose() {
+      return this.closeEmitter.event;
+    }
+    fireClose() {
+      this.closeEmitter.fire(void 0);
+    }
+    asError(error) {
+      if (error instanceof Error) {
+        return error;
+      } else {
+        return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
+      }
+    }
+  };
+  exports2.AbstractMessageWriter = AbstractMessageWriter;
+  var StreamMessageWriter = class extends AbstractMessageWriter {
+    constructor(writable, encoding = "utf8") {
+      super();
+      this.writable = writable;
+      this.encoding = encoding;
+      this.errorCount = 0;
+      this.writable.on("error", (error) => this.fireError(error));
+      this.writable.on("close", () => this.fireClose());
+    }
+    write(msg) {
+      let json = JSON.stringify(msg);
+      let contentLength = Buffer.byteLength(json, this.encoding);
+      let headers = [
+        ContentLength,
+        contentLength.toString(),
+        CRLF,
+        CRLF
+      ];
+      try {
+        this.writable.write(headers.join(""), "ascii");
+        this.writable.write(json, this.encoding);
+        this.errorCount = 0;
+      } catch (error) {
+        this.errorCount++;
+        this.fireError(error, msg, this.errorCount);
+      }
+    }
+  };
+  exports2.StreamMessageWriter = StreamMessageWriter;
+  var IPCMessageWriter = class extends AbstractMessageWriter {
+    constructor(process2) {
+      super();
+      this.process = process2;
+      this.errorCount = 0;
+      this.queue = [];
+      this.sending = false;
+      let eventEmitter = this.process;
+      eventEmitter.on("error", (error) => this.fireError(error));
+      eventEmitter.on("close", () => this.fireClose);
+    }
+    write(msg) {
+      if (!this.sending && this.queue.length === 0) {
+        this.doWriteMessage(msg);
+      } else {
+        this.queue.push(msg);
+      }
+    }
+    doWriteMessage(msg) {
+      try {
+        if (this.process.send) {
+          this.sending = true;
+          this.process.send(msg, void 0, void 0, (error) => {
+            this.sending = false;
+            if (error) {
+              this.errorCount++;
+              this.fireError(error, msg, this.errorCount);
+            } else {
+              this.errorCount = 0;
+            }
+            if (this.queue.length > 0) {
+              this.doWriteMessage(this.queue.shift());
+            }
+          });
+        }
+      } catch (error) {
+        this.errorCount++;
+        this.fireError(error, msg, this.errorCount);
+      }
+    }
+  };
+  exports2.IPCMessageWriter = IPCMessageWriter;
+  var SocketMessageWriter = class extends AbstractMessageWriter {
+    constructor(socket2, encoding = "utf8") {
+      super();
+      this.socket = socket2;
+      this.queue = [];
+      this.sending = false;
+      this.encoding = encoding;
+      this.errorCount = 0;
+      this.socket.on("error", (error) => this.fireError(error));
+      this.socket.on("close", () => this.fireClose());
+    }
+    dispose() {
+      super.dispose();
+      this.socket.destroy();
+    }
+    write(msg) {
+      if (!this.sending && this.queue.length === 0) {
+        this.doWriteMessage(msg);
+      } else {
+        this.queue.push(msg);
+      }
+    }
+    doWriteMessage(msg) {
+      let json = JSON.stringify(msg);
+      let contentLength = Buffer.byteLength(json, this.encoding);
+      let headers = [
+        ContentLength,
+        contentLength.toString(),
+        CRLF,
+        CRLF
+      ];
+      try {
+        this.sending = true;
+        this.socket.write(headers.join(""), "ascii", (error) => {
+          if (error) {
+            this.handleError(error, msg);
+          }
+          try {
+            this.socket.write(json, this.encoding, (error2) => {
+              this.sending = false;
+              if (error2) {
+                this.handleError(error2, msg);
+              } else {
+                this.errorCount = 0;
+              }
+              if (this.queue.length > 0) {
+                this.doWriteMessage(this.queue.shift());
+              }
+            });
+          } catch (error2) {
+            this.handleError(error2, msg);
+          }
+        });
+      } catch (error) {
+        this.handleError(error, msg);
+      }
+    }
+    handleError(error, msg) {
+      this.errorCount++;
+      this.fireError(error, msg, this.errorCount);
+    }
+  };
+  exports2.SocketMessageWriter = SocketMessageWriter;
+});
+
+// node_modules/vscode-jsonrpc/lib/cancellation.js
+var require_cancellation = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var events_1 = require_events();
+  var Is = require_is();
+  var CancellationToken;
+  (function(CancellationToken2) {
+    CancellationToken2.None = Object.freeze({
+      isCancellationRequested: false,
+      onCancellationRequested: events_1.Event.None
+    });
+    CancellationToken2.Cancelled = Object.freeze({
+      isCancellationRequested: true,
+      onCancellationRequested: events_1.Event.None
+    });
+    function is(value) {
+      let candidate = value;
+      return candidate && (candidate === CancellationToken2.None || candidate === CancellationToken2.Cancelled || Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
+    }
+    CancellationToken2.is = is;
+  })(CancellationToken = exports2.CancellationToken || (exports2.CancellationToken = {}));
+  var shortcutEvent = Object.freeze(function(callback, context) {
+    let handle = setTimeout(callback.bind(context), 0);
+    return {dispose() {
+      clearTimeout(handle);
+    }};
+  });
+  var MutableToken = class {
+    constructor() {
+      this._isCancelled = false;
+    }
+    cancel() {
+      if (!this._isCancelled) {
+        this._isCancelled = true;
+        if (this._emitter) {
+          this._emitter.fire(void 0);
+          this.dispose();
+        }
+      }
+    }
+    get isCancellationRequested() {
+      return this._isCancelled;
+    }
+    get onCancellationRequested() {
+      if (this._isCancelled) {
+        return shortcutEvent;
+      }
+      if (!this._emitter) {
+        this._emitter = new events_1.Emitter();
+      }
+      return this._emitter.event;
+    }
+    dispose() {
+      if (this._emitter) {
+        this._emitter.dispose();
+        this._emitter = void 0;
+      }
+    }
+  };
+  var CancellationTokenSource = class {
+    get token() {
+      if (!this._token) {
+        this._token = new MutableToken();
+      }
+      return this._token;
+    }
+    cancel() {
+      if (!this._token) {
+        this._token = CancellationToken.Cancelled;
+      } else {
+        this._token.cancel();
+      }
+    }
+    dispose() {
+      if (!this._token) {
+        this._token = CancellationToken.None;
+      } else if (this._token instanceof MutableToken) {
+        this._token.dispose();
+      }
+    }
+  };
+  exports2.CancellationTokenSource = CancellationTokenSource;
+});
+
+// node_modules/vscode-jsonrpc/lib/linkedMap.js
+var require_linkedMap = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var Touch;
+  (function(Touch2) {
+    Touch2.None = 0;
+    Touch2.First = 1;
+    Touch2.Last = 2;
+  })(Touch = exports2.Touch || (exports2.Touch = {}));
+  var LinkedMap = class {
+    constructor() {
+      this._map = new Map();
+      this._head = void 0;
+      this._tail = void 0;
+      this._size = 0;
+    }
+    clear() {
+      this._map.clear();
+      this._head = void 0;
+      this._tail = void 0;
+      this._size = 0;
+    }
+    isEmpty() {
+      return !this._head && !this._tail;
+    }
+    get size() {
+      return this._size;
+    }
+    has(key) {
+      return this._map.has(key);
+    }
+    get(key) {
+      const item = this._map.get(key);
+      if (!item) {
+        return void 0;
+      }
+      return item.value;
+    }
+    set(key, value, touch = Touch.None) {
+      let item = this._map.get(key);
+      if (item) {
+        item.value = value;
+        if (touch !== Touch.None) {
+          this.touch(item, touch);
+        }
+      } else {
+        item = {key, value, next: void 0, previous: void 0};
+        switch (touch) {
+          case Touch.None:
+            this.addItemLast(item);
+            break;
+          case Touch.First:
+            this.addItemFirst(item);
+            break;
+          case Touch.Last:
+            this.addItemLast(item);
+            break;
+          default:
+            this.addItemLast(item);
+            break;
+        }
+        this._map.set(key, item);
+        this._size++;
+      }
+    }
+    delete(key) {
+      const item = this._map.get(key);
+      if (!item) {
+        return false;
+      }
+      this._map.delete(key);
+      this.removeItem(item);
+      this._size--;
+      return true;
+    }
+    shift() {
+      if (!this._head && !this._tail) {
+        return void 0;
+      }
+      if (!this._head || !this._tail) {
+        throw new Error("Invalid list");
+      }
+      const item = this._head;
+      this._map.delete(item.key);
+      this.removeItem(item);
+      this._size--;
+      return item.value;
+    }
+    forEach(callbackfn, thisArg) {
+      let current = this._head;
+      while (current) {
+        if (thisArg) {
+          callbackfn.bind(thisArg)(current.value, current.key, this);
+        } else {
+          callbackfn(current.value, current.key, this);
+        }
+        current = current.next;
+      }
+    }
+    forEachReverse(callbackfn, thisArg) {
+      let current = this._tail;
+      while (current) {
+        if (thisArg) {
+          callbackfn.bind(thisArg)(current.value, current.key, this);
+        } else {
+          callbackfn(current.value, current.key, this);
+        }
+        current = current.previous;
+      }
+    }
+    values() {
+      let result = [];
+      let current = this._head;
+      while (current) {
+        result.push(current.value);
+        current = current.next;
+      }
+      return result;
+    }
+    keys() {
+      let result = [];
+      let current = this._head;
+      while (current) {
+        result.push(current.key);
+        current = current.next;
+      }
+      return result;
+    }
+    addItemFirst(item) {
+      if (!this._head && !this._tail) {
+        this._tail = item;
+      } else if (!this._head) {
+        throw new Error("Invalid list");
+      } else {
+        item.next = this._head;
+        this._head.previous = item;
+      }
+      this._head = item;
+    }
+    addItemLast(item) {
+      if (!this._head && !this._tail) {
+        this._head = item;
+      } else if (!this._tail) {
+        throw new Error("Invalid list");
+      } else {
+        item.previous = this._tail;
+        this._tail.next = item;
+      }
+      this._tail = item;
+    }
+    removeItem(item) {
+      if (item === this._head && item === this._tail) {
+        this._head = void 0;
+        this._tail = void 0;
+      } else if (item === this._head) {
+        this._head = item.next;
+      } else if (item === this._tail) {
+        this._tail = item.previous;
+      } else {
+        const next = item.next;
+        const previous = item.previous;
+        if (!next || !previous) {
+          throw new Error("Invalid list");
+        }
+        next.previous = previous;
+        previous.next = next;
+      }
+    }
+    touch(item, touch) {
+      if (!this._head || !this._tail) {
+        throw new Error("Invalid list");
+      }
+      if (touch !== Touch.First && touch !== Touch.Last) {
+        return;
+      }
+      if (touch === Touch.First) {
+        if (item === this._head) {
+          return;
+        }
+        const next = item.next;
+        const previous = item.previous;
+        if (item === this._tail) {
+          previous.next = void 0;
+          this._tail = previous;
+        } else {
+          next.previous = previous;
+          previous.next = next;
+        }
+        item.previous = void 0;
+        item.next = this._head;
+        this._head.previous = item;
+        this._head = item;
+      } else if (touch === Touch.Last) {
+        if (item === this._tail) {
+          return;
+        }
+        const next = item.next;
+        const previous = item.previous;
+        if (item === this._head) {
+          next.previous = void 0;
+          this._head = next;
+        } else {
+          next.previous = previous;
+          previous.next = next;
+        }
+        item.next = void 0;
+        item.previous = this._tail;
+        this._tail.next = item;
+        this._tail = item;
+      }
+    }
+  };
+  exports2.LinkedMap = LinkedMap;
+});
+
+// node_modules/vscode-jsonrpc/lib/pipeSupport.js
+var require_pipeSupport = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var path_1 = require("path");
+  var os_1 = require("os");
+  var crypto_1 = require("crypto");
+  var net_1 = require("net");
+  var messageReader_1 = require_messageReader();
+  var messageWriter_1 = require_messageWriter();
+  function generateRandomPipeName() {
+    const randomSuffix = crypto_1.randomBytes(21).toString("hex");
+    if (process.platform === "win32") {
+      return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
+    } else {
+      return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
+    }
+  }
+  exports2.generateRandomPipeName = generateRandomPipeName;
+  function createClientPipeTransport(pipeName, encoding = "utf-8") {
+    let connectResolve;
+    let connected = new Promise((resolve, _reject) => {
+      connectResolve = resolve;
+    });
+    return new Promise((resolve, reject) => {
+      let server = net_1.createServer((socket2) => {
+        server.close();
+        connectResolve([
+          new messageReader_1.SocketMessageReader(socket2, encoding),
+          new messageWriter_1.SocketMessageWriter(socket2, encoding)
+        ]);
+      });
+      server.on("error", reject);
+      server.listen(pipeName, () => {
+        server.removeListener("error", reject);
+        resolve({
+          onConnected: () => {
+            return connected;
+          }
+        });
+      });
+    });
+  }
+  exports2.createClientPipeTransport = createClientPipeTransport;
+  function createServerPipeTransport(pipeName, encoding = "utf-8") {
+    const socket2 = net_1.createConnection(pipeName);
+    return [
+      new messageReader_1.SocketMessageReader(socket2, encoding),
+      new messageWriter_1.SocketMessageWriter(socket2, encoding)
+    ];
+  }
+  exports2.createServerPipeTransport = createServerPipeTransport;
+});
+
+// node_modules/vscode-jsonrpc/lib/socketSupport.js
+var require_socketSupport = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var net_1 = require("net");
+  var messageReader_1 = require_messageReader();
+  var messageWriter_1 = require_messageWriter();
+  function createClientSocketTransport(port, encoding = "utf-8") {
+    let connectResolve;
+    let connected = new Promise((resolve, _reject) => {
+      connectResolve = resolve;
+    });
+    return new Promise((resolve, reject) => {
+      let server = net_1.createServer((socket2) => {
+        server.close();
+        connectResolve([
+          new messageReader_1.SocketMessageReader(socket2, encoding),
+          new messageWriter_1.SocketMessageWriter(socket2, encoding)
+        ]);
+      });
+      server.on("error", reject);
+      server.listen(port, "127.0.0.1", () => {
+        server.removeListener("error", reject);
+        resolve({
+          onConnected: () => {
+            return connected;
+          }
+        });
+      });
+    });
+  }
+  exports2.createClientSocketTransport = createClientSocketTransport;
+  function createServerSocketTransport(port, encoding = "utf-8") {
+    const socket2 = net_1.createConnection(port, "127.0.0.1");
+    return [
+      new messageReader_1.SocketMessageReader(socket2, encoding),
+      new messageWriter_1.SocketMessageWriter(socket2, encoding)
+    ];
+  }
+  exports2.createServerSocketTransport = createServerSocketTransport;
+});
+
+// node_modules/vscode-jsonrpc/lib/main.js
+var require_main = __commonJS((exports2) => {
+  "use strict";
+  function __export2(m) {
+    for (var p in m)
+      if (!exports2.hasOwnProperty(p))
+        exports2[p] = m[p];
+  }
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var Is = require_is();
+  var messages_1 = require_messages();
+  exports2.RequestType = messages_1.RequestType;
+  exports2.RequestType0 = messages_1.RequestType0;
+  exports2.RequestType1 = messages_1.RequestType1;
+  exports2.RequestType2 = messages_1.RequestType2;
+  exports2.RequestType3 = messages_1.RequestType3;
+  exports2.RequestType4 = messages_1.RequestType4;
+  exports2.RequestType5 = messages_1.RequestType5;
+  exports2.RequestType6 = messages_1.RequestType6;
+  exports2.RequestType7 = messages_1.RequestType7;
+  exports2.RequestType8 = messages_1.RequestType8;
+  exports2.RequestType9 = messages_1.RequestType9;
+  exports2.ResponseError = messages_1.ResponseError;
+  exports2.ErrorCodes = messages_1.ErrorCodes;
+  exports2.NotificationType = messages_1.NotificationType;
+  exports2.NotificationType0 = messages_1.NotificationType0;
+  exports2.NotificationType1 = messages_1.NotificationType1;
+  exports2.NotificationType2 = messages_1.NotificationType2;
+  exports2.NotificationType3 = messages_1.NotificationType3;
+  exports2.NotificationType4 = messages_1.NotificationType4;
+  exports2.NotificationType5 = messages_1.NotificationType5;
+  exports2.NotificationType6 = messages_1.NotificationType6;
+  exports2.NotificationType7 = messages_1.NotificationType7;
+  exports2.NotificationType8 = messages_1.NotificationType8;
+  exports2.NotificationType9 = messages_1.NotificationType9;
+  var messageReader_1 = require_messageReader();
+  exports2.MessageReader = messageReader_1.MessageReader;
+  exports2.StreamMessageReader = messageReader_1.StreamMessageReader;
+  exports2.IPCMessageReader = messageReader_1.IPCMessageReader;
+  exports2.SocketMessageReader = messageReader_1.SocketMessageReader;
+  var messageWriter_1 = require_messageWriter();
+  exports2.MessageWriter = messageWriter_1.MessageWriter;
+  exports2.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
+  exports2.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
+  exports2.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
+  var events_1 = require_events();
+  exports2.Disposable = events_1.Disposable;
+  exports2.Event = events_1.Event;
+  exports2.Emitter = events_1.Emitter;
+  var cancellation_1 = require_cancellation();
+  exports2.CancellationTokenSource = cancellation_1.CancellationTokenSource;
+  exports2.CancellationToken = cancellation_1.CancellationToken;
+  var linkedMap_1 = require_linkedMap();
+  __export2(require_pipeSupport());
+  __export2(require_socketSupport());
+  var CancelNotification;
+  (function(CancelNotification2) {
+    CancelNotification2.type = new messages_1.NotificationType("$/cancelRequest");
+  })(CancelNotification || (CancelNotification = {}));
+  var ProgressNotification;
+  (function(ProgressNotification2) {
+    ProgressNotification2.type = new messages_1.NotificationType("$/progress");
+  })(ProgressNotification || (ProgressNotification = {}));
+  var ProgressType = class {
+    constructor() {
+    }
+  };
+  exports2.ProgressType = ProgressType;
+  exports2.NullLogger = Object.freeze({
+    error: () => {
+    },
+    warn: () => {
+    },
+    info: () => {
+    },
+    log: () => {
+    }
+  });
+  var Trace;
+  (function(Trace2) {
+    Trace2[Trace2["Off"] = 0] = "Off";
+    Trace2[Trace2["Messages"] = 1] = "Messages";
+    Trace2[Trace2["Verbose"] = 2] = "Verbose";
+  })(Trace = exports2.Trace || (exports2.Trace = {}));
+  (function(Trace2) {
+    function fromString(value) {
+      if (!Is.string(value)) {
+        return Trace2.Off;
+      }
+      value = value.toLowerCase();
+      switch (value) {
+        case "off":
+          return Trace2.Off;
+        case "messages":
+          return Trace2.Messages;
+        case "verbose":
+          return Trace2.Verbose;
+        default:
+          return Trace2.Off;
+      }
+    }
+    Trace2.fromString = fromString;
+    function toString(value) {
+      switch (value) {
+        case Trace2.Off:
+          return "off";
+        case Trace2.Messages:
+          return "messages";
+        case Trace2.Verbose:
+          return "verbose";
+        default:
+          return "off";
+      }
+    }
+    Trace2.toString = toString;
+  })(Trace = exports2.Trace || (exports2.Trace = {}));
+  var TraceFormat;
+  (function(TraceFormat2) {
+    TraceFormat2["Text"] = "text";
+    TraceFormat2["JSON"] = "json";
+  })(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
+  (function(TraceFormat2) {
+    function fromString(value) {
+      value = value.toLowerCase();
+      if (value === "json") {
+        return TraceFormat2.JSON;
+      } else {
+        return TraceFormat2.Text;
+      }
+    }
+    TraceFormat2.fromString = fromString;
+  })(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
+  var SetTraceNotification;
+  (function(SetTraceNotification2) {
+    SetTraceNotification2.type = new messages_1.NotificationType("$/setTraceNotification");
+  })(SetTraceNotification = exports2.SetTraceNotification || (exports2.SetTraceNotification = {}));
+  var LogTraceNotification;
+  (function(LogTraceNotification2) {
+    LogTraceNotification2.type = new messages_1.NotificationType("$/logTraceNotification");
+  })(LogTraceNotification = exports2.LogTraceNotification || (exports2.LogTraceNotification = {}));
+  var ConnectionErrors;
+  (function(ConnectionErrors2) {
+    ConnectionErrors2[ConnectionErrors2["Closed"] = 1] = "Closed";
+    ConnectionErrors2[ConnectionErrors2["Disposed"] = 2] = "Disposed";
+    ConnectionErrors2[ConnectionErrors2["AlreadyListening"] = 3] = "AlreadyListening";
+  })(ConnectionErrors = exports2.ConnectionErrors || (exports2.ConnectionErrors = {}));
+  var ConnectionError = class extends Error {
+    constructor(code, message) {
+      super(message);
+      this.code = code;
+      Object.setPrototypeOf(this, ConnectionError.prototype);
+    }
+  };
+  exports2.ConnectionError = ConnectionError;
+  var ConnectionStrategy;
+  (function(ConnectionStrategy2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && Is.func(candidate.cancelUndispatched);
+    }
+    ConnectionStrategy2.is = is;
+  })(ConnectionStrategy = exports2.ConnectionStrategy || (exports2.ConnectionStrategy = {}));
+  var ConnectionState;
+  (function(ConnectionState2) {
+    ConnectionState2[ConnectionState2["New"] = 1] = "New";
+    ConnectionState2[ConnectionState2["Listening"] = 2] = "Listening";
+    ConnectionState2[ConnectionState2["Closed"] = 3] = "Closed";
+    ConnectionState2[ConnectionState2["Disposed"] = 4] = "Disposed";
+  })(ConnectionState || (ConnectionState = {}));
+  function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
+    let sequenceNumber = 0;
+    let notificationSquenceNumber = 0;
+    let unknownResponseSquenceNumber = 0;
+    const version = "2.0";
+    let starRequestHandler = void 0;
+    let requestHandlers = Object.create(null);
+    let starNotificationHandler = void 0;
+    let notificationHandlers = Object.create(null);
+    let progressHandlers = new Map();
+    let timer;
+    let messageQueue = new linkedMap_1.LinkedMap();
+    let responsePromises = Object.create(null);
+    let requestTokens = Object.create(null);
+    let trace = Trace.Off;
+    let traceFormat = TraceFormat.Text;
+    let tracer;
+    let state = ConnectionState.New;
+    let errorEmitter = new events_1.Emitter();
+    let closeEmitter = new events_1.Emitter();
+    let unhandledNotificationEmitter = new events_1.Emitter();
+    let unhandledProgressEmitter = new events_1.Emitter();
+    let disposeEmitter = new events_1.Emitter();
+    function createRequestQueueKey(id) {
+      return "req-" + id.toString();
+    }
+    function createResponseQueueKey(id) {
+      if (id === null) {
+        return "res-unknown-" + (++unknownResponseSquenceNumber).toString();
+      } else {
+        return "res-" + id.toString();
+      }
+    }
+    function createNotificationQueueKey() {
+      return "not-" + (++notificationSquenceNumber).toString();
+    }
+    function addMessageToQueue(queue, message) {
+      if (messages_1.isRequestMessage(message)) {
+        queue.set(createRequestQueueKey(message.id), message);
+      } else if (messages_1.isResponseMessage(message)) {
+        queue.set(createResponseQueueKey(message.id), message);
+      } else {
+        queue.set(createNotificationQueueKey(), message);
+      }
+    }
+    function cancelUndispatched(_message) {
+      return void 0;
+    }
+    function isListening() {
+      return state === ConnectionState.Listening;
+    }
+    function isClosed() {
+      return state === ConnectionState.Closed;
+    }
+    function isDisposed() {
+      return state === ConnectionState.Disposed;
+    }
+    function closeHandler() {
+      if (state === ConnectionState.New || state === ConnectionState.Listening) {
+        state = ConnectionState.Closed;
+        closeEmitter.fire(void 0);
+      }
+    }
+    function readErrorHandler(error) {
+      errorEmitter.fire([error, void 0, void 0]);
+    }
+    function writeErrorHandler(data) {
+      errorEmitter.fire(data);
+    }
+    messageReader.onClose(closeHandler);
+    messageReader.onError(readErrorHandler);
+    messageWriter.onClose(closeHandler);
+    messageWriter.onError(writeErrorHandler);
+    function triggerMessageQueue() {
+      if (timer || messageQueue.size === 0) {
+        return;
+      }
+      timer = setImmediate(() => {
+        timer = void 0;
+        processMessageQueue();
+      });
+    }
+    function processMessageQueue() {
+      if (messageQueue.size === 0) {
+        return;
+      }
+      let message = messageQueue.shift();
+      try {
+        if (messages_1.isRequestMessage(message)) {
+          handleRequest(message);
+        } else if (messages_1.isNotificationMessage(message)) {
+          handleNotification(message);
+        } else if (messages_1.isResponseMessage(message)) {
+          handleResponse(message);
+        } else {
+          handleInvalidMessage(message);
+        }
+      } finally {
+        triggerMessageQueue();
+      }
+    }
+    let callback = (message) => {
+      try {
+        if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
+          let key = createRequestQueueKey(message.params.id);
+          let toCancel = messageQueue.get(key);
+          if (messages_1.isRequestMessage(toCancel)) {
+            let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
+            if (response && (response.error !== void 0 || response.result !== void 0)) {
+              messageQueue.delete(key);
+              response.id = toCancel.id;
+              traceSendingResponse(response, message.method, Date.now());
+              messageWriter.write(response);
+              return;
+            }
+          }
+        }
+        addMessageToQueue(messageQueue, message);
+      } finally {
+        triggerMessageQueue();
+      }
+    };
+    function handleRequest(requestMessage) {
+      if (isDisposed()) {
+        return;
+      }
+      function reply(resultOrError, method, startTime2) {
+        let message = {
+          jsonrpc: version,
+          id: requestMessage.id
+        };
+        if (resultOrError instanceof messages_1.ResponseError) {
+          message.error = resultOrError.toJson();
+        } else {
+          message.result = resultOrError === void 0 ? null : resultOrError;
+        }
+        traceSendingResponse(message, method, startTime2);
+        messageWriter.write(message);
+      }
+      function replyError(error, method, startTime2) {
+        let message = {
+          jsonrpc: version,
+          id: requestMessage.id,
+          error: error.toJson()
+        };
+        traceSendingResponse(message, method, startTime2);
+        messageWriter.write(message);
+      }
+      function replySuccess(result, method, startTime2) {
+        if (result === void 0) {
+          result = null;
+        }
+        let message = {
+          jsonrpc: version,
+          id: requestMessage.id,
+          result
+        };
+        traceSendingResponse(message, method, startTime2);
+        messageWriter.write(message);
+      }
+      traceReceivedRequest(requestMessage);
+      let element = requestHandlers[requestMessage.method];
+      let type;
+      let requestHandler;
+      if (element) {
+        type = element.type;
+        requestHandler = element.handler;
+      }
+      let startTime = Date.now();
+      if (requestHandler || starRequestHandler) {
+        let cancellationSource = new cancellation_1.CancellationTokenSource();
+        let tokenKey = String(requestMessage.id);
+        requestTokens[tokenKey] = cancellationSource;
+        try {
+          let handlerResult;
+          if (requestMessage.params === void 0 || type !== void 0 && type.numberOfParams === 0) {
+            handlerResult = requestHandler ? requestHandler(cancellationSource.token) : starRequestHandler(requestMessage.method, cancellationSource.token);
+          } else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
+            handlerResult = requestHandler ? requestHandler(...requestMessage.params, cancellationSource.token) : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
+          } else {
+            handlerResult = requestHandler ? requestHandler(requestMessage.params, cancellationSource.token) : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
+          }
+          let promise = handlerResult;
+          if (!handlerResult) {
+            delete requestTokens[tokenKey];
+            replySuccess(handlerResult, requestMessage.method, startTime);
+          } else if (promise.then) {
+            promise.then((resultOrError) => {
+              delete requestTokens[tokenKey];
+              reply(resultOrError, requestMessage.method, startTime);
+            }, (error) => {
+              delete requestTokens[tokenKey];
+              if (error instanceof messages_1.ResponseError) {
+                replyError(error, requestMessage.method, startTime);
+              } else if (error && Is.string(error.message)) {
+                replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
+              } else {
+                replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
+              }
+            });
+          } else {
+            delete requestTokens[tokenKey];
+            reply(handlerResult, requestMessage.method, startTime);
+          }
+        } catch (error) {
+          delete requestTokens[tokenKey];
+          if (error instanceof messages_1.ResponseError) {
+            reply(error, requestMessage.method, startTime);
+          } else if (error && Is.string(error.message)) {
+            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
+          } else {
+            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
+          }
+        }
+      } else {
+        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
+      }
+    }
+    function handleResponse(responseMessage) {
+      if (isDisposed()) {
+        return;
+      }
+      if (responseMessage.id === null) {
+        if (responseMessage.error) {
+          logger.error(`Received response message without id: Error is: 
+${JSON.stringify(responseMessage.error, void 0, 4)}`);
+        } else {
+          logger.error(`Received response message without id. No further error information provided.`);
+        }
+      } else {
+        let key = String(responseMessage.id);
+        let responsePromise = responsePromises[key];
+        traceReceivedResponse(responseMessage, responsePromise);
+        if (responsePromise) {
+          delete responsePromises[key];
+          try {
+            if (responseMessage.error) {
+              let error = responseMessage.error;
+              responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
+            } else if (responseMessage.result !== void 0) {
+              responsePromise.resolve(responseMessage.result);
+            } else {
+              throw new Error("Should never happen.");
+            }
+          } catch (error) {
+            if (error.message) {
+              logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
+            } else {
+              logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
+            }
+          }
+        }
+      }
+    }
+    function handleNotification(message) {
+      if (isDisposed()) {
+        return;
+      }
+      let type = void 0;
+      let notificationHandler;
+      if (message.method === CancelNotification.type.method) {
+        notificationHandler = (params) => {
+          let id = params.id;
+          let source = requestTokens[String(id)];
+          if (source) {
+            source.cancel();
+          }
+        };
+      } else {
+        let element = notificationHandlers[message.method];
+        if (element) {
+          notificationHandler = element.handler;
+          type = element.type;
+        }
+      }
+      if (notificationHandler || starNotificationHandler) {
+        try {
+          traceReceivedNotification(message);
+          if (message.params === void 0 || type !== void 0 && type.numberOfParams === 0) {
+            notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
+          } else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
+            notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
+          } else {
+            notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
+          }
+        } catch (error) {
+          if (error.message) {
+            logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
+          } else {
+            logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
+          }
+        }
+      } else {
+        unhandledNotificationEmitter.fire(message);
+      }
+    }
+    function handleInvalidMessage(message) {
+      if (!message) {
+        logger.error("Received empty message.");
+        return;
+      }
+      logger.error(`Received message which is neither a response nor a notification message:
+${JSON.stringify(message, null, 4)}`);
+      let responseMessage = message;
+      if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
+        let key = String(responseMessage.id);
+        let responseHandler = responsePromises[key];
+        if (responseHandler) {
+          responseHandler.reject(new Error("The received response has neither a result nor an error property."));
+        }
+      }
+    }
+    function traceSendingRequest(message) {
+      if (trace === Trace.Off || !tracer) {
+        return;
+      }
+      if (traceFormat === TraceFormat.Text) {
+        let data = void 0;
+        if (trace === Trace.Verbose && message.params) {
+          data = `Params: ${JSON.stringify(message.params, null, 4)}
+
+`;
+        }
+        tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
+      } else {
+        logLSPMessage("send-request", message);
+      }
+    }
+    function traceSendingNotification(message) {
+      if (trace === Trace.Off || !tracer) {
+        return;
+      }
+      if (traceFormat === TraceFormat.Text) {
+        let data = void 0;
+        if (trace === Trace.Verbose) {
+          if (message.params) {
+            data = `Params: ${JSON.stringify(message.params, null, 4)}
+
+`;
+          } else {
+            data = "No parameters provided.\n\n";
+          }
+        }
+        tracer.log(`Sending notification '${message.method}'.`, data);
+      } else {
+        logLSPMessage("send-notification", message);
+      }
+    }
+    function traceSendingResponse(message, method, startTime) {
+      if (trace === Trace.Off || !tracer) {
+        return;
+      }
+      if (traceFormat === TraceFormat.Text) {
+        let data = void 0;
+        if (trace === Trace.Verbose) {
+          if (message.error && message.error.data) {
+            data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
+
+`;
+          } else {
+            if (message.result) {
+              data = `Result: ${JSON.stringify(message.result, null, 4)}
+
+`;
+            } else if (message.error === void 0) {
+              data = "No result returned.\n\n";
+            }
+          }
+        }
+        tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
+      } else {
+        logLSPMessage("send-response", message);
+      }
+    }
+    function traceReceivedRequest(message) {
+      if (trace === Trace.Off || !tracer) {
+        return;
+      }
+      if (traceFormat === TraceFormat.Text) {
+        let data = void 0;
+        if (trace === Trace.Verbose && message.params) {
+          data = `Params: ${JSON.stringify(message.params, null, 4)}
+
+`;
+        }
+        tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
+      } else {
+        logLSPMessage("receive-request", message);
+      }
+    }
+    function traceReceivedNotification(message) {
+      if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
+        return;
+      }
+      if (traceFormat === TraceFormat.Text) {
+        let data = void 0;
+        if (trace === Trace.Verbose) {
+          if (message.params) {
+            data = `Params: ${JSON.stringify(message.params, null, 4)}
+
+`;
+          } else {
+            data = "No parameters provided.\n\n";
+          }
+        }
+        tracer.log(`Received notification '${message.method}'.`, data);
+      } else {
+        logLSPMessage("receive-notification", message);
+      }
+    }
+    function traceReceivedResponse(message, responsePromise) {
+      if (trace === Trace.Off || !tracer) {
+        return;
+      }
+      if (traceFormat === TraceFormat.Text) {
+        let data = void 0;
+        if (trace === Trace.Verbose) {
+          if (message.error && message.error.data) {
+            data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
+
+`;
+          } else {
+            if (message.result) {
+              data = `Result: ${JSON.stringify(message.result, null, 4)}
+
+`;
+            } else if (message.error === void 0) {
+              data = "No result returned.\n\n";
+            }
+          }
+        }
+        if (responsePromise) {
+          let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
+          tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
+        } else {
+          tracer.log(`Received response ${message.id} without active response promise.`, data);
+        }
+      } else {
+        logLSPMessage("receive-response", message);
+      }
+    }
+    function logLSPMessage(type, message) {
+      if (!tracer || trace === Trace.Off) {
+        return;
+      }
+      const lspMessage = {
+        isLSPMessage: true,
+        type,
+        message,
+        timestamp: Date.now()
+      };
+      tracer.log(lspMessage);
+    }
+    function throwIfClosedOrDisposed() {
+      if (isClosed()) {
+        throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
+      }
+      if (isDisposed()) {
+        throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
+      }
+    }
+    function throwIfListening() {
+      if (isListening()) {
+        throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
+      }
+    }
+    function throwIfNotListening() {
+      if (!isListening()) {
+        throw new Error("Call listen() first.");
+      }
+    }
+    function undefinedToNull(param) {
+      if (param === void 0) {
+        return null;
+      } else {
+        return param;
+      }
+    }
+    function computeMessageParams(type, params) {
+      let result;
+      let numberOfParams = type.numberOfParams;
+      switch (numberOfParams) {
+        case 0:
+          result = null;
+          break;
+        case 1:
+          result = undefinedToNull(params[0]);
+          break;
+        default:
+          result = [];
+          for (let i = 0; i < params.length && i < numberOfParams; i++) {
+            result.push(undefinedToNull(params[i]));
+          }
+          if (params.length < numberOfParams) {
+            for (let i = params.length; i < numberOfParams; i++) {
+              result.push(null);
+            }
+          }
+          break;
+      }
+      return result;
+    }
+    let connection = {
+      sendNotification: (type, ...params) => {
+        throwIfClosedOrDisposed();
+        let method;
+        let messageParams;
+        if (Is.string(type)) {
+          method = type;
+          switch (params.length) {
+            case 0:
+              messageParams = null;
+              break;
+            case 1:
+              messageParams = params[0];
+              break;
+            default:
+              messageParams = params;
+              break;
+          }
+        } else {
+          method = type.method;
+          messageParams = computeMessageParams(type, params);
+        }
+        let notificationMessage = {
+          jsonrpc: version,
+          method,
+          params: messageParams
+        };
+        traceSendingNotification(notificationMessage);
+        messageWriter.write(notificationMessage);
+      },
+      onNotification: (type, handler) => {
+        throwIfClosedOrDisposed();
+        if (Is.func(type)) {
+          starNotificationHandler = type;
+        } else if (handler) {
+          if (Is.string(type)) {
+            notificationHandlers[type] = {type: void 0, handler};
+          } else {
+            notificationHandlers[type.method] = {type, handler};
+          }
+        }
+      },
+      onProgress: (_type, token, handler) => {
+        if (progressHandlers.has(token)) {
+          throw new Error(`Progress handler for token ${token} already registered`);
+        }
+        progressHandlers.set(token, handler);
+        return {
+          dispose: () => {
+            progressHandlers.delete(token);
+          }
+        };
+      },
+      sendProgress: (_type, token, value) => {
+        connection.sendNotification(ProgressNotification.type, {token, value});
+      },
+      onUnhandledProgress: unhandledProgressEmitter.event,
+      sendRequest: (type, ...params) => {
+        throwIfClosedOrDisposed();
+        throwIfNotListening();
+        let method;
+        let messageParams;
+        let token = void 0;
+        if (Is.string(type)) {
+          method = type;
+          switch (params.length) {
+            case 0:
+              messageParams = null;
+              break;
+            case 1:
+              if (cancellation_1.CancellationToken.is(params[0])) {
+                messageParams = null;
+                token = params[0];
+              } else {
+                messageParams = undefinedToNull(params[0]);
+              }
+              break;
+            default:
+              const last = params.length - 1;
+              if (cancellation_1.CancellationToken.is(params[last])) {
+                token = params[last];
+                if (params.length === 2) {
+                  messageParams = undefinedToNull(params[0]);
+                } else {
+                  messageParams = params.slice(0, last).map((value) => undefinedToNull(value));
+                }
+              } else {
+                messageParams = params.map((value) => undefinedToNull(value));
+              }
+              break;
+          }
+        } else {
+          method = type.method;
+          messageParams = computeMessageParams(type, params);
+          let numberOfParams = type.numberOfParams;
+          token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : void 0;
+        }
+        let id = sequenceNumber++;
+        let result = new Promise((resolve, reject) => {
+          let requestMessage = {
+            jsonrpc: version,
+            id,
+            method,
+            params: messageParams
+          };
+          let responsePromise = {method, timerStart: Date.now(), resolve, reject};
+          traceSendingRequest(requestMessage);
+          try {
+            messageWriter.write(requestMessage);
+          } catch (e) {
+            responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : "Unknown reason"));
+            responsePromise = null;
+          }
+          if (responsePromise) {
+            responsePromises[String(id)] = responsePromise;
+          }
+        });
+        if (token) {
+          token.onCancellationRequested(() => {
+            connection.sendNotification(CancelNotification.type, {id});
+          });
+        }
+        return result;
+      },
+      onRequest: (type, handler) => {
+        throwIfClosedOrDisposed();
+        if (Is.func(type)) {
+          starRequestHandler = type;
+        } else if (handler) {
+          if (Is.string(type)) {
+            requestHandlers[type] = {type: void 0, handler};
+          } else {
+            requestHandlers[type.method] = {type, handler};
+          }
+        }
+      },
+      trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
+        let _sendNotification = false;
+        let _traceFormat = TraceFormat.Text;
+        if (sendNotificationOrTraceOptions !== void 0) {
+          if (Is.boolean(sendNotificationOrTraceOptions)) {
+            _sendNotification = sendNotificationOrTraceOptions;
+          } else {
+            _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
+            _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
+          }
+        }
+        trace = _value;
+        traceFormat = _traceFormat;
+        if (trace === Trace.Off) {
+          tracer = void 0;
+        } else {
+          tracer = _tracer;
+        }
+        if (_sendNotification && !isClosed() && !isDisposed()) {
+          connection.sendNotification(SetTraceNotification.type, {value: Trace.toString(_value)});
+        }
+      },
+      onError: errorEmitter.event,
+      onClose: closeEmitter.event,
+      onUnhandledNotification: unhandledNotificationEmitter.event,
+      onDispose: disposeEmitter.event,
+      dispose: () => {
+        if (isDisposed()) {
+          return;
+        }
+        state = ConnectionState.Disposed;
+        disposeEmitter.fire(void 0);
+        let error = new Error("Connection got disposed.");
+        Object.keys(responsePromises).forEach((key) => {
+          responsePromises[key].reject(error);
+        });
+        responsePromises = Object.create(null);
+        requestTokens = Object.create(null);
+        messageQueue = new linkedMap_1.LinkedMap();
+        if (Is.func(messageWriter.dispose)) {
+          messageWriter.dispose();
+        }
+        if (Is.func(messageReader.dispose)) {
+          messageReader.dispose();
+        }
+      },
+      listen: () => {
+        throwIfClosedOrDisposed();
+        throwIfListening();
+        state = ConnectionState.Listening;
+        messageReader.listen(callback);
+      },
+      inspect: () => {
+        console.log("inspect");
+      }
+    };
+    connection.onNotification(LogTraceNotification.type, (params) => {
+      if (trace === Trace.Off || !tracer) {
+        return;
+      }
+      tracer.log(params.message, trace === Trace.Verbose ? params.verbose : void 0);
+    });
+    connection.onNotification(ProgressNotification.type, (params) => {
+      const handler = progressHandlers.get(params.token);
+      if (handler) {
+        handler(params.value);
+      } else {
+        unhandledProgressEmitter.fire(params);
+      }
+    });
+    return connection;
+  }
+  function isMessageReader(value) {
+    return value.listen !== void 0 && value.read === void 0;
+  }
+  function isMessageWriter(value) {
+    return value.write !== void 0 && value.end === void 0;
+  }
+  function createMessageConnection(input, output, logger, strategy) {
+    if (!logger) {
+      logger = exports2.NullLogger;
+    }
+    let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
+    let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
+    return _createMessageConnection(reader, writer, logger, strategy);
+  }
+  exports2.createMessageConnection = createMessageConnection;
+});
+
+// node_modules/vscode-languageserver-types/lib/umd/main.js
+var require_main2 = __commonJS((exports2, module2) => {
+  (function(factory) {
+    if (typeof module2 === "object" && typeof module2.exports === "object") {
+      var v = factory(require, exports2);
+      if (v !== void 0)
+        module2.exports = v;
+    } else if (typeof define === "function" && define.amd) {
+      define(["require", "exports"], factory);
+    }
+  })(function(require2, exports3) {
+    "use strict";
+    Object.defineProperty(exports3, "__esModule", {value: true});
+    var Position;
+    (function(Position2) {
+      function create(line, character) {
+        return {line, character};
+      }
+      Position2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);
+      }
+      Position2.is = is;
+    })(Position = exports3.Position || (exports3.Position = {}));
+    var Range;
+    (function(Range2) {
+      function create(one, two, three, four) {
+        if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {
+          return {start: Position.create(one, two), end: Position.create(three, four)};
+        } else if (Position.is(one) && Position.is(two)) {
+          return {start: one, end: two};
+        } else {
+          throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
+        }
+      }
+      Range2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
+      }
+      Range2.is = is;
+    })(Range = exports3.Range || (exports3.Range = {}));
+    var Location;
+    (function(Location2) {
+      function create(uri, range) {
+        return {uri, range};
+      }
+      Location2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
+      }
+      Location2.is = is;
+    })(Location = exports3.Location || (exports3.Location = {}));
+    var LocationLink;
+    (function(LocationLink2) {
+      function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
+        return {targetUri, targetRange, targetSelectionRange, originSelectionRange};
+      }
+      LocationLink2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange)) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
+      }
+      LocationLink2.is = is;
+    })(LocationLink = exports3.LocationLink || (exports3.LocationLink = {}));
+    var Color;
+    (function(Color2) {
+      function create(red, green, blue, alpha) {
+        return {
+          red,
+          green,
+          blue,
+          alpha
+        };
+      }
+      Color2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.number(candidate.red) && Is.number(candidate.green) && Is.number(candidate.blue) && Is.number(candidate.alpha);
+      }
+      Color2.is = is;
+    })(Color = exports3.Color || (exports3.Color = {}));
+    var ColorInformation;
+    (function(ColorInformation2) {
+      function create(range, color) {
+        return {
+          range,
+          color
+        };
+      }
+      ColorInformation2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Range.is(candidate.range) && Color.is(candidate.color);
+      }
+      ColorInformation2.is = is;
+    })(ColorInformation = exports3.ColorInformation || (exports3.ColorInformation = {}));
+    var ColorPresentation;
+    (function(ColorPresentation2) {
+      function create(label, textEdit, additionalTextEdits) {
+        return {
+          label,
+          textEdit,
+          additionalTextEdits
+        };
+      }
+      ColorPresentation2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
+      }
+      ColorPresentation2.is = is;
+    })(ColorPresentation = exports3.ColorPresentation || (exports3.ColorPresentation = {}));
+    var FoldingRangeKind;
+    (function(FoldingRangeKind2) {
+      FoldingRangeKind2["Comment"] = "comment";
+      FoldingRangeKind2["Imports"] = "imports";
+      FoldingRangeKind2["Region"] = "region";
+    })(FoldingRangeKind = exports3.FoldingRangeKind || (exports3.FoldingRangeKind = {}));
+    var FoldingRange;
+    (function(FoldingRange2) {
+      function create(startLine, endLine, startCharacter, endCharacter, kind) {
+        var result = {
+          startLine,
+          endLine
+        };
+        if (Is.defined(startCharacter)) {
+          result.startCharacter = startCharacter;
+        }
+        if (Is.defined(endCharacter)) {
+          result.endCharacter = endCharacter;
+        }
+        if (Is.defined(kind)) {
+          result.kind = kind;
+        }
+        return result;
+      }
+      FoldingRange2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.number(candidate.startLine) && Is.number(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
+      }
+      FoldingRange2.is = is;
+    })(FoldingRange = exports3.FoldingRange || (exports3.FoldingRange = {}));
+    var DiagnosticRelatedInformation;
+    (function(DiagnosticRelatedInformation2) {
+      function create(location, message) {
+        return {
+          location,
+          message
+        };
+      }
+      DiagnosticRelatedInformation2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
+      }
+      DiagnosticRelatedInformation2.is = is;
+    })(DiagnosticRelatedInformation = exports3.DiagnosticRelatedInformation || (exports3.DiagnosticRelatedInformation = {}));
+    var DiagnosticSeverity;
+    (function(DiagnosticSeverity2) {
+      DiagnosticSeverity2.Error = 1;
+      DiagnosticSeverity2.Warning = 2;
+      DiagnosticSeverity2.Information = 3;
+      DiagnosticSeverity2.Hint = 4;
+    })(DiagnosticSeverity = exports3.DiagnosticSeverity || (exports3.DiagnosticSeverity = {}));
+    var DiagnosticTag;
+    (function(DiagnosticTag2) {
+      DiagnosticTag2.Unnecessary = 1;
+      DiagnosticTag2.Deprecated = 2;
+    })(DiagnosticTag = exports3.DiagnosticTag || (exports3.DiagnosticTag = {}));
+    var Diagnostic;
+    (function(Diagnostic2) {
+      function create(range, message, severity, code, source, relatedInformation) {
+        var result = {range, message};
+        if (Is.defined(severity)) {
+          result.severity = severity;
+        }
+        if (Is.defined(code)) {
+          result.code = code;
+        }
+        if (Is.defined(source)) {
+          result.source = source;
+        }
+        if (Is.defined(relatedInformation)) {
+          result.relatedInformation = relatedInformation;
+        }
+        return result;
+      }
+      Diagnostic2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Range.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
+      }
+      Diagnostic2.is = is;
+    })(Diagnostic = exports3.Diagnostic || (exports3.Diagnostic = {}));
+    var Command;
+    (function(Command2) {
+      function create(title, command) {
+        var args = [];
+        for (var _i = 2; _i < arguments.length; _i++) {
+          args[_i - 2] = arguments[_i];
+        }
+        var result = {title, command};
+        if (Is.defined(args) && args.length > 0) {
+          result.arguments = args;
+        }
+        return result;
+      }
+      Command2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
+      }
+      Command2.is = is;
+    })(Command = exports3.Command || (exports3.Command = {}));
+    var TextEdit;
+    (function(TextEdit2) {
+      function replace(range, newText) {
+        return {range, newText};
+      }
+      TextEdit2.replace = replace;
+      function insert(position, newText) {
+        return {range: {start: position, end: position}, newText};
+      }
+      TextEdit2.insert = insert;
+      function del(range) {
+        return {range, newText: ""};
+      }
+      TextEdit2.del = del;
+      function is(value) {
+        var candidate = value;
+        return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);
+      }
+      TextEdit2.is = is;
+    })(TextEdit = exports3.TextEdit || (exports3.TextEdit = {}));
+    var TextDocumentEdit;
+    (function(TextDocumentEdit2) {
+      function create(textDocument, edits) {
+        return {textDocument, edits};
+      }
+      TextDocumentEdit2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && VersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);
+      }
+      TextDocumentEdit2.is = is;
+    })(TextDocumentEdit = exports3.TextDocumentEdit || (exports3.TextDocumentEdit = {}));
+    var CreateFile;
+    (function(CreateFile2) {
+      function create(uri, options) {
+        var result = {
+          kind: "create",
+          uri
+        };
+        if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
+          result.options = options;
+        }
+        return result;
+      }
+      CreateFile2.create = create;
+      function is(value) {
+        var candidate = value;
+        return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists)));
+      }
+      CreateFile2.is = is;
+    })(CreateFile = exports3.CreateFile || (exports3.CreateFile = {}));
+    var RenameFile;
+    (function(RenameFile2) {
+      function create(oldUri, newUri, options) {
+        var result = {
+          kind: "rename",
+          oldUri,
+          newUri
+        };
+        if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
+          result.options = options;
+        }
+        return result;
+      }
+      RenameFile2.create = create;
+      function is(value) {
+        var candidate = value;
+        return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists)));
+      }
+      RenameFile2.is = is;
+    })(RenameFile = exports3.RenameFile || (exports3.RenameFile = {}));
+    var DeleteFile;
+    (function(DeleteFile2) {
+      function create(uri, options) {
+        var result = {
+          kind: "delete",
+          uri
+        };
+        if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
+          result.options = options;
+        }
+        return result;
+      }
+      DeleteFile2.create = create;
+      function is(value) {
+        var candidate = value;
+        return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists)));
+      }
+      DeleteFile2.is = is;
+    })(DeleteFile = exports3.DeleteFile || (exports3.DeleteFile = {}));
+    var WorkspaceEdit;
+    (function(WorkspaceEdit2) {
+      function is(value) {
+        var candidate = value;
+        return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every(function(change) {
+          if (Is.string(change.kind)) {
+            return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
+          } else {
+            return TextDocumentEdit.is(change);
+          }
+        }));
+      }
+      WorkspaceEdit2.is = is;
+    })(WorkspaceEdit = exports3.WorkspaceEdit || (exports3.WorkspaceEdit = {}));
+    var TextEditChangeImpl = function() {
+      function TextEditChangeImpl2(edits) {
+        this.edits = edits;
+      }
+      TextEditChangeImpl2.prototype.insert = function(position, newText) {
+        this.edits.push(TextEdit.insert(position, newText));
+      };
+      TextEditChangeImpl2.prototype.replace = function(range, newText) {
+        this.edits.push(TextEdit.replace(range, newText));
+      };
+      TextEditChangeImpl2.prototype.delete = function(range) {
+        this.edits.push(TextEdit.del(range));
+      };
+      TextEditChangeImpl2.prototype.add = function(edit) {
+        this.edits.push(edit);
+      };
+      TextEditChangeImpl2.prototype.all = function() {
+        return this.edits;
+      };
+      TextEditChangeImpl2.prototype.clear = function() {
+        this.edits.splice(0, this.edits.length);
+      };
+      return TextEditChangeImpl2;
+    }();
+    var WorkspaceChange = function() {
+      function WorkspaceChange2(workspaceEdit) {
+        var _this = this;
+        this._textEditChanges = Object.create(null);
+        if (workspaceEdit) {
+          this._workspaceEdit = workspaceEdit;
+          if (workspaceEdit.documentChanges) {
+            workspaceEdit.documentChanges.forEach(function(change) {
+              if (TextDocumentEdit.is(change)) {
+                var textEditChange = new TextEditChangeImpl(change.edits);
+                _this._textEditChanges[change.textDocument.uri] = textEditChange;
+              }
+            });
+          } else if (workspaceEdit.changes) {
+            Object.keys(workspaceEdit.changes).forEach(function(key) {
+              var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
+              _this._textEditChanges[key] = textEditChange;
+            });
+          }
+        }
+      }
+      Object.defineProperty(WorkspaceChange2.prototype, "edit", {
+        get: function() {
+          return this._workspaceEdit;
+        },
+        enumerable: true,
+        configurable: true
+      });
+      WorkspaceChange2.prototype.getTextEditChange = function(key) {
+        if (VersionedTextDocumentIdentifier.is(key)) {
+          if (!this._workspaceEdit) {
+            this._workspaceEdit = {
+              documentChanges: []
+            };
+          }
+          if (!this._workspaceEdit.documentChanges) {
+            throw new Error("Workspace edit is not configured for document changes.");
+          }
+          var textDocument = key;
+          var result = this._textEditChanges[textDocument.uri];
+          if (!result) {
+            var edits = [];
+            var textDocumentEdit = {
+              textDocument,
+              edits
+            };
+            this._workspaceEdit.documentChanges.push(textDocumentEdit);
+            result = new TextEditChangeImpl(edits);
+            this._textEditChanges[textDocument.uri] = result;
+          }
+          return result;
+        } else {
+          if (!this._workspaceEdit) {
+            this._workspaceEdit = {
+              changes: Object.create(null)
+            };
+          }
+          if (!this._workspaceEdit.changes) {
+            throw new Error("Workspace edit is not configured for normal text edit changes.");
+          }
+          var result = this._textEditChanges[key];
+          if (!result) {
+            var edits = [];
+            this._workspaceEdit.changes[key] = edits;
+            result = new TextEditChangeImpl(edits);
+            this._textEditChanges[key] = result;
+          }
+          return result;
+        }
+      };
+      WorkspaceChange2.prototype.createFile = function(uri, options) {
+        this.checkDocumentChanges();
+        this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
+      };
+      WorkspaceChange2.prototype.renameFile = function(oldUri, newUri, options) {
+        this.checkDocumentChanges();
+        this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
+      };
+      WorkspaceChange2.prototype.deleteFile = function(uri, options) {
+        this.checkDocumentChanges();
+        this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
+      };
+      WorkspaceChange2.prototype.checkDocumentChanges = function() {
+        if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
+          throw new Error("Workspace edit is not configured for document changes.");
+        }
+      };
+      return WorkspaceChange2;
+    }();
+    exports3.WorkspaceChange = WorkspaceChange;
+    var TextDocumentIdentifier;
+    (function(TextDocumentIdentifier2) {
+      function create(uri) {
+        return {uri};
+      }
+      TextDocumentIdentifier2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.string(candidate.uri);
+      }
+      TextDocumentIdentifier2.is = is;
+    })(TextDocumentIdentifier = exports3.TextDocumentIdentifier || (exports3.TextDocumentIdentifier = {}));
+    var VersionedTextDocumentIdentifier;
+    (function(VersionedTextDocumentIdentifier2) {
+      function create(uri, version) {
+        return {uri, version};
+      }
+      VersionedTextDocumentIdentifier2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));
+      }
+      VersionedTextDocumentIdentifier2.is = is;
+    })(VersionedTextDocumentIdentifier = exports3.VersionedTextDocumentIdentifier || (exports3.VersionedTextDocumentIdentifier = {}));
+    var TextDocumentItem;
+    (function(TextDocumentItem2) {
+      function create(uri, languageId, version, text) {
+        return {uri, languageId, version, text};
+      }
+      TextDocumentItem2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);
+      }
+      TextDocumentItem2.is = is;
+    })(TextDocumentItem = exports3.TextDocumentItem || (exports3.TextDocumentItem = {}));
+    var MarkupKind;
+    (function(MarkupKind2) {
+      MarkupKind2.PlainText = "plaintext";
+      MarkupKind2.Markdown = "markdown";
+    })(MarkupKind = exports3.MarkupKind || (exports3.MarkupKind = {}));
+    (function(MarkupKind2) {
+      function is(value) {
+        var candidate = value;
+        return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;
+      }
+      MarkupKind2.is = is;
+    })(MarkupKind = exports3.MarkupKind || (exports3.MarkupKind = {}));
+    var MarkupContent;
+    (function(MarkupContent2) {
+      function is(value) {
+        var candidate = value;
+        return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
+      }
+      MarkupContent2.is = is;
+    })(MarkupContent = exports3.MarkupContent || (exports3.MarkupContent = {}));
+    var CompletionItemKind;
+    (function(CompletionItemKind2) {
+      CompletionItemKind2.Text = 1;
+      CompletionItemKind2.Method = 2;
+      CompletionItemKind2.Function = 3;
+      CompletionItemKind2.Constructor = 4;
+      CompletionItemKind2.Field = 5;
+      CompletionItemKind2.Variable = 6;
+      CompletionItemKind2.Class = 7;
+      CompletionItemKind2.Interface = 8;
+      CompletionItemKind2.Module = 9;
+      CompletionItemKind2.Property = 10;
+      CompletionItemKind2.Unit = 11;
+      CompletionItemKind2.Value = 12;
+      CompletionItemKind2.Enum = 13;
+      CompletionItemKind2.Keyword = 14;
+      CompletionItemKind2.Snippet = 15;
+      CompletionItemKind2.Color = 16;
+      CompletionItemKind2.File = 17;
+      CompletionItemKind2.Reference = 18;
+      CompletionItemKind2.Folder = 19;
+      CompletionItemKind2.EnumMember = 20;
+      CompletionItemKind2.Constant = 21;
+      CompletionItemKind2.Struct = 22;
+      CompletionItemKind2.Event = 23;
+      CompletionItemKind2.Operator = 24;
+      CompletionItemKind2.TypeParameter = 25;
+    })(CompletionItemKind = exports3.CompletionItemKind || (exports3.CompletionItemKind = {}));
+    var InsertTextFormat;
+    (function(InsertTextFormat2) {
+      InsertTextFormat2.PlainText = 1;
+      InsertTextFormat2.Snippet = 2;
+    })(InsertTextFormat = exports3.InsertTextFormat || (exports3.InsertTextFormat = {}));
+    var CompletionItemTag;
+    (function(CompletionItemTag2) {
+      CompletionItemTag2.Deprecated = 1;
+    })(CompletionItemTag = exports3.CompletionItemTag || (exports3.CompletionItemTag = {}));
+    var CompletionItem;
+    (function(CompletionItem2) {
+      function create(label) {
+        return {label};
+      }
+      CompletionItem2.create = create;
+    })(CompletionItem = exports3.CompletionItem || (exports3.CompletionItem = {}));
+    var CompletionList;
+    (function(CompletionList2) {
+      function create(items, isIncomplete) {
+        return {items: items ? items : [], isIncomplete: !!isIncomplete};
+      }
+      CompletionList2.create = create;
+    })(CompletionList = exports3.CompletionList || (exports3.CompletionList = {}));
+    var MarkedString;
+    (function(MarkedString2) {
+      function fromPlainText(plainText) {
+        return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
+      }
+      MarkedString2.fromPlainText = fromPlainText;
+      function is(value) {
+        var candidate = value;
+        return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);
+      }
+      MarkedString2.is = is;
+    })(MarkedString = exports3.MarkedString || (exports3.MarkedString = {}));
+    var Hover;
+    (function(Hover2) {
+      function is(value) {
+        var candidate = value;
+        return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
+      }
+      Hover2.is = is;
+    })(Hover = exports3.Hover || (exports3.Hover = {}));
+    var ParameterInformation;
+    (function(ParameterInformation2) {
+      function create(label, documentation) {
+        return documentation ? {label, documentation} : {label};
+      }
+      ParameterInformation2.create = create;
+    })(ParameterInformation = exports3.ParameterInformation || (exports3.ParameterInformation = {}));
+    var SignatureInformation;
+    (function(SignatureInformation2) {
+      function create(label, documentation) {
+        var parameters = [];
+        for (var _i = 2; _i < arguments.length; _i++) {
+          parameters[_i - 2] = arguments[_i];
+        }
+        var result = {label};
+        if (Is.defined(documentation)) {
+          result.documentation = documentation;
+        }
+        if (Is.defined(parameters)) {
+          result.parameters = parameters;
+        } else {
+          result.parameters = [];
+        }
+        return result;
+      }
+      SignatureInformation2.create = create;
+    })(SignatureInformation = exports3.SignatureInformation || (exports3.SignatureInformation = {}));
+    var DocumentHighlightKind;
+    (function(DocumentHighlightKind2) {
+      DocumentHighlightKind2.Text = 1;
+      DocumentHighlightKind2.Read = 2;
+      DocumentHighlightKind2.Write = 3;
+    })(DocumentHighlightKind = exports3.DocumentHighlightKind || (exports3.DocumentHighlightKind = {}));
+    var DocumentHighlight;
+    (function(DocumentHighlight2) {
+      function create(range, kind) {
+        var result = {range};
+        if (Is.number(kind)) {
+          result.kind = kind;
+        }
+        return result;
+      }
+      DocumentHighlight2.create = create;
+    })(DocumentHighlight = exports3.DocumentHighlight || (exports3.DocumentHighlight = {}));
+    var SymbolKind;
+    (function(SymbolKind2) {
+      SymbolKind2.File = 1;
+      SymbolKind2.Module = 2;
+      SymbolKind2.Namespace = 3;
+      SymbolKind2.Package = 4;
+      SymbolKind2.Class = 5;
+      SymbolKind2.Method = 6;
+      SymbolKind2.Property = 7;
+      SymbolKind2.Field = 8;
+      SymbolKind2.Constructor = 9;
+      SymbolKind2.Enum = 10;
+      SymbolKind2.Interface = 11;
+      SymbolKind2.Function = 12;
+      SymbolKind2.Variable = 13;
+      SymbolKind2.Constant = 14;
+      SymbolKind2.String = 15;
+      SymbolKind2.Number = 16;
+      SymbolKind2.Boolean = 17;
+      SymbolKind2.Array = 18;
+      SymbolKind2.Object = 19;
+      SymbolKind2.Key = 20;
+      SymbolKind2.Null = 21;
+      SymbolKind2.EnumMember = 22;
+      SymbolKind2.Struct = 23;
+      SymbolKind2.Event = 24;
+      SymbolKind2.Operator = 25;
+      SymbolKind2.TypeParameter = 26;
+    })(SymbolKind = exports3.SymbolKind || (exports3.SymbolKind = {}));
+    var SymbolTag;
+    (function(SymbolTag2) {
+      SymbolTag2.Deprecated = 1;
+    })(SymbolTag = exports3.SymbolTag || (exports3.SymbolTag = {}));
+    var SymbolInformation;
+    (function(SymbolInformation2) {
+      function create(name, kind, range, uri, containerName) {
+        var result = {
+          name,
+          kind,
+          location: {uri, range}
+        };
+        if (containerName) {
+          result.containerName = containerName;
+        }
+        return result;
+      }
+      SymbolInformation2.create = create;
+    })(SymbolInformation = exports3.SymbolInformation || (exports3.SymbolInformation = {}));
+    var DocumentSymbol;
+    (function(DocumentSymbol2) {
+      function create(name, detail, kind, range, selectionRange, children) {
+        var result = {
+          name,
+          detail,
+          kind,
+          range,
+          selectionRange
+        };
+        if (children !== void 0) {
+          result.children = children;
+        }
+        return result;
+      }
+      DocumentSymbol2.create = create;
+      function is(value) {
+        var candidate = value;
+        return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children));
+      }
+      DocumentSymbol2.is = is;
+    })(DocumentSymbol = exports3.DocumentSymbol || (exports3.DocumentSymbol = {}));
+    var CodeActionKind;
+    (function(CodeActionKind2) {
+      CodeActionKind2.Empty = "";
+      CodeActionKind2.QuickFix = "quickfix";
+      CodeActionKind2.Refactor = "refactor";
+      CodeActionKind2.RefactorExtract = "refactor.extract";
+      CodeActionKind2.RefactorInline = "refactor.inline";
+      CodeActionKind2.RefactorRewrite = "refactor.rewrite";
+      CodeActionKind2.Source = "source";
+      CodeActionKind2.SourceOrganizeImports = "source.organizeImports";
+      CodeActionKind2.SourceFixAll = "source.fixAll";
+    })(CodeActionKind = exports3.CodeActionKind || (exports3.CodeActionKind = {}));
+    var CodeActionContext;
+    (function(CodeActionContext2) {
+      function create(diagnostics, only) {
+        var result = {diagnostics};
+        if (only !== void 0 && only !== null) {
+          result.only = only;
+        }
+        return result;
+      }
+      CodeActionContext2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
+      }
+      CodeActionContext2.is = is;
+    })(CodeActionContext = exports3.CodeActionContext || (exports3.CodeActionContext = {}));
+    var CodeAction;
+    (function(CodeAction2) {
+      function create(title, commandOrEdit, kind) {
+        var result = {title};
+        if (Command.is(commandOrEdit)) {
+          result.command = commandOrEdit;
+        } else {
+          result.edit = commandOrEdit;
+        }
+        if (kind !== void 0) {
+          result.kind = kind;
+        }
+        return result;
+      }
+      CodeAction2.create = create;
+      function is(value) {
+        var candidate = value;
+        return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
+      }
+      CodeAction2.is = is;
+    })(CodeAction = exports3.CodeAction || (exports3.CodeAction = {}));
+    var CodeLens;
+    (function(CodeLens2) {
+      function create(range, data) {
+        var result = {range};
+        if (Is.defined(data)) {
+          result.data = data;
+        }
+        return result;
+      }
+      CodeLens2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
+      }
+      CodeLens2.is = is;
+    })(CodeLens = exports3.CodeLens || (exports3.CodeLens = {}));
+    var FormattingOptions;
+    (function(FormattingOptions2) {
+      function create(tabSize, insertSpaces) {
+        return {tabSize, insertSpaces};
+      }
+      FormattingOptions2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
+      }
+      FormattingOptions2.is = is;
+    })(FormattingOptions = exports3.FormattingOptions || (exports3.FormattingOptions = {}));
+    var DocumentLink;
+    (function(DocumentLink2) {
+      function create(range, target, data) {
+        return {range, target, data};
+      }
+      DocumentLink2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
+      }
+      DocumentLink2.is = is;
+    })(DocumentLink = exports3.DocumentLink || (exports3.DocumentLink = {}));
+    var SelectionRange;
+    (function(SelectionRange2) {
+      function create(range, parent) {
+        return {range, parent};
+      }
+      SelectionRange2.create = create;
+      function is(value) {
+        var candidate = value;
+        return candidate !== void 0 && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));
+      }
+      SelectionRange2.is = is;
+    })(SelectionRange = exports3.SelectionRange || (exports3.SelectionRange = {}));
+    exports3.EOL = ["\n", "\r\n", "\r"];
+    var TextDocument;
+    (function(TextDocument2) {
+      function create(uri, languageId, version, content) {
+        return new FullTextDocument(uri, languageId, version, content);
+      }
+      TextDocument2.create = create;
+      function is(value) {
+        var candidate = value;
+        return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
+      }
+      TextDocument2.is = is;
+      function applyEdits(document, edits) {
+        var text = document.getText();
+        var sortedEdits = mergeSort(edits, function(a, b) {
+          var diff = a.range.start.line - b.range.start.line;
+          if (diff === 0) {
+            return a.range.start.character - b.range.start.character;
+          }
+          return diff;
+        });
+        var lastModifiedOffset = text.length;
+        for (var i = sortedEdits.length - 1; i >= 0; i--) {
+          var e = sortedEdits[i];
+          var startOffset = document.offsetAt(e.range.start);
+          var endOffset = document.offsetAt(e.range.end);
+          if (endOffset <= lastModifiedOffset) {
+            text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
+          } else {
+            throw new Error("Overlapping edit");
+          }
+          lastModifiedOffset = startOffset;
+        }
+        return text;
+      }
+      TextDocument2.applyEdits = applyEdits;
+      function mergeSort(data, compare) {
+        if (data.length <= 1) {
+          return data;
+        }
+        var p = data.length / 2 | 0;
+        var left = data.slice(0, p);
+        var right = data.slice(p);
+        mergeSort(left, compare);
+        mergeSort(right, compare);
+        var leftIdx = 0;
+        var rightIdx = 0;
+        var i = 0;
+        while (leftIdx < left.length && rightIdx < right.length) {
+          var ret = compare(left[leftIdx], right[rightIdx]);
+          if (ret <= 0) {
+            data[i++] = left[leftIdx++];
+          } else {
+            data[i++] = right[rightIdx++];
+          }
+        }
+        while (leftIdx < left.length) {
+          data[i++] = left[leftIdx++];
+        }
+        while (rightIdx < right.length) {
+          data[i++] = right[rightIdx++];
+        }
+        return data;
+      }
+    })(TextDocument = exports3.TextDocument || (exports3.TextDocument = {}));
+    var FullTextDocument = function() {
+      function FullTextDocument2(uri, languageId, version, content) {
+        this._uri = uri;
+        this._languageId = languageId;
+        this._version = version;
+        this._content = content;
+        this._lineOffsets = void 0;
+      }
+      Object.defineProperty(FullTextDocument2.prototype, "uri", {
+        get: function() {
+          return this._uri;
+        },
+        enumerable: true,
+        configurable: true
+      });
+      Object.defineProperty(FullTextDocument2.prototype, "languageId", {
+        get: function() {
+          return this._languageId;
+        },
+        enumerable: true,
+        configurable: true
+      });
+      Object.defineProperty(FullTextDocument2.prototype, "version", {
+        get: function() {
+          return this._version;
+        },
+        enumerable: true,
+        configurable: true
+      });
+      FullTextDocument2.prototype.getText = function(range) {
+        if (range) {
+          var start = this.offsetAt(range.start);
+          var end = this.offsetAt(range.end);
+          return this._content.substring(start, end);
+        }
+        return this._content;
+      };
+      FullTextDocument2.prototype.update = function(event, version) {
+        this._content = event.text;
+        this._version = version;
+        this._lineOffsets = void 0;
+      };
+      FullTextDocument2.prototype.getLineOffsets = function() {
+        if (this._lineOffsets === void 0) {
+          var lineOffsets = [];
+          var text = this._content;
+          var isLineStart = true;
+          for (var i = 0; i < text.length; i++) {
+            if (isLineStart) {
+              lineOffsets.push(i);
+              isLineStart = false;
+            }
+            var ch = text.charAt(i);
+            isLineStart = ch === "\r" || ch === "\n";
+            if (ch === "\r" && i + 1 < text.length && text.charAt(i + 1) === "\n") {
+              i++;
+            }
+          }
+          if (isLineStart && text.length > 0) {
+            lineOffsets.push(text.length);
+          }
+          this._lineOffsets = lineOffsets;
+        }
+        return this._lineOffsets;
+      };
+      FullTextDocument2.prototype.positionAt = function(offset) {
+        offset = Math.max(Math.min(offset, this._content.length), 0);
+        var lineOffsets = this.getLineOffsets();
+        var low = 0, high = lineOffsets.length;
+        if (high === 0) {
+          return Position.create(0, offset);
+        }
+        while (low < high) {
+          var mid = Math.floor((low + high) / 2);
+          if (lineOffsets[mid] > offset) {
+            high = mid;
+          } else {
+            low = mid + 1;
+          }
+        }
+        var line = low - 1;
+        return Position.create(line, offset - lineOffsets[line]);
+      };
+      FullTextDocument2.prototype.offsetAt = function(position) {
+        var lineOffsets = this.getLineOffsets();
+        if (position.line >= lineOffsets.length) {
+          return this._content.length;
+        } else if (position.line < 0) {
+          return 0;
+        }
+        var lineOffset = lineOffsets[position.line];
+        var nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
+        return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
+      };
+      Object.defineProperty(FullTextDocument2.prototype, "lineCount", {
+        get: function() {
+          return this.getLineOffsets().length;
+        },
+        enumerable: true,
+        configurable: true
+      });
+      return FullTextDocument2;
+    }();
+    var Is;
+    (function(Is2) {
+      var toString = Object.prototype.toString;
+      function defined(value) {
+        return typeof value !== "undefined";
+      }
+      Is2.defined = defined;
+      function undefined2(value) {
+        return typeof value === "undefined";
+      }
+      Is2.undefined = undefined2;
+      function boolean(value) {
+        return value === true || value === false;
+      }
+      Is2.boolean = boolean;
+      function string(value) {
+        return toString.call(value) === "[object String]";
+      }
+      Is2.string = string;
+      function number(value) {
+        return toString.call(value) === "[object Number]";
+      }
+      Is2.number = number;
+      function func(value) {
+        return toString.call(value) === "[object Function]";
+      }
+      Is2.func = func;
+      function objectLiteral(value) {
+        return value !== null && typeof value === "object";
+      }
+      Is2.objectLiteral = objectLiteral;
+      function typedArray(value, check) {
+        return Array.isArray(value) && value.every(check);
+      }
+      Is2.typedArray = typedArray;
+    })(Is || (Is = {}));
+  });
+});
+
+// node_modules/vscode-languageserver-protocol/lib/utils/is.js
+var require_is2 = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  function boolean(value) {
+    return value === true || value === false;
+  }
+  exports2.boolean = boolean;
+  function string(value) {
+    return typeof value === "string" || value instanceof String;
+  }
+  exports2.string = string;
+  function number(value) {
+    return typeof value === "number" || value instanceof Number;
+  }
+  exports2.number = number;
+  function error(value) {
+    return value instanceof Error;
+  }
+  exports2.error = error;
+  function func(value) {
+    return typeof value === "function";
+  }
+  exports2.func = func;
+  function array(value) {
+    return Array.isArray(value);
+  }
+  exports2.array = array;
+  function stringArray(value) {
+    return array(value) && value.every((elem) => string(elem));
+  }
+  exports2.stringArray = stringArray;
+  function typedArray(value, check) {
+    return Array.isArray(value) && value.every(check);
+  }
+  exports2.typedArray = typedArray;
+  function objectLiteral(value) {
+    return value !== null && typeof value === "object";
+  }
+  exports2.objectLiteral = objectLiteral;
+});
+
+// node_modules/vscode-languageserver-protocol/lib/messages.js
+var require_messages2 = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 {
+    constructor(method) {
+      super(method);
+    }
+  };
+  exports2.ProtocolRequestType0 = ProtocolRequestType0;
+  var ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType {
+    constructor(method) {
+      super(method);
+    }
+  };
+  exports2.ProtocolRequestType = ProtocolRequestType;
+  var ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType {
+    constructor(method) {
+      super(method);
+    }
+  };
+  exports2.ProtocolNotificationType = ProtocolNotificationType;
+  var ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 {
+    constructor(method) {
+      super(method);
+    }
+  };
+  exports2.ProtocolNotificationType0 = ProtocolNotificationType0;
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.implementation.js
+var require_protocol_implementation = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var ImplementationRequest;
+  (function(ImplementationRequest2) {
+    ImplementationRequest2.method = "textDocument/implementation";
+    ImplementationRequest2.type = new messages_1.ProtocolRequestType(ImplementationRequest2.method);
+    ImplementationRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(ImplementationRequest = exports2.ImplementationRequest || (exports2.ImplementationRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.typeDefinition.js
+var require_protocol_typeDefinition = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var TypeDefinitionRequest;
+  (function(TypeDefinitionRequest2) {
+    TypeDefinitionRequest2.method = "textDocument/typeDefinition";
+    TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest2.method);
+    TypeDefinitionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(TypeDefinitionRequest = exports2.TypeDefinitionRequest || (exports2.TypeDefinitionRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.workspaceFolders.js
+var require_protocol_workspaceFolders = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var messages_1 = require_messages2();
+  var WorkspaceFoldersRequest;
+  (function(WorkspaceFoldersRequest2) {
+    WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0("workspace/workspaceFolders");
+  })(WorkspaceFoldersRequest = exports2.WorkspaceFoldersRequest || (exports2.WorkspaceFoldersRequest = {}));
+  var DidChangeWorkspaceFoldersNotification;
+  (function(DidChangeWorkspaceFoldersNotification2) {
+    DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWorkspaceFolders");
+  })(DidChangeWorkspaceFoldersNotification = exports2.DidChangeWorkspaceFoldersNotification || (exports2.DidChangeWorkspaceFoldersNotification = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.configuration.js
+var require_protocol_configuration = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var messages_1 = require_messages2();
+  var ConfigurationRequest;
+  (function(ConfigurationRequest2) {
+    ConfigurationRequest2.type = new messages_1.ProtocolRequestType("workspace/configuration");
+  })(ConfigurationRequest = exports2.ConfigurationRequest || (exports2.ConfigurationRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.colorProvider.js
+var require_protocol_colorProvider = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var DocumentColorRequest;
+  (function(DocumentColorRequest2) {
+    DocumentColorRequest2.method = "textDocument/documentColor";
+    DocumentColorRequest2.type = new messages_1.ProtocolRequestType(DocumentColorRequest2.method);
+    DocumentColorRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(DocumentColorRequest = exports2.DocumentColorRequest || (exports2.DocumentColorRequest = {}));
+  var ColorPresentationRequest;
+  (function(ColorPresentationRequest2) {
+    ColorPresentationRequest2.type = new messages_1.ProtocolRequestType("textDocument/colorPresentation");
+  })(ColorPresentationRequest = exports2.ColorPresentationRequest || (exports2.ColorPresentationRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.foldingRange.js
+var require_protocol_foldingRange = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var FoldingRangeKind;
+  (function(FoldingRangeKind2) {
+    FoldingRangeKind2["Comment"] = "comment";
+    FoldingRangeKind2["Imports"] = "imports";
+    FoldingRangeKind2["Region"] = "region";
+  })(FoldingRangeKind = exports2.FoldingRangeKind || (exports2.FoldingRangeKind = {}));
+  var FoldingRangeRequest;
+  (function(FoldingRangeRequest2) {
+    FoldingRangeRequest2.method = "textDocument/foldingRange";
+    FoldingRangeRequest2.type = new messages_1.ProtocolRequestType(FoldingRangeRequest2.method);
+    FoldingRangeRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(FoldingRangeRequest = exports2.FoldingRangeRequest || (exports2.FoldingRangeRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.declaration.js
+var require_protocol_declaration = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var DeclarationRequest;
+  (function(DeclarationRequest2) {
+    DeclarationRequest2.method = "textDocument/declaration";
+    DeclarationRequest2.type = new messages_1.ProtocolRequestType(DeclarationRequest2.method);
+    DeclarationRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(DeclarationRequest = exports2.DeclarationRequest || (exports2.DeclarationRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.selectionRange.js
+var require_protocol_selectionRange = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var SelectionRangeRequest;
+  (function(SelectionRangeRequest2) {
+    SelectionRangeRequest2.method = "textDocument/selectionRange";
+    SelectionRangeRequest2.type = new messages_1.ProtocolRequestType(SelectionRangeRequest2.method);
+    SelectionRangeRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(SelectionRangeRequest = exports2.SelectionRangeRequest || (exports2.SelectionRangeRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.progress.js
+var require_protocol_progress = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var WorkDoneProgress;
+  (function(WorkDoneProgress2) {
+    WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType();
+  })(WorkDoneProgress = exports2.WorkDoneProgress || (exports2.WorkDoneProgress = {}));
+  var WorkDoneProgressCreateRequest;
+  (function(WorkDoneProgressCreateRequest2) {
+    WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType("window/workDoneProgress/create");
+  })(WorkDoneProgressCreateRequest = exports2.WorkDoneProgressCreateRequest || (exports2.WorkDoneProgressCreateRequest = {}));
+  var WorkDoneProgressCancelNotification;
+  (function(WorkDoneProgressCancelNotification2) {
+    WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType("window/workDoneProgress/cancel");
+  })(WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCancelNotification || (exports2.WorkDoneProgressCancelNotification = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.js
+var require_protocol = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var Is = require_is2();
+  var vscode_jsonrpc_1 = require_main();
+  var messages_1 = require_messages2();
+  var protocol_implementation_1 = require_protocol_implementation();
+  exports2.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
+  var protocol_typeDefinition_1 = require_protocol_typeDefinition();
+  exports2.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
+  var protocol_workspaceFolders_1 = require_protocol_workspaceFolders();
+  exports2.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
+  exports2.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
+  var protocol_configuration_1 = require_protocol_configuration();
+  exports2.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
+  var protocol_colorProvider_1 = require_protocol_colorProvider();
+  exports2.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
+  exports2.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
+  var protocol_foldingRange_1 = require_protocol_foldingRange();
+  exports2.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
+  var protocol_declaration_1 = require_protocol_declaration();
+  exports2.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
+  var protocol_selectionRange_1 = require_protocol_selectionRange();
+  exports2.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;
+  var protocol_progress_1 = require_protocol_progress();
+  exports2.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;
+  exports2.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;
+  exports2.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;
+  var DocumentFilter;
+  (function(DocumentFilter2) {
+    function is(value) {
+      const candidate = value;
+      return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
+    }
+    DocumentFilter2.is = is;
+  })(DocumentFilter = exports2.DocumentFilter || (exports2.DocumentFilter = {}));
+  var DocumentSelector;
+  (function(DocumentSelector2) {
+    function is(value) {
+      if (!Array.isArray(value)) {
+        return false;
+      }
+      for (let elem of value) {
+        if (!Is.string(elem) && !DocumentFilter.is(elem)) {
+          return false;
+        }
+      }
+      return true;
+    }
+    DocumentSelector2.is = is;
+  })(DocumentSelector = exports2.DocumentSelector || (exports2.DocumentSelector = {}));
+  var RegistrationRequest;
+  (function(RegistrationRequest2) {
+    RegistrationRequest2.type = new messages_1.ProtocolRequestType("client/registerCapability");
+  })(RegistrationRequest = exports2.RegistrationRequest || (exports2.RegistrationRequest = {}));
+  var UnregistrationRequest;
+  (function(UnregistrationRequest2) {
+    UnregistrationRequest2.type = new messages_1.ProtocolRequestType("client/unregisterCapability");
+  })(UnregistrationRequest = exports2.UnregistrationRequest || (exports2.UnregistrationRequest = {}));
+  var ResourceOperationKind;
+  (function(ResourceOperationKind2) {
+    ResourceOperationKind2.Create = "create";
+    ResourceOperationKind2.Rename = "rename";
+    ResourceOperationKind2.Delete = "delete";
+  })(ResourceOperationKind = exports2.ResourceOperationKind || (exports2.ResourceOperationKind = {}));
+  var FailureHandlingKind;
+  (function(FailureHandlingKind2) {
+    FailureHandlingKind2.Abort = "abort";
+    FailureHandlingKind2.Transactional = "transactional";
+    FailureHandlingKind2.TextOnlyTransactional = "textOnlyTransactional";
+    FailureHandlingKind2.Undo = "undo";
+  })(FailureHandlingKind = exports2.FailureHandlingKind || (exports2.FailureHandlingKind = {}));
+  var StaticRegistrationOptions;
+  (function(StaticRegistrationOptions2) {
+    function hasId(value) {
+      const candidate = value;
+      return candidate && Is.string(candidate.id) && candidate.id.length > 0;
+    }
+    StaticRegistrationOptions2.hasId = hasId;
+  })(StaticRegistrationOptions = exports2.StaticRegistrationOptions || (exports2.StaticRegistrationOptions = {}));
+  var TextDocumentRegistrationOptions;
+  (function(TextDocumentRegistrationOptions2) {
+    function is(value) {
+      const candidate = value;
+      return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
+    }
+    TextDocumentRegistrationOptions2.is = is;
+  })(TextDocumentRegistrationOptions = exports2.TextDocumentRegistrationOptions || (exports2.TextDocumentRegistrationOptions = {}));
+  var WorkDoneProgressOptions;
+  (function(WorkDoneProgressOptions2) {
+    function is(value) {
+      const candidate = value;
+      return Is.objectLiteral(candidate) && (candidate.workDoneProgress === void 0 || Is.boolean(candidate.workDoneProgress));
+    }
+    WorkDoneProgressOptions2.is = is;
+    function hasWorkDoneProgress(value) {
+      const candidate = value;
+      return candidate && Is.boolean(candidate.workDoneProgress);
+    }
+    WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress;
+  })(WorkDoneProgressOptions = exports2.WorkDoneProgressOptions || (exports2.WorkDoneProgressOptions = {}));
+  var InitializeRequest;
+  (function(InitializeRequest2) {
+    InitializeRequest2.type = new messages_1.ProtocolRequestType("initialize");
+  })(InitializeRequest = exports2.InitializeRequest || (exports2.InitializeRequest = {}));
+  var InitializeError;
+  (function(InitializeError2) {
+    InitializeError2.unknownProtocolVersion = 1;
+  })(InitializeError = exports2.InitializeError || (exports2.InitializeError = {}));
+  var InitializedNotification;
+  (function(InitializedNotification2) {
+    InitializedNotification2.type = new messages_1.ProtocolNotificationType("initialized");
+  })(InitializedNotification = exports2.InitializedNotification || (exports2.InitializedNotification = {}));
+  var ShutdownRequest;
+  (function(ShutdownRequest2) {
+    ShutdownRequest2.type = new messages_1.ProtocolRequestType0("shutdown");
+  })(ShutdownRequest = exports2.ShutdownRequest || (exports2.ShutdownRequest = {}));
+  var ExitNotification;
+  (function(ExitNotification2) {
+    ExitNotification2.type = new messages_1.ProtocolNotificationType0("exit");
+  })(ExitNotification = exports2.ExitNotification || (exports2.ExitNotification = {}));
+  var DidChangeConfigurationNotification;
+  (function(DidChangeConfigurationNotification2) {
+    DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeConfiguration");
+  })(DidChangeConfigurationNotification = exports2.DidChangeConfigurationNotification || (exports2.DidChangeConfigurationNotification = {}));
+  var MessageType;
+  (function(MessageType2) {
+    MessageType2.Error = 1;
+    MessageType2.Warning = 2;
+    MessageType2.Info = 3;
+    MessageType2.Log = 4;
+  })(MessageType = exports2.MessageType || (exports2.MessageType = {}));
+  var ShowMessageNotification;
+  (function(ShowMessageNotification2) {
+    ShowMessageNotification2.type = new messages_1.ProtocolNotificationType("window/showMessage");
+  })(ShowMessageNotification = exports2.ShowMessageNotification || (exports2.ShowMessageNotification = {}));
+  var ShowMessageRequest;
+  (function(ShowMessageRequest2) {
+    ShowMessageRequest2.type = new messages_1.ProtocolRequestType("window/showMessageRequest");
+  })(ShowMessageRequest = exports2.ShowMessageRequest || (exports2.ShowMessageRequest = {}));
+  var LogMessageNotification;
+  (function(LogMessageNotification2) {
+    LogMessageNotification2.type = new messages_1.ProtocolNotificationType("window/logMessage");
+  })(LogMessageNotification = exports2.LogMessageNotification || (exports2.LogMessageNotification = {}));
+  var TelemetryEventNotification;
+  (function(TelemetryEventNotification2) {
+    TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType("telemetry/event");
+  })(TelemetryEventNotification = exports2.TelemetryEventNotification || (exports2.TelemetryEventNotification = {}));
+  var TextDocumentSyncKind;
+  (function(TextDocumentSyncKind2) {
+    TextDocumentSyncKind2.None = 0;
+    TextDocumentSyncKind2.Full = 1;
+    TextDocumentSyncKind2.Incremental = 2;
+  })(TextDocumentSyncKind = exports2.TextDocumentSyncKind || (exports2.TextDocumentSyncKind = {}));
+  var DidOpenTextDocumentNotification;
+  (function(DidOpenTextDocumentNotification2) {
+    DidOpenTextDocumentNotification2.method = "textDocument/didOpen";
+    DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification2.method);
+  })(DidOpenTextDocumentNotification = exports2.DidOpenTextDocumentNotification || (exports2.DidOpenTextDocumentNotification = {}));
+  var DidChangeTextDocumentNotification;
+  (function(DidChangeTextDocumentNotification2) {
+    DidChangeTextDocumentNotification2.method = "textDocument/didChange";
+    DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification2.method);
+  })(DidChangeTextDocumentNotification = exports2.DidChangeTextDocumentNotification || (exports2.DidChangeTextDocumentNotification = {}));
+  var DidCloseTextDocumentNotification;
+  (function(DidCloseTextDocumentNotification2) {
+    DidCloseTextDocumentNotification2.method = "textDocument/didClose";
+    DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification2.method);
+  })(DidCloseTextDocumentNotification = exports2.DidCloseTextDocumentNotification || (exports2.DidCloseTextDocumentNotification = {}));
+  var DidSaveTextDocumentNotification;
+  (function(DidSaveTextDocumentNotification2) {
+    DidSaveTextDocumentNotification2.method = "textDocument/didSave";
+    DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification2.method);
+  })(DidSaveTextDocumentNotification = exports2.DidSaveTextDocumentNotification || (exports2.DidSaveTextDocumentNotification = {}));
+  var TextDocumentSaveReason;
+  (function(TextDocumentSaveReason2) {
+    TextDocumentSaveReason2.Manual = 1;
+    TextDocumentSaveReason2.AfterDelay = 2;
+    TextDocumentSaveReason2.FocusOut = 3;
+  })(TextDocumentSaveReason = exports2.TextDocumentSaveReason || (exports2.TextDocumentSaveReason = {}));
+  var WillSaveTextDocumentNotification;
+  (function(WillSaveTextDocumentNotification2) {
+    WillSaveTextDocumentNotification2.method = "textDocument/willSave";
+    WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification2.method);
+  })(WillSaveTextDocumentNotification = exports2.WillSaveTextDocumentNotification || (exports2.WillSaveTextDocumentNotification = {}));
+  var WillSaveTextDocumentWaitUntilRequest;
+  (function(WillSaveTextDocumentWaitUntilRequest2) {
+    WillSaveTextDocumentWaitUntilRequest2.method = "textDocument/willSaveWaitUntil";
+    WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest2.method);
+  })(WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentWaitUntilRequest || (exports2.WillSaveTextDocumentWaitUntilRequest = {}));
+  var DidChangeWatchedFilesNotification;
+  (function(DidChangeWatchedFilesNotification2) {
+    DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWatchedFiles");
+  })(DidChangeWatchedFilesNotification = exports2.DidChangeWatchedFilesNotification || (exports2.DidChangeWatchedFilesNotification = {}));
+  var FileChangeType;
+  (function(FileChangeType2) {
+    FileChangeType2.Created = 1;
+    FileChangeType2.Changed = 2;
+    FileChangeType2.Deleted = 3;
+  })(FileChangeType = exports2.FileChangeType || (exports2.FileChangeType = {}));
+  var WatchKind;
+  (function(WatchKind2) {
+    WatchKind2.Create = 1;
+    WatchKind2.Change = 2;
+    WatchKind2.Delete = 4;
+  })(WatchKind = exports2.WatchKind || (exports2.WatchKind = {}));
+  var PublishDiagnosticsNotification;
+  (function(PublishDiagnosticsNotification2) {
+    PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType("textDocument/publishDiagnostics");
+  })(PublishDiagnosticsNotification = exports2.PublishDiagnosticsNotification || (exports2.PublishDiagnosticsNotification = {}));
+  var CompletionTriggerKind;
+  (function(CompletionTriggerKind2) {
+    CompletionTriggerKind2.Invoked = 1;
+    CompletionTriggerKind2.TriggerCharacter = 2;
+    CompletionTriggerKind2.TriggerForIncompleteCompletions = 3;
+  })(CompletionTriggerKind = exports2.CompletionTriggerKind || (exports2.CompletionTriggerKind = {}));
+  var CompletionRequest;
+  (function(CompletionRequest2) {
+    CompletionRequest2.method = "textDocument/completion";
+    CompletionRequest2.type = new messages_1.ProtocolRequestType(CompletionRequest2.method);
+    CompletionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(CompletionRequest = exports2.CompletionRequest || (exports2.CompletionRequest = {}));
+  var CompletionResolveRequest;
+  (function(CompletionResolveRequest2) {
+    CompletionResolveRequest2.method = "completionItem/resolve";
+    CompletionResolveRequest2.type = new messages_1.ProtocolRequestType(CompletionResolveRequest2.method);
+  })(CompletionResolveRequest = exports2.CompletionResolveRequest || (exports2.CompletionResolveRequest = {}));
+  var HoverRequest;
+  (function(HoverRequest2) {
+    HoverRequest2.method = "textDocument/hover";
+    HoverRequest2.type = new messages_1.ProtocolRequestType(HoverRequest2.method);
+  })(HoverRequest = exports2.HoverRequest || (exports2.HoverRequest = {}));
+  var SignatureHelpTriggerKind;
+  (function(SignatureHelpTriggerKind2) {
+    SignatureHelpTriggerKind2.Invoked = 1;
+    SignatureHelpTriggerKind2.TriggerCharacter = 2;
+    SignatureHelpTriggerKind2.ContentChange = 3;
+  })(SignatureHelpTriggerKind = exports2.SignatureHelpTriggerKind || (exports2.SignatureHelpTriggerKind = {}));
+  var SignatureHelpRequest;
+  (function(SignatureHelpRequest2) {
+    SignatureHelpRequest2.method = "textDocument/signatureHelp";
+    SignatureHelpRequest2.type = new messages_1.ProtocolRequestType(SignatureHelpRequest2.method);
+  })(SignatureHelpRequest = exports2.SignatureHelpRequest || (exports2.SignatureHelpRequest = {}));
+  var DefinitionRequest;
+  (function(DefinitionRequest2) {
+    DefinitionRequest2.method = "textDocument/definition";
+    DefinitionRequest2.type = new messages_1.ProtocolRequestType(DefinitionRequest2.method);
+    DefinitionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(DefinitionRequest = exports2.DefinitionRequest || (exports2.DefinitionRequest = {}));
+  var ReferencesRequest;
+  (function(ReferencesRequest2) {
+    ReferencesRequest2.method = "textDocument/references";
+    ReferencesRequest2.type = new messages_1.ProtocolRequestType(ReferencesRequest2.method);
+    ReferencesRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(ReferencesRequest = exports2.ReferencesRequest || (exports2.ReferencesRequest = {}));
+  var DocumentHighlightRequest;
+  (function(DocumentHighlightRequest2) {
+    DocumentHighlightRequest2.method = "textDocument/documentHighlight";
+    DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest2.method);
+    DocumentHighlightRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(DocumentHighlightRequest = exports2.DocumentHighlightRequest || (exports2.DocumentHighlightRequest = {}));
+  var DocumentSymbolRequest;
+  (function(DocumentSymbolRequest2) {
+    DocumentSymbolRequest2.method = "textDocument/documentSymbol";
+    DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest2.method);
+    DocumentSymbolRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(DocumentSymbolRequest = exports2.DocumentSymbolRequest || (exports2.DocumentSymbolRequest = {}));
+  var CodeActionRequest;
+  (function(CodeActionRequest2) {
+    CodeActionRequest2.method = "textDocument/codeAction";
+    CodeActionRequest2.type = new messages_1.ProtocolRequestType(CodeActionRequest2.method);
+    CodeActionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(CodeActionRequest = exports2.CodeActionRequest || (exports2.CodeActionRequest = {}));
+  var WorkspaceSymbolRequest;
+  (function(WorkspaceSymbolRequest2) {
+    WorkspaceSymbolRequest2.method = "workspace/symbol";
+    WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest2.method);
+    WorkspaceSymbolRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(WorkspaceSymbolRequest = exports2.WorkspaceSymbolRequest || (exports2.WorkspaceSymbolRequest = {}));
+  var CodeLensRequest;
+  (function(CodeLensRequest2) {
+    CodeLensRequest2.type = new messages_1.ProtocolRequestType("textDocument/codeLens");
+    CodeLensRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(CodeLensRequest = exports2.CodeLensRequest || (exports2.CodeLensRequest = {}));
+  var CodeLensResolveRequest;
+  (function(CodeLensResolveRequest2) {
+    CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType("codeLens/resolve");
+  })(CodeLensResolveRequest = exports2.CodeLensResolveRequest || (exports2.CodeLensResolveRequest = {}));
+  var DocumentLinkRequest;
+  (function(DocumentLinkRequest2) {
+    DocumentLinkRequest2.method = "textDocument/documentLink";
+    DocumentLinkRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkRequest2.method);
+    DocumentLinkRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
+  })(DocumentLinkRequest = exports2.DocumentLinkRequest || (exports2.DocumentLinkRequest = {}));
+  var DocumentLinkResolveRequest;
+  (function(DocumentLinkResolveRequest2) {
+    DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType("documentLink/resolve");
+  })(DocumentLinkResolveRequest = exports2.DocumentLinkResolveRequest || (exports2.DocumentLinkResolveRequest = {}));
+  var DocumentFormattingRequest;
+  (function(DocumentFormattingRequest2) {
+    DocumentFormattingRequest2.method = "textDocument/formatting";
+    DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest2.method);
+  })(DocumentFormattingRequest = exports2.DocumentFormattingRequest || (exports2.DocumentFormattingRequest = {}));
+  var DocumentRangeFormattingRequest;
+  (function(DocumentRangeFormattingRequest2) {
+    DocumentRangeFormattingRequest2.method = "textDocument/rangeFormatting";
+    DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest2.method);
+  })(DocumentRangeFormattingRequest = exports2.DocumentRangeFormattingRequest || (exports2.DocumentRangeFormattingRequest = {}));
+  var DocumentOnTypeFormattingRequest;
+  (function(DocumentOnTypeFormattingRequest2) {
+    DocumentOnTypeFormattingRequest2.method = "textDocument/onTypeFormatting";
+    DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest2.method);
+  })(DocumentOnTypeFormattingRequest = exports2.DocumentOnTypeFormattingRequest || (exports2.DocumentOnTypeFormattingRequest = {}));
+  var RenameRequest;
+  (function(RenameRequest2) {
+    RenameRequest2.method = "textDocument/rename";
+    RenameRequest2.type = new messages_1.ProtocolRequestType(RenameRequest2.method);
+  })(RenameRequest = exports2.RenameRequest || (exports2.RenameRequest = {}));
+  var PrepareRenameRequest;
+  (function(PrepareRenameRequest2) {
+    PrepareRenameRequest2.method = "textDocument/prepareRename";
+    PrepareRenameRequest2.type = new messages_1.ProtocolRequestType(PrepareRenameRequest2.method);
+  })(PrepareRenameRequest = exports2.PrepareRenameRequest || (exports2.PrepareRenameRequest = {}));
+  var ExecuteCommandRequest;
+  (function(ExecuteCommandRequest2) {
+    ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType("workspace/executeCommand");
+  })(ExecuteCommandRequest = exports2.ExecuteCommandRequest || (exports2.ExecuteCommandRequest = {}));
+  var ApplyWorkspaceEditRequest;
+  (function(ApplyWorkspaceEditRequest2) {
+    ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
+  })(ApplyWorkspaceEditRequest = exports2.ApplyWorkspaceEditRequest || (exports2.ApplyWorkspaceEditRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.callHierarchy.proposed.js
+var require_protocol_callHierarchy_proposed = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var messages_1 = require_messages2();
+  var CallHierarchyPrepareRequest;
+  (function(CallHierarchyPrepareRequest2) {
+    CallHierarchyPrepareRequest2.method = "textDocument/prepareCallHierarchy";
+    CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest2.method);
+  })(CallHierarchyPrepareRequest = exports2.CallHierarchyPrepareRequest || (exports2.CallHierarchyPrepareRequest = {}));
+  var CallHierarchyIncomingCallsRequest;
+  (function(CallHierarchyIncomingCallsRequest2) {
+    CallHierarchyIncomingCallsRequest2.method = "callHierarchy/incomingCalls";
+    CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest2.method);
+  })(CallHierarchyIncomingCallsRequest = exports2.CallHierarchyIncomingCallsRequest || (exports2.CallHierarchyIncomingCallsRequest = {}));
+  var CallHierarchyOutgoingCallsRequest;
+  (function(CallHierarchyOutgoingCallsRequest2) {
+    CallHierarchyOutgoingCallsRequest2.method = "callHierarchy/outgoingCalls";
+    CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest2.method);
+  })(CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyOutgoingCallsRequest || (exports2.CallHierarchyOutgoingCallsRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/protocol.sematicTokens.proposed.js
+var require_protocol_sematicTokens_proposed = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var messages_1 = require_messages2();
+  var SemanticTokenTypes;
+  (function(SemanticTokenTypes2) {
+    SemanticTokenTypes2["comment"] = "comment";
+    SemanticTokenTypes2["keyword"] = "keyword";
+    SemanticTokenTypes2["string"] = "string";
+    SemanticTokenTypes2["number"] = "number";
+    SemanticTokenTypes2["regexp"] = "regexp";
+    SemanticTokenTypes2["operator"] = "operator";
+    SemanticTokenTypes2["namespace"] = "namespace";
+    SemanticTokenTypes2["type"] = "type";
+    SemanticTokenTypes2["struct"] = "struct";
+    SemanticTokenTypes2["class"] = "class";
+    SemanticTokenTypes2["interface"] = "interface";
+    SemanticTokenTypes2["enum"] = "enum";
+    SemanticTokenTypes2["typeParameter"] = "typeParameter";
+    SemanticTokenTypes2["function"] = "function";
+    SemanticTokenTypes2["member"] = "member";
+    SemanticTokenTypes2["property"] = "property";
+    SemanticTokenTypes2["macro"] = "macro";
+    SemanticTokenTypes2["variable"] = "variable";
+    SemanticTokenTypes2["parameter"] = "parameter";
+    SemanticTokenTypes2["label"] = "label";
+  })(SemanticTokenTypes = exports2.SemanticTokenTypes || (exports2.SemanticTokenTypes = {}));
+  var SemanticTokenModifiers;
+  (function(SemanticTokenModifiers2) {
+    SemanticTokenModifiers2["documentation"] = "documentation";
+    SemanticTokenModifiers2["declaration"] = "declaration";
+    SemanticTokenModifiers2["definition"] = "definition";
+    SemanticTokenModifiers2["reference"] = "reference";
+    SemanticTokenModifiers2["static"] = "static";
+    SemanticTokenModifiers2["abstract"] = "abstract";
+    SemanticTokenModifiers2["deprecated"] = "deprecated";
+    SemanticTokenModifiers2["async"] = "async";
+    SemanticTokenModifiers2["volatile"] = "volatile";
+    SemanticTokenModifiers2["readonly"] = "readonly";
+  })(SemanticTokenModifiers = exports2.SemanticTokenModifiers || (exports2.SemanticTokenModifiers = {}));
+  var SemanticTokens;
+  (function(SemanticTokens2) {
+    function is(value) {
+      const candidate = value;
+      return candidate !== void 0 && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
+    }
+    SemanticTokens2.is = is;
+  })(SemanticTokens = exports2.SemanticTokens || (exports2.SemanticTokens = {}));
+  var SemanticTokensRequest;
+  (function(SemanticTokensRequest2) {
+    SemanticTokensRequest2.method = "textDocument/semanticTokens";
+    SemanticTokensRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRequest2.method);
+  })(SemanticTokensRequest = exports2.SemanticTokensRequest || (exports2.SemanticTokensRequest = {}));
+  var SemanticTokensEditsRequest;
+  (function(SemanticTokensEditsRequest2) {
+    SemanticTokensEditsRequest2.method = "textDocument/semanticTokens/edits";
+    SemanticTokensEditsRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest2.method);
+  })(SemanticTokensEditsRequest = exports2.SemanticTokensEditsRequest || (exports2.SemanticTokensEditsRequest = {}));
+  var SemanticTokensRangeRequest;
+  (function(SemanticTokensRangeRequest2) {
+    SemanticTokensRangeRequest2.method = "textDocument/semanticTokens/range";
+    SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest2.method);
+  })(SemanticTokensRangeRequest = exports2.SemanticTokensRangeRequest || (exports2.SemanticTokensRangeRequest = {}));
+});
+
+// node_modules/vscode-languageserver-protocol/lib/main.js
+var require_main3 = __commonJS((exports2) => {
+  "use strict";
+  function __export2(m) {
+    for (var p in m)
+      if (!exports2.hasOwnProperty(p))
+        exports2[p] = m[p];
+  }
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_jsonrpc_1 = require_main();
+  exports2.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
+  exports2.ResponseError = vscode_jsonrpc_1.ResponseError;
+  exports2.CancellationToken = vscode_jsonrpc_1.CancellationToken;
+  exports2.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
+  exports2.Disposable = vscode_jsonrpc_1.Disposable;
+  exports2.Event = vscode_jsonrpc_1.Event;
+  exports2.Emitter = vscode_jsonrpc_1.Emitter;
+  exports2.Trace = vscode_jsonrpc_1.Trace;
+  exports2.TraceFormat = vscode_jsonrpc_1.TraceFormat;
+  exports2.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
+  exports2.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
+  exports2.RequestType = vscode_jsonrpc_1.RequestType;
+  exports2.RequestType0 = vscode_jsonrpc_1.RequestType0;
+  exports2.NotificationType = vscode_jsonrpc_1.NotificationType;
+  exports2.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
+  exports2.MessageReader = vscode_jsonrpc_1.MessageReader;
+  exports2.MessageWriter = vscode_jsonrpc_1.MessageWriter;
+  exports2.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
+  exports2.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
+  exports2.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
+  exports2.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
+  exports2.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
+  exports2.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
+  exports2.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
+  exports2.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
+  exports2.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
+  exports2.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
+  exports2.ProgressType = vscode_jsonrpc_1.ProgressType;
+  __export2(require_main2());
+  __export2(require_protocol());
+  var callHierarchy = require_protocol_callHierarchy_proposed();
+  var st = require_protocol_sematicTokens_proposed();
+  var Proposed;
+  (function(Proposed2) {
+    let CallHierarchyPrepareRequest;
+    (function(CallHierarchyPrepareRequest2) {
+      CallHierarchyPrepareRequest2.method = callHierarchy.CallHierarchyPrepareRequest.method;
+      CallHierarchyPrepareRequest2.type = callHierarchy.CallHierarchyPrepareRequest.type;
+    })(CallHierarchyPrepareRequest = Proposed2.CallHierarchyPrepareRequest || (Proposed2.CallHierarchyPrepareRequest = {}));
+    let CallHierarchyIncomingCallsRequest;
+    (function(CallHierarchyIncomingCallsRequest2) {
+      CallHierarchyIncomingCallsRequest2.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;
+      CallHierarchyIncomingCallsRequest2.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;
+    })(CallHierarchyIncomingCallsRequest = Proposed2.CallHierarchyIncomingCallsRequest || (Proposed2.CallHierarchyIncomingCallsRequest = {}));
+    let CallHierarchyOutgoingCallsRequest;
+    (function(CallHierarchyOutgoingCallsRequest2) {
+      CallHierarchyOutgoingCallsRequest2.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;
+      CallHierarchyOutgoingCallsRequest2.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;
+    })(CallHierarchyOutgoingCallsRequest = Proposed2.CallHierarchyOutgoingCallsRequest || (Proposed2.CallHierarchyOutgoingCallsRequest = {}));
+    Proposed2.SemanticTokenTypes = st.SemanticTokenTypes;
+    Proposed2.SemanticTokenModifiers = st.SemanticTokenModifiers;
+    Proposed2.SemanticTokens = st.SemanticTokens;
+    let SemanticTokensRequest;
+    (function(SemanticTokensRequest2) {
+      SemanticTokensRequest2.method = st.SemanticTokensRequest.method;
+      SemanticTokensRequest2.type = st.SemanticTokensRequest.type;
+    })(SemanticTokensRequest = Proposed2.SemanticTokensRequest || (Proposed2.SemanticTokensRequest = {}));
+    let SemanticTokensEditsRequest;
+    (function(SemanticTokensEditsRequest2) {
+      SemanticTokensEditsRequest2.method = st.SemanticTokensEditsRequest.method;
+      SemanticTokensEditsRequest2.type = st.SemanticTokensEditsRequest.type;
+    })(SemanticTokensEditsRequest = Proposed2.SemanticTokensEditsRequest || (Proposed2.SemanticTokensEditsRequest = {}));
+    let SemanticTokensRangeRequest;
+    (function(SemanticTokensRangeRequest2) {
+      SemanticTokensRangeRequest2.method = st.SemanticTokensRangeRequest.method;
+      SemanticTokensRangeRequest2.type = st.SemanticTokensRangeRequest.type;
+    })(SemanticTokensRangeRequest = Proposed2.SemanticTokensRangeRequest || (Proposed2.SemanticTokensRangeRequest = {}));
+  })(Proposed = exports2.Proposed || (exports2.Proposed = {}));
+  function createProtocolConnection(reader, writer, logger, strategy) {
+    return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
+  }
+  exports2.createProtocolConnection = createProtocolConnection;
+});
+
+// node_modules/vscode-languageclient/lib/utils/is.js
+var require_is3 = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  function boolean(value) {
+    return value === true || value === false;
+  }
+  exports2.boolean = boolean;
+  function string(value) {
+    return typeof value === "string" || value instanceof String;
+  }
+  exports2.string = string;
+  function number(value) {
+    return typeof value === "number" || value instanceof Number;
+  }
+  exports2.number = number;
+  function error(value) {
+    return value instanceof Error;
+  }
+  exports2.error = error;
+  function func(value) {
+    return typeof value === "function";
+  }
+  exports2.func = func;
+  function array(value) {
+    return Array.isArray(value);
+  }
+  exports2.array = array;
+  function stringArray(value) {
+    return array(value) && value.every((elem) => string(elem));
+  }
+  exports2.stringArray = stringArray;
+  function typedArray(value, check) {
+    return Array.isArray(value) && value.every(check);
+  }
+  exports2.typedArray = typedArray;
+  function thenable(value) {
+    return value && func(value.then);
+  }
+  exports2.thenable = thenable;
+  function asPromise(value) {
+    if (value instanceof Promise) {
+      return value;
+    } else if (thenable(value)) {
+      return new Promise((resolve, reject) => {
+        value.then((resolved) => resolve(resolved), (error2) => reject(error2));
+      });
+    } else {
+      return Promise.resolve(value);
+    }
+  }
+  exports2.asPromise = asPromise;
+});
+
+// node_modules/vscode-languageclient/lib/protocolCompletionItem.js
+var require_protocolCompletionItem = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var code = require("vscode");
+  var ProtocolCompletionItem = class extends code.CompletionItem {
+    constructor(label) {
+      super(label);
+    }
+  };
+  exports2.default = ProtocolCompletionItem;
+});
+
+// node_modules/vscode-languageclient/lib/protocolCodeLens.js
+var require_protocolCodeLens = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var code = require("vscode");
+  var ProtocolCodeLens = class extends code.CodeLens {
+    constructor(range) {
+      super(range);
+    }
+  };
+  exports2.default = ProtocolCodeLens;
+});
+
+// node_modules/vscode-languageclient/lib/protocolDocumentLink.js
+var require_protocolDocumentLink = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var code = require("vscode");
+  var ProtocolDocumentLink = class extends code.DocumentLink {
+    constructor(range, target) {
+      super(range, target);
+    }
+  };
+  exports2.default = ProtocolDocumentLink;
+});
+
+// node_modules/vscode-languageclient/lib/codeConverter.js
+var require_codeConverter = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var code = require("vscode");
+  var proto = require_main3();
+  var Is = require_is3();
+  var protocolCompletionItem_1 = require_protocolCompletionItem();
+  var protocolCodeLens_1 = require_protocolCodeLens();
+  var protocolDocumentLink_1 = require_protocolDocumentLink();
+  function createConverter(uriConverter) {
+    const nullConverter = (value) => value.toString();
+    const _uriConverter = uriConverter || nullConverter;
+    function asUri(value) {
+      return _uriConverter(value);
+    }
+    function asTextDocumentIdentifier(textDocument) {
+      return {
+        uri: _uriConverter(textDocument.uri)
+      };
+    }
+    function asVersionedTextDocumentIdentifier(textDocument) {
+      return {
+        uri: _uriConverter(textDocument.uri),
+        version: textDocument.version
+      };
+    }
+    function asOpenTextDocumentParams(textDocument) {
+      return {
+        textDocument: {
+          uri: _uriConverter(textDocument.uri),
+          languageId: textDocument.languageId,
+          version: textDocument.version,
+          text: textDocument.getText()
+        }
+      };
+    }
+    function isTextDocumentChangeEvent(value) {
+      let candidate = value;
+      return !!candidate.document && !!candidate.contentChanges;
+    }
+    function isTextDocument(value) {
+      let candidate = value;
+      return !!candidate.uri && !!candidate.version;
+    }
+    function asChangeTextDocumentParams(arg) {
+      if (isTextDocument(arg)) {
+        let result = {
+          textDocument: {
+            uri: _uriConverter(arg.uri),
+            version: arg.version
+          },
+          contentChanges: [{text: arg.getText()}]
+        };
+        return result;
+      } else if (isTextDocumentChangeEvent(arg)) {
+        let document = arg.document;
+        let result = {
+          textDocument: {
+            uri: _uriConverter(document.uri),
+            version: document.version
+          },
+          contentChanges: arg.contentChanges.map((change) => {
+            let range = change.range;
+            return {
+              range: {
+                start: {line: range.start.line, character: range.start.character},
+                end: {line: range.end.line, character: range.end.character}
+              },
+              rangeLength: change.rangeLength,
+              text: change.text
+            };
+          })
+        };
+        return result;
+      } else {
+        throw Error("Unsupported text document change parameter");
+      }
+    }
+    function asCloseTextDocumentParams(textDocument) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument)
+      };
+    }
+    function asSaveTextDocumentParams(textDocument, includeContent = false) {
+      let result = {
+        textDocument: asVersionedTextDocumentIdentifier(textDocument)
+      };
+      if (includeContent) {
+        result.text = textDocument.getText();
+      }
+      return result;
+    }
+    function asTextDocumentSaveReason(reason) {
+      switch (reason) {
+        case code.TextDocumentSaveReason.Manual:
+          return proto.TextDocumentSaveReason.Manual;
+        case code.TextDocumentSaveReason.AfterDelay:
+          return proto.TextDocumentSaveReason.AfterDelay;
+        case code.TextDocumentSaveReason.FocusOut:
+          return proto.TextDocumentSaveReason.FocusOut;
+      }
+      return proto.TextDocumentSaveReason.Manual;
+    }
+    function asWillSaveTextDocumentParams(event) {
+      return {
+        textDocument: asTextDocumentIdentifier(event.document),
+        reason: asTextDocumentSaveReason(event.reason)
+      };
+    }
+    function asTextDocumentPositionParams(textDocument, position) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument),
+        position: asWorkerPosition(position)
+      };
+    }
+    function asCompletionTriggerKind(triggerKind) {
+      switch (triggerKind) {
+        case code.CompletionTriggerKind.TriggerCharacter:
+          return proto.CompletionTriggerKind.TriggerCharacter;
+        case code.CompletionTriggerKind.TriggerForIncompleteCompletions:
+          return proto.CompletionTriggerKind.TriggerForIncompleteCompletions;
+        default:
+          return proto.CompletionTriggerKind.Invoked;
+      }
+    }
+    function asCompletionParams(textDocument, position, context) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument),
+        position: asWorkerPosition(position),
+        context: {
+          triggerKind: asCompletionTriggerKind(context.triggerKind),
+          triggerCharacter: context.triggerCharacter
+        }
+      };
+    }
+    function asSignatureHelpTriggerKind(triggerKind) {
+      switch (triggerKind) {
+        case code.SignatureHelpTriggerKind.Invoke:
+          return proto.SignatureHelpTriggerKind.Invoked;
+        case code.SignatureHelpTriggerKind.TriggerCharacter:
+          return proto.SignatureHelpTriggerKind.TriggerCharacter;
+        case code.SignatureHelpTriggerKind.ContentChange:
+          return proto.SignatureHelpTriggerKind.ContentChange;
+      }
+    }
+    function asParameterInformation(value) {
+      return {
+        label: value.label
+      };
+    }
+    function asParameterInformations(values) {
+      return values.map(asParameterInformation);
+    }
+    function asSignatureInformation(value) {
+      return {
+        label: value.label,
+        parameters: asParameterInformations(value.parameters)
+      };
+    }
+    function asSignatureInformations(values) {
+      return values.map(asSignatureInformation);
+    }
+    function asSignatureHelp(value) {
+      if (value === void 0) {
+        return value;
+      }
+      return {
+        signatures: asSignatureInformations(value.signatures),
+        activeSignature: value.activeSignature,
+        activeParameter: value.activeParameter
+      };
+    }
+    function asSignatureHelpParams(textDocument, position, context) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument),
+        position: asWorkerPosition(position),
+        context: {
+          isRetrigger: context.isRetrigger,
+          triggerCharacter: context.triggerCharacter,
+          triggerKind: asSignatureHelpTriggerKind(context.triggerKind),
+          activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp)
+        }
+      };
+    }
+    function asWorkerPosition(position) {
+      return {line: position.line, character: position.character};
+    }
+    function asPosition(value) {
+      if (value === void 0 || value === null) {
+        return value;
+      }
+      return {line: value.line, character: value.character};
+    }
+    function asPositions(value) {
+      let result = [];
+      for (let elem of value) {
+        result.push(asPosition(elem));
+      }
+      return result;
+    }
+    function isInsertReplace(value) {
+      const candidate = value;
+      return candidate && !!candidate.inserting && !!candidate.replacing;
+    }
+    function asRange(value) {
+      if (value === void 0 || value === null) {
+        return value;
+      }
+      if (isInsertReplace(value)) {
+        throw new Error(`Receving unknown insert replace range.`);
+      }
+      return {start: asPosition(value.start), end: asPosition(value.end)};
+    }
+    function asLocation(value) {
+      if (value === void 0 || value === null) {
+        return value;
+      }
+      return proto.Location.create(asUri(value.uri), asRange(value.range));
+    }
+    function asDiagnosticSeverity(value) {
+      switch (value) {
+        case code.DiagnosticSeverity.Error:
+          return proto.DiagnosticSeverity.Error;
+        case code.DiagnosticSeverity.Warning:
+          return proto.DiagnosticSeverity.Warning;
+        case code.DiagnosticSeverity.Information:
+          return proto.DiagnosticSeverity.Information;
+        case code.DiagnosticSeverity.Hint:
+          return proto.DiagnosticSeverity.Hint;
+      }
+    }
+    function asDiagnosticTags(tags) {
+      if (!tags) {
+        return void 0;
+      }
+      let result = [];
+      for (let tag of tags) {
+        let converted = asDiagnosticTag(tag);
+        if (converted !== void 0) {
+          result.push(converted);
+        }
+      }
+      return result.length > 0 ? result : void 0;
+    }
+    function asDiagnosticTag(tag) {
+      switch (tag) {
+        case code.DiagnosticTag.Unnecessary:
+          return proto.DiagnosticTag.Unnecessary;
+        case code.DiagnosticTag.Deprecated:
+          return proto.DiagnosticTag.Deprecated;
+        default:
+          return void 0;
+      }
+    }
+    function asRelatedInformation(item) {
+      return {
+        message: item.message,
+        location: asLocation(item.location)
+      };
+    }
+    function asRelatedInformations(items) {
+      return items.map(asRelatedInformation);
+    }
+    function asDiagnostic(item) {
+      let result = proto.Diagnostic.create(asRange(item.range), item.message);
+      if (Is.number(item.severity)) {
+        result.severity = asDiagnosticSeverity(item.severity);
+      }
+      if (Is.number(item.code) || Is.string(item.code)) {
+        result.code = item.code;
+      }
+      if (Array.isArray(item.tags)) {
+        result.tags = asDiagnosticTags(item.tags);
+      }
+      if (item.relatedInformation) {
+        result.relatedInformation = asRelatedInformations(item.relatedInformation);
+      }
+      if (item.source) {
+        result.source = item.source;
+      }
+      return result;
+    }
+    function asDiagnostics(items) {
+      if (items === void 0 || items === null) {
+        return items;
+      }
+      return items.map(asDiagnostic);
+    }
+    function asDocumentation(format, documentation) {
+      switch (format) {
+        case "$string":
+          return documentation;
+        case proto.MarkupKind.PlainText:
+          return {kind: format, value: documentation};
+        case proto.MarkupKind.Markdown:
+          return {kind: format, value: documentation.value};
+        default:
+          return `Unsupported Markup content received. Kind is: ${format}`;
+      }
+    }
+    function asCompletionItemTag(tag) {
+      switch (tag) {
+        case code.CompletionItemTag.Deprecated:
+          return proto.CompletionItemTag.Deprecated;
+      }
+      return void 0;
+    }
+    function asCompletionItemTags(tags) {
+      if (tags === void 0) {
+        return tags;
+      }
+      const result = [];
+      for (let tag of tags) {
+        const converted = asCompletionItemTag(tag);
+        if (converted !== void 0) {
+          result.push(converted);
+        }
+      }
+      return result;
+    }
+    function asCompletionItemKind(value, original) {
+      if (original !== void 0) {
+        return original;
+      }
+      return value + 1;
+    }
+    function asCompletionItem(item) {
+      let result = {label: item.label};
+      let protocolItem = item instanceof protocolCompletionItem_1.default ? item : void 0;
+      if (item.detail) {
+        result.detail = item.detail;
+      }
+      if (item.documentation) {
+        if (!protocolItem || protocolItem.documentationFormat === "$string") {
+          result.documentation = item.documentation;
+        } else {
+          result.documentation = asDocumentation(protocolItem.documentationFormat, item.documentation);
+        }
+      }
+      if (item.filterText) {
+        result.filterText = item.filterText;
+      }
+      fillPrimaryInsertText(result, item);
+      if (Is.number(item.kind)) {
+        result.kind = asCompletionItemKind(item.kind, protocolItem && protocolItem.originalItemKind);
+      }
+      if (item.sortText) {
+        result.sortText = item.sortText;
+      }
+      if (item.additionalTextEdits) {
+        result.additionalTextEdits = asTextEdits(item.additionalTextEdits);
+      }
+      if (item.commitCharacters) {
+        result.commitCharacters = item.commitCharacters.slice();
+      }
+      if (item.command) {
+        result.command = asCommand(item.command);
+      }
+      if (item.preselect === true || item.preselect === false) {
+        result.preselect = item.preselect;
+      }
+      const tags = asCompletionItemTags(item.tags);
+      if (protocolItem) {
+        if (protocolItem.data !== void 0) {
+          result.data = protocolItem.data;
+        }
+        if (protocolItem.deprecated === true || protocolItem.deprecated === false) {
+          if (protocolItem.deprecated === true && tags !== void 0 && tags.length > 0) {
+            const index = tags.indexOf(code.CompletionItemTag.Deprecated);
+            if (index !== -1) {
+              tags.splice(index, 1);
+            }
+          }
+          result.deprecated = protocolItem.deprecated;
+        }
+      }
+      if (tags !== void 0 && tags.length > 0) {
+        result.tags = tags;
+      }
+      return result;
+    }
+    function fillPrimaryInsertText(target, source) {
+      let format = proto.InsertTextFormat.PlainText;
+      let text = void 0;
+      let range = void 0;
+      if (source.textEdit) {
+        text = source.textEdit.newText;
+        range = asRange(source.textEdit.range);
+      } else if (source.insertText instanceof code.SnippetString) {
+        format = proto.InsertTextFormat.Snippet;
+        text = source.insertText.value;
+      } else {
+        text = source.insertText;
+      }
+      if (source.range) {
+        range = asRange(source.range);
+      }
+      target.insertTextFormat = format;
+      if (source.fromEdit && text !== void 0 && range !== void 0) {
+        target.textEdit = {newText: text, range};
+      } else {
+        target.insertText = text;
+      }
+    }
+    function asTextEdit(edit) {
+      return {range: asRange(edit.range), newText: edit.newText};
+    }
+    function asTextEdits(edits) {
+      if (edits === void 0 || edits === null) {
+        return edits;
+      }
+      return edits.map(asTextEdit);
+    }
+    function asSymbolKind(item) {
+      if (item <= code.SymbolKind.TypeParameter) {
+        return item + 1;
+      }
+      return proto.SymbolKind.Property;
+    }
+    function asSymbolTag(item) {
+      return item;
+    }
+    function asSymbolTags(items) {
+      return items.map(asSymbolTag);
+    }
+    function asReferenceParams(textDocument, position, options) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument),
+        position: asWorkerPosition(position),
+        context: {includeDeclaration: options.includeDeclaration}
+      };
+    }
+    function asCodeActionContext(context) {
+      if (context === void 0 || context === null) {
+        return context;
+      }
+      let only;
+      if (context.only && Is.string(context.only.value)) {
+        only = [context.only.value];
+      }
+      return proto.CodeActionContext.create(asDiagnostics(context.diagnostics), only);
+    }
+    function asCommand(item) {
+      let result = proto.Command.create(item.title, item.command);
+      if (item.arguments) {
+        result.arguments = item.arguments;
+      }
+      return result;
+    }
+    function asCodeLens(item) {
+      let result = proto.CodeLens.create(asRange(item.range));
+      if (item.command) {
+        result.command = asCommand(item.command);
+      }
+      if (item instanceof protocolCodeLens_1.default) {
+        if (item.data) {
+          result.data = item.data;
+        }
+      }
+      return result;
+    }
+    function asFormattingOptions(item) {
+      return {tabSize: item.tabSize, insertSpaces: item.insertSpaces};
+    }
+    function asDocumentSymbolParams(textDocument) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument)
+      };
+    }
+    function asCodeLensParams(textDocument) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument)
+      };
+    }
+    function asDocumentLink(item) {
+      let result = proto.DocumentLink.create(asRange(item.range));
+      if (item.target) {
+        result.target = asUri(item.target);
+      }
+      if (item.tooltip !== void 0) {
+        result.tooltip = item.tooltip;
+      }
+      let protocolItem = item instanceof protocolDocumentLink_1.default ? item : void 0;
+      if (protocolItem && protocolItem.data) {
+        result.data = protocolItem.data;
+      }
+      return result;
+    }
+    function asDocumentLinkParams(textDocument) {
+      return {
+        textDocument: asTextDocumentIdentifier(textDocument)
+      };
+    }
+    return {
+      asUri,
+      asTextDocumentIdentifier,
+      asVersionedTextDocumentIdentifier,
+      asOpenTextDocumentParams,
+      asChangeTextDocumentParams,
+      asCloseTextDocumentParams,
+      asSaveTextDocumentParams,
+      asWillSaveTextDocumentParams,
+      asTextDocumentPositionParams,
+      asCompletionParams,
+      asSignatureHelpParams,
+      asWorkerPosition,
+      asRange,
+      asPosition,
+      asPositions,
+      asLocation,
+      asDiagnosticSeverity,
+      asDiagnosticTag,
+      asDiagnostic,
+      asDiagnostics,
+      asCompletionItem,
+      asTextEdit,
+      asSymbolKind,
+      asSymbolTag,
+      asSymbolTags,
+      asReferenceParams,
+      asCodeActionContext,
+      asCommand,
+      asCodeLens,
+      asFormattingOptions,
+      asDocumentSymbolParams,
+      asCodeLensParams,
+      asDocumentLink,
+      asDocumentLinkParams
+    };
+  }
+  exports2.createConverter = createConverter;
+});
+
+// node_modules/vscode-languageclient/lib/protocolConverter.js
+var require_protocolConverter = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var code = require("vscode");
+  var ls = require_main3();
+  var Is = require_is3();
+  var protocolCompletionItem_1 = require_protocolCompletionItem();
+  var protocolCodeLens_1 = require_protocolCodeLens();
+  var protocolDocumentLink_1 = require_protocolDocumentLink();
+  var CodeBlock;
+  (function(CodeBlock2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && Is.string(candidate.language) && Is.string(candidate.value);
+    }
+    CodeBlock2.is = is;
+  })(CodeBlock || (CodeBlock = {}));
+  function createConverter(uriConverter) {
+    const nullConverter = (value) => code.Uri.parse(value);
+    const _uriConverter = uriConverter || nullConverter;
+    function asUri(value) {
+      return _uriConverter(value);
+    }
+    function asDiagnostics(diagnostics) {
+      return diagnostics.map(asDiagnostic);
+    }
+    function asDiagnostic(diagnostic) {
+      let result = new code.Diagnostic(asRange(diagnostic.range), diagnostic.message, asDiagnosticSeverity(diagnostic.severity));
+      if (Is.number(diagnostic.code) || Is.string(diagnostic.code)) {
+        result.code = diagnostic.code;
+      }
+      if (diagnostic.source) {
+        result.source = diagnostic.source;
+      }
+      if (diagnostic.relatedInformation) {
+        result.relatedInformation = asRelatedInformation(diagnostic.relatedInformation);
+      }
+      if (Array.isArray(diagnostic.tags)) {
+        result.tags = asDiagnosticTags(diagnostic.tags);
+      }
+      return result;
+    }
+    function asRelatedInformation(relatedInformation) {
+      return relatedInformation.map(asDiagnosticRelatedInformation);
+    }
+    function asDiagnosticRelatedInformation(information) {
+      return new code.DiagnosticRelatedInformation(asLocation(information.location), information.message);
+    }
+    function asDiagnosticTags(tags) {
+      if (!tags) {
+        return void 0;
+      }
+      let result = [];
+      for (let tag of tags) {
+        let converted = asDiagnosticTag(tag);
+        if (converted !== void 0) {
+          result.push(converted);
+        }
+      }
+      return result.length > 0 ? result : void 0;
+    }
+    function asDiagnosticTag(tag) {
+      switch (tag) {
+        case ls.DiagnosticTag.Unnecessary:
+          return code.DiagnosticTag.Unnecessary;
+        case ls.DiagnosticTag.Deprecated:
+          return code.DiagnosticTag.Deprecated;
+        default:
+          return void 0;
+      }
+    }
+    function asPosition(value) {
+      if (!value) {
+        return void 0;
+      }
+      return new code.Position(value.line, value.character);
+    }
+    function asRange(value) {
+      if (!value) {
+        return void 0;
+      }
+      return new code.Range(asPosition(value.start), asPosition(value.end));
+    }
+    function asRanges(value) {
+      return value.map((value2) => asRange(value2));
+    }
+    function asDiagnosticSeverity(value) {
+      if (value === void 0 || value === null) {
+        return code.DiagnosticSeverity.Error;
+      }
+      switch (value) {
+        case ls.DiagnosticSeverity.Error:
+          return code.DiagnosticSeverity.Error;
+        case ls.DiagnosticSeverity.Warning:
+          return code.DiagnosticSeverity.Warning;
+        case ls.DiagnosticSeverity.Information:
+          return code.DiagnosticSeverity.Information;
+        case ls.DiagnosticSeverity.Hint:
+          return code.DiagnosticSeverity.Hint;
+      }
+      return code.DiagnosticSeverity.Error;
+    }
+    function asHoverContent(value) {
+      if (Is.string(value)) {
+        return new code.MarkdownString(value);
+      } else if (CodeBlock.is(value)) {
+        let result = new code.MarkdownString();
+        return result.appendCodeblock(value.value, value.language);
+      } else if (Array.isArray(value)) {
+        let result = [];
+        for (let element of value) {
+          let item = new code.MarkdownString();
+          if (CodeBlock.is(element)) {
+            item.appendCodeblock(element.value, element.language);
+          } else {
+            item.appendMarkdown(element);
+          }
+          result.push(item);
+        }
+        return result;
+      } else {
+        let result;
+        switch (value.kind) {
+          case ls.MarkupKind.Markdown:
+            return new code.MarkdownString(value.value);
+          case ls.MarkupKind.PlainText:
+            result = new code.MarkdownString();
+            result.appendText(value.value);
+            return result;
+          default:
+            result = new code.MarkdownString();
+            result.appendText(`Unsupported Markup content received. Kind is: ${value.kind}`);
+            return result;
+        }
+      }
+    }
+    function asDocumentation(value) {
+      if (Is.string(value)) {
+        return value;
+      } else {
+        switch (value.kind) {
+          case ls.MarkupKind.Markdown:
+            return new code.MarkdownString(value.value);
+          case ls.MarkupKind.PlainText:
+            return value.value;
+          default:
+            return `Unsupported Markup content received. Kind is: ${value.kind}`;
+        }
+      }
+    }
+    function asHover(hover) {
+      if (!hover) {
+        return void 0;
+      }
+      return new code.Hover(asHoverContent(hover.contents), asRange(hover.range));
+    }
+    function asCompletionResult(result) {
+      if (!result) {
+        return void 0;
+      }
+      if (Array.isArray(result)) {
+        let items = result;
+        return items.map(asCompletionItem);
+      }
+      let list = result;
+      return new code.CompletionList(list.items.map(asCompletionItem), list.isIncomplete);
+    }
+    function asCompletionItemKind(value) {
+      if (ls.CompletionItemKind.Text <= value && value <= ls.CompletionItemKind.TypeParameter) {
+        return [value - 1, void 0];
+      }
+      return [code.CompletionItemKind.Text, value];
+    }
+    function asCompletionItemTag(tag) {
+      switch (tag) {
+        case ls.CompletionItemTag.Deprecated:
+          return code.CompletionItemTag.Deprecated;
+      }
+      return void 0;
+    }
+    function asCompletionItemTags(tags) {
+      if (tags === void 0 || tags === null) {
+        return [];
+      }
+      const result = [];
+      for (let tag of tags) {
+        const converted = asCompletionItemTag(tag);
+        if (converted !== void 0) {
+          result.push(converted);
+        }
+      }
+      return result;
+    }
+    function asCompletionItem(item) {
+      let tags = asCompletionItemTags(item.tags);
+      let result = new protocolCompletionItem_1.default(item.label);
+      if (item.detail) {
+        result.detail = item.detail;
+      }
+      if (item.documentation) {
+        result.documentation = asDocumentation(item.documentation);
+        result.documentationFormat = Is.string(item.documentation) ? "$string" : item.documentation.kind;
+      }
+      if (item.filterText) {
+        result.filterText = item.filterText;
+      }
+      let insertText = asCompletionInsertText(item);
+      if (insertText) {
+        result.insertText = insertText.text;
+        result.range = insertText.range;
+        result.fromEdit = insertText.fromEdit;
+      }
+      if (Is.number(item.kind)) {
+        let [itemKind, original] = asCompletionItemKind(item.kind);
+        result.kind = itemKind;
+        if (original) {
+          result.originalItemKind = original;
+        }
+      }
+      if (item.sortText) {
+        result.sortText = item.sortText;
+      }
+      if (item.additionalTextEdits) {
+        result.additionalTextEdits = asTextEdits(item.additionalTextEdits);
+      }
+      if (Is.stringArray(item.commitCharacters)) {
+        result.commitCharacters = item.commitCharacters.slice();
+      }
+      if (item.command) {
+        result.command = asCommand(item.command);
+      }
+      if (item.deprecated === true || item.deprecated === false) {
+        result.deprecated = item.deprecated;
+        if (item.deprecated === true) {
+          tags.push(code.CompletionItemTag.Deprecated);
+        }
+      }
+      if (item.preselect === true || item.preselect === false) {
+        result.preselect = item.preselect;
+      }
+      if (item.data !== void 0) {
+        result.data = item.data;
+      }
+      if (tags.length > 0) {
+        result.tags = tags;
+      }
+      return result;
+    }
+    function asCompletionInsertText(item) {
+      if (item.textEdit) {
+        if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {
+          return {text: new code.SnippetString(item.textEdit.newText), range: asRange(item.textEdit.range), fromEdit: true};
+        } else {
+          return {text: item.textEdit.newText, range: asRange(item.textEdit.range), fromEdit: true};
+        }
+      } else if (item.insertText) {
+        if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {
+          return {text: new code.SnippetString(item.insertText), fromEdit: false};
+        } else {
+          return {text: item.insertText, fromEdit: false};
+        }
+      } else {
+        return void 0;
+      }
+    }
+    function asTextEdit(edit) {
+      if (!edit) {
+        return void 0;
+      }
+      return new code.TextEdit(asRange(edit.range), edit.newText);
+    }
+    function asTextEdits(items) {
+      if (!items) {
+        return void 0;
+      }
+      return items.map(asTextEdit);
+    }
+    function asSignatureHelp(item) {
+      if (!item) {
+        return void 0;
+      }
+      let result = new code.SignatureHelp();
+      if (Is.number(item.activeSignature)) {
+        result.activeSignature = item.activeSignature;
+      } else {
+        result.activeSignature = 0;
+      }
+      if (Is.number(item.activeParameter)) {
+        result.activeParameter = item.activeParameter;
+      } else {
+        result.activeParameter = 0;
+      }
+      if (item.signatures) {
+        result.signatures = asSignatureInformations(item.signatures);
+      }
+      return result;
+    }
+    function asSignatureInformations(items) {
+      return items.map(asSignatureInformation);
+    }
+    function asSignatureInformation(item) {
+      let result = new code.SignatureInformation(item.label);
+      if (item.documentation) {
+        result.documentation = asDocumentation(item.documentation);
+      }
+      if (item.parameters) {
+        result.parameters = asParameterInformations(item.parameters);
+      }
+      return result;
+    }
+    function asParameterInformations(item) {
+      return item.map(asParameterInformation);
+    }
+    function asParameterInformation(item) {
+      let result = new code.ParameterInformation(item.label);
+      if (item.documentation) {
+        result.documentation = asDocumentation(item.documentation);
+      }
+      return result;
+    }
+    function asLocation(item) {
+      if (!item) {
+        return void 0;
+      }
+      return new code.Location(_uriConverter(item.uri), asRange(item.range));
+    }
+    function asDeclarationResult(item) {
+      if (!item) {
+        return void 0;
+      }
+      return asLocationResult(item);
+    }
+    function asDefinitionResult(item) {
+      if (!item) {
+        return void 0;
+      }
+      return asLocationResult(item);
+    }
+    function asLocationLink(item) {
+      if (!item) {
+        return void 0;
+      }
+      let result = {
+        targetUri: _uriConverter(item.targetUri),
+        targetRange: asRange(item.targetSelectionRange),
+        originSelectionRange: asRange(item.originSelectionRange),
+        targetSelectionRange: asRange(item.targetSelectionRange)
+      };
+      if (!result.targetSelectionRange) {
+        throw new Error(`targetSelectionRange must not be undefined or null`);
+      }
+      return result;
+    }
+    function asLocationResult(item) {
+      if (!item) {
+        return void 0;
+      }
+      if (Is.array(item)) {
+        if (item.length === 0) {
+          return [];
+        } else if (ls.LocationLink.is(item[0])) {
+          let links = item;
+          return links.map((link) => asLocationLink(link));
+        } else {
+          let locations = item;
+          return locations.map((location) => asLocation(location));
+        }
+      } else if (ls.LocationLink.is(item)) {
+        return [asLocationLink(item)];
+      } else {
+        return asLocation(item);
+      }
+    }
+    function asReferences(values) {
+      if (!values) {
+        return void 0;
+      }
+      return values.map((location) => asLocation(location));
+    }
+    function asDocumentHighlights(values) {
+      if (!values) {
+        return void 0;
+      }
+      return values.map(asDocumentHighlight);
+    }
+    function asDocumentHighlight(item) {
+      let result = new code.DocumentHighlight(asRange(item.range));
+      if (Is.number(item.kind)) {
+        result.kind = asDocumentHighlightKind(item.kind);
+      }
+      return result;
+    }
+    function asDocumentHighlightKind(item) {
+      switch (item) {
+        case ls.DocumentHighlightKind.Text:
+          return code.DocumentHighlightKind.Text;
+        case ls.DocumentHighlightKind.Read:
+          return code.DocumentHighlightKind.Read;
+        case ls.DocumentHighlightKind.Write:
+          return code.DocumentHighlightKind.Write;
+      }
+      return code.DocumentHighlightKind.Text;
+    }
+    function asSymbolInformations(values, uri) {
+      if (!values) {
+        return void 0;
+      }
+      return values.map((information) => asSymbolInformation(information, uri));
+    }
+    function asSymbolKind(item) {
+      if (item <= ls.SymbolKind.TypeParameter) {
+        return item - 1;
+      }
+      return code.SymbolKind.Property;
+    }
+    function asSymbolTag(value) {
+      return value;
+    }
+    function asSymbolTags(items) {
+      if (items === void 0 || items === null) {
+        return void 0;
+      }
+      return items.map(asSymbolTag);
+    }
+    function asSymbolInformation(item, uri) {
+      let result = new code.SymbolInformation(item.name, asSymbolKind(item.kind), asRange(item.location.range), item.location.uri ? _uriConverter(item.location.uri) : uri);
+      if (item.containerName) {
+        result.containerName = item.containerName;
+      }
+      return result;
+    }
+    function asDocumentSymbols(values) {
+      if (values === void 0 || values === null) {
+        return void 0;
+      }
+      return values.map(asDocumentSymbol);
+    }
+    function asDocumentSymbol(value) {
+      let result = new code.DocumentSymbol(value.name, value.detail || "", asSymbolKind(value.kind), asRange(value.range), asRange(value.selectionRange));
+      if (value.children !== void 0 && value.children.length > 0) {
+        let children = [];
+        for (let child of value.children) {
+          children.push(asDocumentSymbol(child));
+        }
+        result.children = children;
+      }
+      return result;
+    }
+    function asCommand(item) {
+      let result = {title: item.title, command: item.command};
+      if (item.arguments) {
+        result.arguments = item.arguments;
+      }
+      return result;
+    }
+    function asCommands(items) {
+      if (!items) {
+        return void 0;
+      }
+      return items.map(asCommand);
+    }
+    const kindMapping = new Map();
+    kindMapping.set(ls.CodeActionKind.Empty, code.CodeActionKind.Empty);
+    kindMapping.set(ls.CodeActionKind.QuickFix, code.CodeActionKind.QuickFix);
+    kindMapping.set(ls.CodeActionKind.Refactor, code.CodeActionKind.Refactor);
+    kindMapping.set(ls.CodeActionKind.RefactorExtract, code.CodeActionKind.RefactorExtract);
+    kindMapping.set(ls.CodeActionKind.RefactorInline, code.CodeActionKind.RefactorInline);
+    kindMapping.set(ls.CodeActionKind.RefactorRewrite, code.CodeActionKind.RefactorRewrite);
+    kindMapping.set(ls.CodeActionKind.Source, code.CodeActionKind.Source);
+    kindMapping.set(ls.CodeActionKind.SourceOrganizeImports, code.CodeActionKind.SourceOrganizeImports);
+    function asCodeActionKind(item) {
+      if (item === void 0 || item === null) {
+        return void 0;
+      }
+      let result = kindMapping.get(item);
+      if (result) {
+        return result;
+      }
+      let parts = item.split(".");
+      result = code.CodeActionKind.Empty;
+      for (let part of parts) {
+        result = result.append(part);
+      }
+      return result;
+    }
+    function asCodeActionKinds(items) {
+      if (items === void 0 || items === null) {
+        return void 0;
+      }
+      return items.map((kind) => asCodeActionKind(kind));
+    }
+    function asCodeAction(item) {
+      if (item === void 0 || item === null) {
+        return void 0;
+      }
+      let result = new code.CodeAction(item.title);
+      if (item.kind !== void 0) {
+        result.kind = asCodeActionKind(item.kind);
+      }
+      if (item.diagnostics) {
+        result.diagnostics = asDiagnostics(item.diagnostics);
+      }
+      if (item.edit) {
+        result.edit = asWorkspaceEdit(item.edit);
+      }
+      if (item.command) {
+        result.command = asCommand(item.command);
+      }
+      if (item.isPreferred !== void 0) {
+        result.isPreferred = item.isPreferred;
+      }
+      return result;
+    }
+    function asCodeLens(item) {
+      if (!item) {
+        return void 0;
+      }
+      let result = new protocolCodeLens_1.default(asRange(item.range));
+      if (item.command) {
+        result.command = asCommand(item.command);
+      }
+      if (item.data !== void 0 && item.data !== null) {
+        result.data = item.data;
+      }
+      return result;
+    }
+    function asCodeLenses(items) {
+      if (!items) {
+        return void 0;
+      }
+      return items.map((codeLens) => asCodeLens(codeLens));
+    }
+    function asWorkspaceEdit(item) {
+      if (!item) {
+        return void 0;
+      }
+      let result = new code.WorkspaceEdit();
+      if (item.documentChanges) {
+        item.documentChanges.forEach((change) => {
+          if (ls.CreateFile.is(change)) {
+            result.createFile(_uriConverter(change.uri), change.options);
+          } else if (ls.RenameFile.is(change)) {
+            result.renameFile(_uriConverter(change.oldUri), _uriConverter(change.newUri), change.options);
+          } else if (ls.DeleteFile.is(change)) {
+            result.deleteFile(_uriConverter(change.uri), change.options);
+          } else if (ls.TextDocumentEdit.is(change)) {
+            result.set(_uriConverter(change.textDocument.uri), asTextEdits(change.edits));
+          } else {
+            console.error(`Unknown workspace edit change received:
+${JSON.stringify(change, void 0, 4)}`);
+          }
+        });
+      } else if (item.changes) {
+        Object.keys(item.changes).forEach((key) => {
+          result.set(_uriConverter(key), asTextEdits(item.changes[key]));
+        });
+      }
+      return result;
+    }
+    function asDocumentLink(item) {
+      let range = asRange(item.range);
+      let target = item.target ? asUri(item.target) : void 0;
+      let link = new protocolDocumentLink_1.default(range, target);
+      if (item.tooltip !== void 0) {
+        link.tooltip = item.tooltip;
+      }
+      if (item.data !== void 0 && item.data !== null) {
+        link.data = item.data;
+      }
+      return link;
+    }
+    function asDocumentLinks(items) {
+      if (!items) {
+        return void 0;
+      }
+      return items.map(asDocumentLink);
+    }
+    function asColor(color) {
+      return new code.Color(color.red, color.green, color.blue, color.alpha);
+    }
+    function asColorInformation(ci) {
+      return new code.ColorInformation(asRange(ci.range), asColor(ci.color));
+    }
+    function asColorInformations(colorInformation) {
+      if (Array.isArray(colorInformation)) {
+        return colorInformation.map(asColorInformation);
+      }
+      return void 0;
+    }
+    function asColorPresentation(cp) {
+      let presentation = new code.ColorPresentation(cp.label);
+      presentation.additionalTextEdits = asTextEdits(cp.additionalTextEdits);
+      if (cp.textEdit) {
+        presentation.textEdit = asTextEdit(cp.textEdit);
+      }
+      return presentation;
+    }
+    function asColorPresentations(colorPresentations) {
+      if (Array.isArray(colorPresentations)) {
+        return colorPresentations.map(asColorPresentation);
+      }
+      return void 0;
+    }
+    function asFoldingRangeKind(kind) {
+      if (kind) {
+        switch (kind) {
+          case ls.FoldingRangeKind.Comment:
+            return code.FoldingRangeKind.Comment;
+          case ls.FoldingRangeKind.Imports:
+            return code.FoldingRangeKind.Imports;
+          case ls.FoldingRangeKind.Region:
+            return code.FoldingRangeKind.Region;
+        }
+      }
+      return void 0;
+    }
+    function asFoldingRange(r) {
+      return new code.FoldingRange(r.startLine, r.endLine, asFoldingRangeKind(r.kind));
+    }
+    function asFoldingRanges(foldingRanges) {
+      if (Array.isArray(foldingRanges)) {
+        return foldingRanges.map(asFoldingRange);
+      }
+      return void 0;
+    }
+    function asSelectionRange(selectionRange) {
+      return new code.SelectionRange(asRange(selectionRange.range), selectionRange.parent ? asSelectionRange(selectionRange.parent) : void 0);
+    }
+    function asSelectionRanges(selectionRanges) {
+      if (!Array.isArray(selectionRanges)) {
+        return [];
+      }
+      let result = [];
+      for (let range of selectionRanges) {
+        result.push(asSelectionRange(range));
+      }
+      return result;
+    }
+    return {
+      asUri,
+      asDiagnostics,
+      asDiagnostic,
+      asRange,
+      asRanges,
+      asPosition,
+      asDiagnosticSeverity,
+      asDiagnosticTag,
+      asHover,
+      asCompletionResult,
+      asCompletionItem,
+      asTextEdit,
+      asTextEdits,
+      asSignatureHelp,
+      asSignatureInformations,
+      asSignatureInformation,
+      asParameterInformations,
+      asParameterInformation,
+      asDeclarationResult,
+      asDefinitionResult,
+      asLocation,
+      asReferences,
+      asDocumentHighlights,
+      asDocumentHighlight,
+      asDocumentHighlightKind,
+      asSymbolKind,
+      asSymbolTag,
+      asSymbolTags,
+      asSymbolInformations,
+      asSymbolInformation,
+      asDocumentSymbols,
+      asDocumentSymbol,
+      asCommand,
+      asCommands,
+      asCodeAction,
+      asCodeActionKind,
+      asCodeActionKinds,
+      asCodeLens,
+      asCodeLenses,
+      asWorkspaceEdit,
+      asDocumentLink,
+      asDocumentLinks,
+      asFoldingRangeKind,
+      asFoldingRange,
+      asFoldingRanges,
+      asColor,
+      asColorInformation,
+      asColorInformations,
+      asColorPresentation,
+      asColorPresentations,
+      asSelectionRange,
+      asSelectionRanges
+    };
+  }
+  exports2.createConverter = createConverter;
+});
+
+// node_modules/vscode-languageclient/lib/utils/async.js
+var require_async = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var Delayer = class {
+    constructor(defaultDelay) {
+      this.defaultDelay = defaultDelay;
+      this.timeout = void 0;
+      this.completionPromise = void 0;
+      this.onSuccess = void 0;
+      this.task = void 0;
+    }
+    trigger(task, delay = this.defaultDelay) {
+      this.task = task;
+      if (delay >= 0) {
+        this.cancelTimeout();
+      }
+      if (!this.completionPromise) {
+        this.completionPromise = new Promise((resolve) => {
+          this.onSuccess = resolve;
+        }).then(() => {
+          this.completionPromise = void 0;
+          this.onSuccess = void 0;
+          var result = this.task();
+          this.task = void 0;
+          return result;
+        });
+      }
+      if (delay >= 0 || this.timeout === void 0) {
+        this.timeout = setTimeout(() => {
+          this.timeout = void 0;
+          this.onSuccess(void 0);
+        }, delay >= 0 ? delay : this.defaultDelay);
+      }
+      return this.completionPromise;
+    }
+    forceDelivery() {
+      if (!this.completionPromise) {
+        return void 0;
+      }
+      this.cancelTimeout();
+      let result = this.task();
+      this.completionPromise = void 0;
+      this.onSuccess = void 0;
+      this.task = void 0;
+      return result;
+    }
+    isTriggered() {
+      return this.timeout !== void 0;
+    }
+    cancel() {
+      this.cancelTimeout();
+      this.completionPromise = void 0;
+    }
+    cancelTimeout() {
+      if (this.timeout !== void 0) {
+        clearTimeout(this.timeout);
+        this.timeout = void 0;
+      }
+    }
+  };
+  exports2.Delayer = Delayer;
+});
+
+// node_modules/vscode-languageclient/lib/utils/uuid.js
+var require_uuid = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var ValueUUID = class {
+    constructor(_value) {
+      this._value = _value;
+    }
+    asHex() {
+      return this._value;
+    }
+    equals(other) {
+      return this.asHex() === other.asHex();
+    }
+  };
+  var V4UUID = class extends ValueUUID {
+    constructor() {
+      super([
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        "-",
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        "-",
+        "4",
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        "-",
+        V4UUID._oneOf(V4UUID._timeHighBits),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        "-",
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex(),
+        V4UUID._randomHex()
+      ].join(""));
+    }
+    static _oneOf(array) {
+      return array[Math.floor(array.length * Math.random())];
+    }
+    static _randomHex() {
+      return V4UUID._oneOf(V4UUID._chars);
+    }
+  };
+  V4UUID._chars = ["0", "1", "2", "3", "4", "5", "6", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
+  V4UUID._timeHighBits = ["8", "9", "a", "b"];
+  exports2.empty = new ValueUUID("00000000-0000-0000-0000-000000000000");
+  function v4() {
+    return new V4UUID();
+  }
+  exports2.v4 = v4;
+  var _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+  function isUUID(value) {
+    return _UUIDPattern.test(value);
+  }
+  exports2.isUUID = isUUID;
+  function parse(value) {
+    if (!isUUID(value)) {
+      throw new Error("invalid uuid");
+    }
+    return new ValueUUID(value);
+  }
+  exports2.parse = parse;
+  function generateUuid() {
+    return v4().asHex();
+  }
+  exports2.generateUuid = generateUuid;
+});
+
+// node_modules/vscode-languageclient/lib/progressPart.js
+var require_progressPart = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var Is = require_is3();
+  var ProgressPart = class {
+    constructor(_client, _token) {
+      this._client = _client;
+      this._token = _token;
+      this._reported = 0;
+      this._disposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {
+        switch (value.kind) {
+          case "begin":
+            this.begin(value);
+            break;
+          case "report":
+            this.report(value);
+            break;
+          case "end":
+            this.done();
+            break;
+        }
+      });
+    }
+    begin(params) {
+      let location = params.cancellable ? vscode_1.ProgressLocation.Notification : vscode_1.ProgressLocation.Window;
+      vscode_1.window.withProgress({location, cancellable: params.cancellable, title: params.title}, async (progress, cancellationToken) => {
+        this._progress = progress;
+        this._infinite = params.percentage === void 0;
+        this._cancellationToken = cancellationToken;
+        this._cancellationToken.onCancellationRequested(() => {
+          this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, {token: this._token});
+        });
+        this.report(params);
+        return new Promise((resolve, reject) => {
+          this._resolve = resolve;
+          this._reject = reject;
+        });
+      });
+    }
+    report(params) {
+      if (this._infinite && Is.string(params.message)) {
+        this._progress.report({message: params.message});
+      } else if (Is.number(params.percentage)) {
+        let percentage = Math.max(0, Math.min(params.percentage, 100));
+        let delta = Math.max(0, percentage - this._reported);
+        this._progress.report({message: params.message, increment: delta});
+        this._reported += delta;
+      }
+    }
+    cancel() {
+      if (this._disposable) {
+        this._disposable.dispose();
+        this._disposable = void 0;
+      }
+      if (this._reject) {
+        this._reject();
+        this._resolve = void 0;
+        this._reject = void 0;
+      }
+    }
+    done() {
+      if (this._disposable) {
+        this._disposable.dispose();
+        this._disposable = void 0;
+      }
+      if (this._resolve) {
+        this._resolve();
+        this._resolve = void 0;
+        this._reject = void 0;
+      }
+    }
+  };
+  exports2.ProgressPart = ProgressPart;
+});
+
+// node_modules/vscode-languageclient/lib/client.js
+var require_client = __commonJS((exports2) => {
+  "use strict";
+  function __export2(m) {
+    for (var p in m)
+      if (!exports2.hasOwnProperty(p))
+        exports2[p] = m[p];
+  }
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var c2p = require_codeConverter();
+  var p2c = require_protocolConverter();
+  var Is = require_is3();
+  var async_1 = require_async();
+  var UUID = require_uuid();
+  var progressPart_1 = require_progressPart();
+  __export2(require_main3());
+  var ConsoleLogger = class {
+    error(message) {
+      console.error(message);
+    }
+    warn(message) {
+      console.warn(message);
+    }
+    info(message) {
+      console.info(message);
+    }
+    log(message) {
+      console.log(message);
+    }
+  };
+  function createConnection(input, output, errorHandler, closeHandler) {
+    let logger = new ConsoleLogger();
+    let connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger);
+    connection.onError((data) => {
+      errorHandler(data[0], data[1], data[2]);
+    });
+    connection.onClose(closeHandler);
+    let result = {
+      listen: () => connection.listen(),
+      sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
+      onRequest: (type, handler) => connection.onRequest(Is.string(type) ? type : type.method, handler),
+      sendNotification: (type, params) => connection.sendNotification(Is.string(type) ? type : type.method, params),
+      onNotification: (type, handler) => connection.onNotification(Is.string(type) ? type : type.method, handler),
+      onProgress: connection.onProgress,
+      sendProgress: connection.sendProgress,
+      trace: (value, tracer, sendNotificationOrTraceOptions) => {
+        const defaultTraceOptions = {
+          sendNotification: false,
+          traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text
+        };
+        if (sendNotificationOrTraceOptions === void 0) {
+          connection.trace(value, tracer, defaultTraceOptions);
+        } else if (Is.boolean(sendNotificationOrTraceOptions)) {
+          connection.trace(value, tracer, sendNotificationOrTraceOptions);
+        } else {
+          connection.trace(value, tracer, sendNotificationOrTraceOptions);
+        }
+      },
+      initialize: (params) => connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params),
+      shutdown: () => connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, void 0),
+      exit: () => connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type),
+      onLogMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, handler),
+      onShowMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, handler),
+      onTelemetry: (handler) => connection.onNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, handler),
+      didChangeConfiguration: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, params),
+      didChangeWatchedFiles: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, params),
+      didOpenTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, params),
+      didChangeTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params),
+      didCloseTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, params),
+      didSaveTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, params),
+      onDiagnostics: (handler) => connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, handler),
+      dispose: () => connection.dispose()
+    };
+    return result;
+  }
+  var ErrorAction;
+  (function(ErrorAction2) {
+    ErrorAction2[ErrorAction2["Continue"] = 1] = "Continue";
+    ErrorAction2[ErrorAction2["Shutdown"] = 2] = "Shutdown";
+  })(ErrorAction = exports2.ErrorAction || (exports2.ErrorAction = {}));
+  var CloseAction;
+  (function(CloseAction2) {
+    CloseAction2[CloseAction2["DoNotRestart"] = 1] = "DoNotRestart";
+    CloseAction2[CloseAction2["Restart"] = 2] = "Restart";
+  })(CloseAction = exports2.CloseAction || (exports2.CloseAction = {}));
+  var DefaultErrorHandler = class {
+    constructor(name) {
+      this.name = name;
+      this.restarts = [];
+    }
+    error(_error, _message, count) {
+      if (count && count <= 3) {
+        return ErrorAction.Continue;
+      }
+      return ErrorAction.Shutdown;
+    }
+    closed() {
+      this.restarts.push(Date.now());
+      if (this.restarts.length < 5) {
+        return CloseAction.Restart;
+      } else {
+        let diff = this.restarts[this.restarts.length - 1] - this.restarts[0];
+        if (diff <= 3 * 60 * 1e3) {
+          vscode_1.window.showErrorMessage(`The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`);
+          return CloseAction.DoNotRestart;
+        } else {
+          this.restarts.shift();
+          return CloseAction.Restart;
+        }
+      }
+    }
+  };
+  var RevealOutputChannelOn;
+  (function(RevealOutputChannelOn2) {
+    RevealOutputChannelOn2[RevealOutputChannelOn2["Info"] = 1] = "Info";
+    RevealOutputChannelOn2[RevealOutputChannelOn2["Warn"] = 2] = "Warn";
+    RevealOutputChannelOn2[RevealOutputChannelOn2["Error"] = 3] = "Error";
+    RevealOutputChannelOn2[RevealOutputChannelOn2["Never"] = 4] = "Never";
+  })(RevealOutputChannelOn = exports2.RevealOutputChannelOn || (exports2.RevealOutputChannelOn = {}));
+  var State;
+  (function(State2) {
+    State2[State2["Stopped"] = 1] = "Stopped";
+    State2[State2["Starting"] = 3] = "Starting";
+    State2[State2["Running"] = 2] = "Running";
+  })(State = exports2.State || (exports2.State = {}));
+  var ClientState;
+  (function(ClientState2) {
+    ClientState2[ClientState2["Initial"] = 0] = "Initial";
+    ClientState2[ClientState2["Starting"] = 1] = "Starting";
+    ClientState2[ClientState2["StartFailed"] = 2] = "StartFailed";
+    ClientState2[ClientState2["Running"] = 3] = "Running";
+    ClientState2[ClientState2["Stopping"] = 4] = "Stopping";
+    ClientState2[ClientState2["Stopped"] = 5] = "Stopped";
+  })(ClientState || (ClientState = {}));
+  var SupportedSymbolKinds = [
+    vscode_languageserver_protocol_1.SymbolKind.File,
+    vscode_languageserver_protocol_1.SymbolKind.Module,
+    vscode_languageserver_protocol_1.SymbolKind.Namespace,
+    vscode_languageserver_protocol_1.SymbolKind.Package,
+    vscode_languageserver_protocol_1.SymbolKind.Class,
+    vscode_languageserver_protocol_1.SymbolKind.Method,
+    vscode_languageserver_protocol_1.SymbolKind.Property,
+    vscode_languageserver_protocol_1.SymbolKind.Field,
+    vscode_languageserver_protocol_1.SymbolKind.Constructor,
+    vscode_languageserver_protocol_1.SymbolKind.Enum,
+    vscode_languageserver_protocol_1.SymbolKind.Interface,
+    vscode_languageserver_protocol_1.SymbolKind.Function,
+    vscode_languageserver_protocol_1.SymbolKind.Variable,
+    vscode_languageserver_protocol_1.SymbolKind.Constant,
+    vscode_languageserver_protocol_1.SymbolKind.String,
+    vscode_languageserver_protocol_1.SymbolKind.Number,
+    vscode_languageserver_protocol_1.SymbolKind.Boolean,
+    vscode_languageserver_protocol_1.SymbolKind.Array,
+    vscode_languageserver_protocol_1.SymbolKind.Object,
+    vscode_languageserver_protocol_1.SymbolKind.Key,
+    vscode_languageserver_protocol_1.SymbolKind.Null,
+    vscode_languageserver_protocol_1.SymbolKind.EnumMember,
+    vscode_languageserver_protocol_1.SymbolKind.Struct,
+    vscode_languageserver_protocol_1.SymbolKind.Event,
+    vscode_languageserver_protocol_1.SymbolKind.Operator,
+    vscode_languageserver_protocol_1.SymbolKind.TypeParameter
+  ];
+  var SupportedCompletionItemKinds = [
+    vscode_languageserver_protocol_1.CompletionItemKind.Text,
+    vscode_languageserver_protocol_1.CompletionItemKind.Method,
+    vscode_languageserver_protocol_1.CompletionItemKind.Function,
+    vscode_languageserver_protocol_1.CompletionItemKind.Constructor,
+    vscode_languageserver_protocol_1.CompletionItemKind.Field,
+    vscode_languageserver_protocol_1.CompletionItemKind.Variable,
+    vscode_languageserver_protocol_1.CompletionItemKind.Class,
+    vscode_languageserver_protocol_1.CompletionItemKind.Interface,
+    vscode_languageserver_protocol_1.CompletionItemKind.Module,
+    vscode_languageserver_protocol_1.CompletionItemKind.Property,
+    vscode_languageserver_protocol_1.CompletionItemKind.Unit,
+    vscode_languageserver_protocol_1.CompletionItemKind.Value,
+    vscode_languageserver_protocol_1.CompletionItemKind.Enum,
+    vscode_languageserver_protocol_1.CompletionItemKind.Keyword,
+    vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
+    vscode_languageserver_protocol_1.CompletionItemKind.Color,
+    vscode_languageserver_protocol_1.CompletionItemKind.File,
+    vscode_languageserver_protocol_1.CompletionItemKind.Reference,
+    vscode_languageserver_protocol_1.CompletionItemKind.Folder,
+    vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,
+    vscode_languageserver_protocol_1.CompletionItemKind.Constant,
+    vscode_languageserver_protocol_1.CompletionItemKind.Struct,
+    vscode_languageserver_protocol_1.CompletionItemKind.Event,
+    vscode_languageserver_protocol_1.CompletionItemKind.Operator,
+    vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter
+  ];
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var DynamicFeature;
+  (function(DynamicFeature2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && Is.func(candidate.register) && Is.func(candidate.unregister) && Is.func(candidate.dispose) && candidate.messages !== void 0;
+    }
+    DynamicFeature2.is = is;
+  })(DynamicFeature || (DynamicFeature = {}));
+  var DocumentNotifiactions = class {
+    constructor(_client, _event, _type, _middleware, _createParams, _selectorFilter) {
+      this._client = _client;
+      this._event = _event;
+      this._type = _type;
+      this._middleware = _middleware;
+      this._createParams = _createParams;
+      this._selectorFilter = _selectorFilter;
+      this._selectors = new Map();
+    }
+    static textDocumentFilter(selectors, textDocument) {
+      for (const selector of selectors) {
+        if (vscode_1.languages.match(selector, textDocument)) {
+          return true;
+        }
+      }
+      return false;
+    }
+    register(_message, data) {
+      if (!data.registerOptions.documentSelector) {
+        return;
+      }
+      if (!this._listener) {
+        this._listener = this._event(this.callback, this);
+      }
+      this._selectors.set(data.id, data.registerOptions.documentSelector);
+    }
+    callback(data) {
+      if (!this._selectorFilter || this._selectorFilter(this._selectors.values(), data)) {
+        if (this._middleware) {
+          this._middleware(data, (data2) => this._client.sendNotification(this._type, this._createParams(data2)));
+        } else {
+          this._client.sendNotification(this._type, this._createParams(data));
+        }
+        this.notificationSent(data);
+      }
+    }
+    notificationSent(_data) {
+    }
+    unregister(id) {
+      this._selectors.delete(id);
+      if (this._selectors.size === 0 && this._listener) {
+        this._listener.dispose();
+        this._listener = void 0;
+      }
+    }
+    dispose() {
+      this._selectors.clear();
+      if (this._listener) {
+        this._listener.dispose();
+        this._listener = void 0;
+      }
+    }
+    getProvider(document) {
+      for (const selector of this._selectors.values()) {
+        if (vscode_1.languages.match(selector, document)) {
+          return {
+            send: (data) => {
+              this.callback(data);
+            }
+          };
+        }
+      }
+      throw new Error(`No provider available for the given text document`);
+    }
+  };
+  var DidOpenTextDocumentFeature = class extends DocumentNotifiactions {
+    constructor(client2, _syncedDocuments) {
+      super(client2, vscode_1.workspace.onDidOpenTextDocument, vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, client2.clientOptions.middleware.didOpen, (textDocument) => client2.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);
+      this._syncedDocuments = _syncedDocuments;
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
+      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {
+        this.register(this.messages, {id: UUID.generateUuid(), registerOptions: {documentSelector}});
+      }
+    }
+    register(message, data) {
+      super.register(message, data);
+      if (!data.registerOptions.documentSelector) {
+        return;
+      }
+      let documentSelector = data.registerOptions.documentSelector;
+      vscode_1.workspace.textDocuments.forEach((textDocument) => {
+        let uri = textDocument.uri.toString();
+        if (this._syncedDocuments.has(uri)) {
+          return;
+        }
+        if (vscode_1.languages.match(documentSelector, textDocument)) {
+          let middleware = this._client.clientOptions.middleware;
+          let didOpen = (textDocument2) => {
+            this._client.sendNotification(this._type, this._createParams(textDocument2));
+          };
+          if (middleware.didOpen) {
+            middleware.didOpen(textDocument, didOpen);
+          } else {
+            didOpen(textDocument);
+          }
+          this._syncedDocuments.set(uri, textDocument);
+        }
+      });
+    }
+    notificationSent(textDocument) {
+      super.notificationSent(textDocument);
+      this._syncedDocuments.set(textDocument.uri.toString(), textDocument);
+    }
+  };
+  var DidCloseTextDocumentFeature = class extends DocumentNotifiactions {
+    constructor(client2, _syncedDocuments) {
+      super(client2, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, client2.clientOptions.middleware.didClose, (textDocument) => client2.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);
+      this._syncedDocuments = _syncedDocuments;
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
+      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {
+        this.register(this.messages, {id: UUID.generateUuid(), registerOptions: {documentSelector}});
+      }
+    }
+    notificationSent(textDocument) {
+      super.notificationSent(textDocument);
+      this._syncedDocuments.delete(textDocument.uri.toString());
+    }
+    unregister(id) {
+      let selector = this._selectors.get(id);
+      super.unregister(id);
+      let selectors = this._selectors.values();
+      this._syncedDocuments.forEach((textDocument) => {
+        if (vscode_1.languages.match(selector, textDocument) && !this._selectorFilter(selectors, textDocument)) {
+          let middleware = this._client.clientOptions.middleware;
+          let didClose = (textDocument2) => {
+            this._client.sendNotification(this._type, this._createParams(textDocument2));
+          };
+          this._syncedDocuments.delete(textDocument.uri.toString());
+          if (middleware.didClose) {
+            middleware.didClose(textDocument, didClose);
+          } else {
+            didClose(textDocument);
+          }
+        }
+      });
+    }
+  };
+  var DidChangeTextDocumentFeature = class {
+    constructor(_client) {
+      this._client = _client;
+      this._changeData = new Map();
+      this._forcingDelivery = false;
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
+      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== void 0 && textDocumentSyncOptions.change !== vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
+        this.register(this.messages, {
+          id: UUID.generateUuid(),
+          registerOptions: Object.assign({}, {documentSelector}, {syncKind: textDocumentSyncOptions.change})
+        });
+      }
+    }
+    register(_message, data) {
+      if (!data.registerOptions.documentSelector) {
+        return;
+      }
+      if (!this._listener) {
+        this._listener = vscode_1.workspace.onDidChangeTextDocument(this.callback, this);
+      }
+      this._changeData.set(data.id, {
+        documentSelector: data.registerOptions.documentSelector,
+        syncKind: data.registerOptions.syncKind
+      });
+    }
+    callback(event) {
+      if (event.contentChanges.length === 0) {
+        return;
+      }
+      for (const changeData of this._changeData.values()) {
+        if (vscode_1.languages.match(changeData.documentSelector, event.document)) {
+          let middleware = this._client.clientOptions.middleware;
+          if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental) {
+            let params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event);
+            if (middleware.didChange) {
+              middleware.didChange(event, () => this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params));
+            } else {
+              this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
+            }
+          } else if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {
+            let didChange = (event2) => {
+              if (this._changeDelayer) {
+                if (this._changeDelayer.uri !== event2.document.uri.toString()) {
+                  this.forceDelivery();
+                  this._changeDelayer.uri = event2.document.uri.toString();
+                }
+                this._changeDelayer.delayer.trigger(() => {
+                  this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event2.document));
+                });
+              } else {
+                this._changeDelayer = {
+                  uri: event2.document.uri.toString(),
+                  delayer: new async_1.Delayer(200)
+                };
+                this._changeDelayer.delayer.trigger(() => {
+                  this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event2.document));
+                }, -1);
+              }
+            };
+            if (middleware.didChange) {
+              middleware.didChange(event, didChange);
+            } else {
+              didChange(event);
+            }
+          }
+        }
+      }
+    }
+    unregister(id) {
+      this._changeData.delete(id);
+      if (this._changeData.size === 0 && this._listener) {
+        this._listener.dispose();
+        this._listener = void 0;
+      }
+    }
+    dispose() {
+      this._changeDelayer = void 0;
+      this._forcingDelivery = false;
+      this._changeData.clear();
+      if (this._listener) {
+        this._listener.dispose();
+        this._listener = void 0;
+      }
+    }
+    forceDelivery() {
+      if (this._forcingDelivery || !this._changeDelayer) {
+        return;
+      }
+      try {
+        this._forcingDelivery = true;
+        this._changeDelayer.delayer.forceDelivery();
+      } finally {
+        this._forcingDelivery = false;
+      }
+    }
+    getProvider(document) {
+      for (const changeData of this._changeData.values()) {
+        if (vscode_1.languages.match(changeData.documentSelector, document)) {
+          return {
+            send: (event) => {
+              this.callback(event);
+            }
+          };
+        }
+      }
+      throw new Error(`No provider available for the given text document`);
+    }
+  };
+  var WillSaveFeature = class extends DocumentNotifiactions {
+    constructor(client2) {
+      super(client2, vscode_1.workspace.onWillSaveTextDocument, vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, client2.clientOptions.middleware.willSave, (willSaveEvent) => client2.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (selectors, willSaveEvent) => DocumentNotifiactions.textDocumentFilter(selectors, willSaveEvent.document));
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      let value = ensure(ensure(capabilities, "textDocument"), "synchronization");
+      value.willSave = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
+      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) {
+        this.register(this.messages, {
+          id: UUID.generateUuid(),
+          registerOptions: {documentSelector}
+        });
+      }
+    }
+  };
+  var WillSaveWaitUntilFeature = class {
+    constructor(_client) {
+      this._client = _client;
+      this._selectors = new Map();
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type;
+    }
+    fillClientCapabilities(capabilities) {
+      let value = ensure(ensure(capabilities, "textDocument"), "synchronization");
+      value.willSaveWaitUntil = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
+      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) {
+        this.register(this.messages, {
+          id: UUID.generateUuid(),
+          registerOptions: {documentSelector}
+        });
+      }
+    }
+    register(_message, data) {
+      if (!data.registerOptions.documentSelector) {
+        return;
+      }
+      if (!this._listener) {
+        this._listener = vscode_1.workspace.onWillSaveTextDocument(this.callback, this);
+      }
+      this._selectors.set(data.id, data.registerOptions.documentSelector);
+    }
+    callback(event) {
+      if (DocumentNotifiactions.textDocumentFilter(this._selectors.values(), event.document)) {
+        let middleware = this._client.clientOptions.middleware;
+        let willSaveWaitUntil = (event2) => {
+          return this._client.sendRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, this._client.code2ProtocolConverter.asWillSaveTextDocumentParams(event2)).then((edits) => {
+            let vEdits = this._client.protocol2CodeConverter.asTextEdits(edits);
+            return vEdits === void 0 ? [] : vEdits;
+          });
+        };
+        event.waitUntil(middleware.willSaveWaitUntil ? middleware.willSaveWaitUntil(event, willSaveWaitUntil) : willSaveWaitUntil(event));
+      }
+    }
+    unregister(id) {
+      this._selectors.delete(id);
+      if (this._selectors.size === 0 && this._listener) {
+        this._listener.dispose();
+        this._listener = void 0;
+      }
+    }
+    dispose() {
+      this._selectors.clear();
+      if (this._listener) {
+        this._listener.dispose();
+        this._listener = void 0;
+      }
+    }
+  };
+  var DidSaveTextDocumentFeature = class extends DocumentNotifiactions {
+    constructor(client2) {
+      super(client2, vscode_1.workspace.onDidSaveTextDocument, vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, client2.clientOptions.middleware.didSave, (textDocument) => client2.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), DocumentNotifiactions.textDocumentFilter);
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "textDocument"), "synchronization").didSave = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
+      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {
+        this.register(this.messages, {
+          id: UUID.generateUuid(),
+          registerOptions: Object.assign({}, {documentSelector}, {includeText: !!textDocumentSyncOptions.save.includeText})
+        });
+      }
+    }
+    register(method, data) {
+      this._includeText = !!data.registerOptions.includeText;
+      super.register(method, data);
+    }
+  };
+  var FileSystemWatcherFeature = class {
+    constructor(_client, _notifyFileEvent) {
+      this._client = _client;
+      this._notifyFileEvent = _notifyFileEvent;
+      this._watchers = new Map();
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "workspace"), "didChangeWatchedFiles").dynamicRegistration = true;
+    }
+    initialize(_capabilities, _documentSelector) {
+    }
+    register(_method, data) {
+      if (!Array.isArray(data.registerOptions.watchers)) {
+        return;
+      }
+      let disposeables = [];
+      for (let watcher of data.registerOptions.watchers) {
+        if (!Is.string(watcher.globPattern)) {
+          continue;
+        }
+        let watchCreate = true, watchChange = true, watchDelete = true;
+        if (watcher.kind !== void 0 && watcher.kind !== null) {
+          watchCreate = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Create) !== 0;
+          watchChange = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Change) !== 0;
+          watchDelete = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Delete) !== 0;
+        }
+        let fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher(watcher.globPattern, !watchCreate, !watchChange, !watchDelete);
+        this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete);
+        disposeables.push(fileSystemWatcher);
+      }
+      this._watchers.set(data.id, disposeables);
+    }
+    registerRaw(id, fileSystemWatchers) {
+      let disposeables = [];
+      for (let fileSystemWatcher of fileSystemWatchers) {
+        this.hookListeners(fileSystemWatcher, true, true, true, disposeables);
+      }
+      this._watchers.set(id, disposeables);
+    }
+    hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {
+      if (watchCreate) {
+        fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({
+          uri: this._client.code2ProtocolConverter.asUri(resource),
+          type: vscode_languageserver_protocol_1.FileChangeType.Created
+        }), null, listeners);
+      }
+      if (watchChange) {
+        fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({
+          uri: this._client.code2ProtocolConverter.asUri(resource),
+          type: vscode_languageserver_protocol_1.FileChangeType.Changed
+        }), null, listeners);
+      }
+      if (watchDelete) {
+        fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({
+          uri: this._client.code2ProtocolConverter.asUri(resource),
+          type: vscode_languageserver_protocol_1.FileChangeType.Deleted
+        }), null, listeners);
+      }
+    }
+    unregister(id) {
+      let disposeables = this._watchers.get(id);
+      if (disposeables) {
+        for (let disposable of disposeables) {
+          disposable.dispose();
+        }
+      }
+    }
+    dispose() {
+      this._watchers.forEach((disposeables) => {
+        for (let disposable of disposeables) {
+          disposable.dispose();
+        }
+      });
+      this._watchers.clear();
+    }
+  };
+  var TextDocumentFeature = class {
+    constructor(_client, _message) {
+      this._client = _client;
+      this._message = _message;
+      this._registrations = new Map();
+    }
+    get messages() {
+      return this._message;
+    }
+    register(message, data) {
+      if (message.method !== this.messages.method) {
+        throw new Error(`Register called on wrong feature. Requested ${message.method} but reached feature ${this.messages.method}`);
+      }
+      if (!data.registerOptions.documentSelector) {
+        return;
+      }
+      let registration = this.registerLanguageProvider(data.registerOptions);
+      this._registrations.set(data.id, {disposable: registration[0], data, provider: registration[1]});
+    }
+    unregister(id) {
+      let registration = this._registrations.get(id);
+      if (registration !== void 0) {
+        registration.disposable.dispose();
+      }
+    }
+    dispose() {
+      this._registrations.forEach((value) => {
+        value.disposable.dispose();
+      });
+      this._registrations.clear();
+    }
+    getRegistration(documentSelector, capability) {
+      if (!capability) {
+        return [void 0, void 0];
+      } else if (vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is(capability)) {
+        const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();
+        const selector = capability.documentSelector || documentSelector;
+        if (selector) {
+          return [id, Object.assign({}, capability, {documentSelector: selector})];
+        }
+      } else if (Is.boolean(capability) && capability === true || vscode_languageserver_protocol_1.WorkDoneProgressOptions.is(capability)) {
+        if (!documentSelector) {
+          return [void 0, void 0];
+        }
+        let options = Is.boolean(capability) && capability === true ? {documentSelector} : Object.assign({}, capability, {documentSelector});
+        return [UUID.generateUuid(), options];
+      }
+      return [void 0, void 0];
+    }
+    getRegistrationOptions(documentSelector, capability) {
+      if (!documentSelector || !capability) {
+        return void 0;
+      }
+      return Is.boolean(capability) && capability === true ? {documentSelector} : Object.assign({}, capability, {documentSelector});
+    }
+    getProvider(textDocument) {
+      for (const registration of this._registrations.values()) {
+        let selector = registration.data.registerOptions.documentSelector;
+        if (selector !== null && vscode_1.languages.match(selector, textDocument)) {
+          return registration.provider;
+        }
+      }
+      throw new Error(`The feature has no registration for the provided text document ${textDocument.uri.toString()}`);
+    }
+  };
+  exports2.TextDocumentFeature = TextDocumentFeature;
+  var WorkspaceFeature = class {
+    constructor(_client, _message) {
+      this._client = _client;
+      this._message = _message;
+      this._registrations = new Map();
+    }
+    get messages() {
+      return this._message;
+    }
+    register(message, data) {
+      if (message.method !== this.messages.method) {
+        throw new Error(`Register called on wron feature. Requested ${message.method} but reached feature ${this.messages.method}`);
+      }
+      const registration = this.registerLanguageProvider(data.registerOptions);
+      this._registrations.set(data.id, {disposable: registration[0], provider: registration[1]});
+    }
+    unregister(id) {
+      let registration = this._registrations.get(id);
+      if (registration !== void 0) {
+        registration.disposable.dispose();
+      }
+    }
+    dispose() {
+      this._registrations.forEach((registration) => {
+        registration.disposable.dispose();
+      });
+      this._registrations.clear();
+    }
+    getProviders() {
+      const result = [];
+      for (const registration of this._registrations.values()) {
+        result.push(registration.provider);
+      }
+      return result;
+    }
+  };
+  var CompletionItemFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.CompletionRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let completion = ensure(ensure(capabilites, "textDocument"), "completion");
+      completion.dynamicRegistration = true;
+      completion.contextSupport = true;
+      completion.completionItem = {
+        snippetSupport: true,
+        commitCharactersSupport: true,
+        documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],
+        deprecatedSupport: true,
+        preselectSupport: true,
+        tagSupport: {valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated]}
+      };
+      completion.completionItemKind = {valueSet: SupportedCompletionItemKinds};
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {
+        id: UUID.generateUuid(),
+        registerOptions: options
+      });
+    }
+    registerLanguageProvider(options) {
+      const triggerCharacters = options.triggerCharacters || [];
+      const provider = {
+        provideCompletionItems: (document, position, token, context) => {
+          const client2 = this._client;
+          const middleware = this._client.clientOptions.middleware;
+          const provideCompletionItems = (document2, position2, context2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, client2.code2ProtocolConverter.asCompletionParams(document2, position2, context2), token2).then(client2.protocol2CodeConverter.asCompletionResult, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.CompletionRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          return middleware.provideCompletionItem ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems) : provideCompletionItems(document, position, context, token);
+        },
+        resolveCompletionItem: options.resolveProvider ? (item, token) => {
+          const client2 = this._client;
+          const middleware = this._client.clientOptions.middleware;
+          const resolveCompletionItem = (item2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, client2.code2ProtocolConverter.asCompletionItem(item2), token2).then(client2.protocol2CodeConverter.asCompletionItem, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, error);
+              return Promise.resolve(item2);
+            });
+          };
+          return middleware.resolveCompletionItem ? middleware.resolveCompletionItem(item, token, resolveCompletionItem) : resolveCompletionItem(item, token);
+        } : void 0
+      };
+      return [vscode_1.languages.registerCompletionItemProvider(options.documentSelector, provider, ...triggerCharacters), provider];
+    }
+  };
+  var HoverFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.HoverRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      const hoverCapability = ensure(ensure(capabilites, "textDocument"), "hover");
+      hoverCapability.dynamicRegistration = true;
+      hoverCapability.contentFormat = [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText];
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {
+        id: UUID.generateUuid(),
+        registerOptions: options
+      });
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideHover: (document, position, token) => {
+          const client2 = this._client;
+          const provideHover = (document2, position2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asHover, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.HoverRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideHover ? middleware.provideHover(document, position, token, provideHover) : provideHover(document, position, token);
+        }
+      };
+      return [vscode_1.languages.registerHoverProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var SignatureHelpFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.SignatureHelpRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let config = ensure(ensure(capabilites, "textDocument"), "signatureHelp");
+      config.dynamicRegistration = true;
+      config.signatureInformation = {documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText]};
+      config.signatureInformation.parameterInformation = {labelOffsetSupport: true};
+      config.contextSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {
+        id: UUID.generateUuid(),
+        registerOptions: options
+      });
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideSignatureHelp: (document, position, token, context) => {
+          const client2 = this._client;
+          const providerSignatureHelp = (document2, position2, context2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, client2.code2ProtocolConverter.asSignatureHelpParams(document2, position2, context2), token2).then(client2.protocol2CodeConverter.asSignatureHelp, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideSignatureHelp ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp) : providerSignatureHelp(document, position, context, token);
+        }
+      };
+      let disposable;
+      if (options.retriggerCharacters === void 0) {
+        const triggerCharacters = options.triggerCharacters || [];
+        disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, ...triggerCharacters);
+      } else {
+        const metaData = {
+          triggerCharacters: options.triggerCharacters || [],
+          retriggerCharacters: options.retriggerCharacters || []
+        };
+        disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, metaData);
+      }
+      return [disposable, provider];
+    }
+  };
+  var DefinitionFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DefinitionRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let definitionSupport = ensure(ensure(capabilites, "textDocument"), "definition");
+      definitionSupport.dynamicRegistration = true;
+      definitionSupport.linkSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDefinition: (document, position, token) => {
+          const client2 = this._client;
+          const provideDefinition = (document2, position2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDefinitionResult, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDefinition ? middleware.provideDefinition(document, position, token, provideDefinition) : provideDefinition(document, position, token);
+        }
+      };
+      return [vscode_1.languages.registerDefinitionProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var ReferencesFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.ReferencesRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "references").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideReferences: (document, position, options2, token) => {
+          const client2 = this._client;
+          const _providerReferences = (document2, position2, options3, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, client2.code2ProtocolConverter.asReferenceParams(document2, position2, options3), token2).then(client2.protocol2CodeConverter.asReferences, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideReferences ? middleware.provideReferences(document, position, options2, token, _providerReferences) : _providerReferences(document, position, options2, token);
+        }
+      };
+      return [vscode_1.languages.registerReferenceProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var DocumentHighlightFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentHighlightRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "documentHighlight").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDocumentHighlights: (document, position, token) => {
+          const client2 = this._client;
+          const _provideDocumentHighlights = (document2, position2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDocumentHighlights, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDocumentHighlights ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights) : _provideDocumentHighlights(document, position, token);
+        }
+      };
+      return [vscode_1.languages.registerDocumentHighlightProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var DocumentSymbolFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentSymbolRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let symbolCapabilities = ensure(ensure(capabilites, "textDocument"), "documentSymbol");
+      symbolCapabilities.dynamicRegistration = true;
+      symbolCapabilities.symbolKind = {
+        valueSet: SupportedSymbolKinds
+      };
+      symbolCapabilities.hierarchicalDocumentSymbolSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDocumentSymbols: (document, token) => {
+          const client2 = this._client;
+          const _provideDocumentSymbols = (document2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client2.code2ProtocolConverter.asDocumentSymbolParams(document2), token2).then((data) => {
+              if (data === null) {
+                return void 0;
+              }
+              if (data.length === 0) {
+                return [];
+              } else {
+                let element = data[0];
+                if (vscode_languageserver_protocol_1.DocumentSymbol.is(element)) {
+                  return client2.protocol2CodeConverter.asDocumentSymbols(data);
+                } else {
+                  return client2.protocol2CodeConverter.asSymbolInformations(data);
+                }
+              }
+            }, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDocumentSymbols ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols) : _provideDocumentSymbols(document, token);
+        }
+      };
+      return [vscode_1.languages.registerDocumentSymbolProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var WorkspaceSymbolFeature = class extends WorkspaceFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let symbolCapabilities = ensure(ensure(capabilites, "workspace"), "symbol");
+      symbolCapabilities.dynamicRegistration = true;
+      symbolCapabilities.symbolKind = {
+        valueSet: SupportedSymbolKinds
+      };
+    }
+    initialize(capabilities) {
+      if (!capabilities.workspaceSymbolProvider) {
+        return;
+      }
+      this.register(this.messages, {
+        id: UUID.generateUuid(),
+        registerOptions: capabilities.workspaceSymbolProvider === true ? {workDoneProgress: false} : capabilities.workspaceSymbolProvider
+      });
+    }
+    registerLanguageProvider(_options) {
+      const provider = {
+        provideWorkspaceSymbols: (query, token) => {
+          const client2 = this._client;
+          const provideWorkspaceSymbols = (query2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, {query: query2}, token2).then(client2.protocol2CodeConverter.asSymbolInformations, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideWorkspaceSymbols ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols) : provideWorkspaceSymbols(query, token);
+        }
+      };
+      return [vscode_1.languages.registerWorkspaceSymbolProvider(provider), provider];
+    }
+  };
+  var CodeActionFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.CodeActionRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      const cap = ensure(ensure(capabilites, "textDocument"), "codeAction");
+      cap.dynamicRegistration = true;
+      cap.isPreferredSupport = true;
+      cap.codeActionLiteralSupport = {
+        codeActionKind: {
+          valueSet: [
+            vscode_languageserver_protocol_1.CodeActionKind.Empty,
+            vscode_languageserver_protocol_1.CodeActionKind.QuickFix,
+            vscode_languageserver_protocol_1.CodeActionKind.Refactor,
+            vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract,
+            vscode_languageserver_protocol_1.CodeActionKind.RefactorInline,
+            vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite,
+            vscode_languageserver_protocol_1.CodeActionKind.Source,
+            vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports
+          ]
+        }
+      };
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideCodeActions: (document, range, context, token) => {
+          const client2 = this._client;
+          const _provideCodeActions = (document2, range2, context2, token2) => {
+            const params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              range: client2.code2ProtocolConverter.asRange(range2),
+              context: client2.code2ProtocolConverter.asCodeActionContext(context2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, params, token2).then((values) => {
+              if (values === null) {
+                return void 0;
+              }
+              const result = [];
+              for (let item of values) {
+                if (vscode_languageserver_protocol_1.Command.is(item)) {
+                  result.push(client2.protocol2CodeConverter.asCommand(item));
+                } else {
+                  result.push(client2.protocol2CodeConverter.asCodeAction(item));
+                }
+              }
+              return result;
+            }, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideCodeActions ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions) : _provideCodeActions(document, range, context, token);
+        }
+      };
+      return [vscode_1.languages.registerCodeActionsProvider(options.documentSelector, provider, options.codeActionKinds ? {providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds)} : void 0), provider];
+    }
+  };
+  var CodeLensFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.CodeLensRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "codeLens").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideCodeLenses: (document, token) => {
+          const client2 = this._client;
+          const provideCodeLenses = (document2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, client2.code2ProtocolConverter.asCodeLensParams(document2), token2).then(client2.protocol2CodeConverter.asCodeLenses, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideCodeLenses ? middleware.provideCodeLenses(document, token, provideCodeLenses) : provideCodeLenses(document, token);
+        },
+        resolveCodeLens: options.resolveProvider ? (codeLens, token) => {
+          const client2 = this._client;
+          const resolveCodeLens = (codeLens2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, client2.code2ProtocolConverter.asCodeLens(codeLens2), token2).then(client2.protocol2CodeConverter.asCodeLens, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, error);
+              return codeLens2;
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.resolveCodeLens ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens) : resolveCodeLens(codeLens, token);
+        } : void 0
+      };
+      return [vscode_1.languages.registerCodeLensProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var DocumentFormattingFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentFormattingRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "formatting").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDocumentFormattingEdits: (document, options2, token) => {
+          const client2 = this._client;
+          const provideDocumentFormattingEdits = (document2, options3, token2) => {
+            const params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              options: client2.code2ProtocolConverter.asFormattingOptions(options3)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, params, token2).then(client2.protocol2CodeConverter.asTextEdits, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDocumentFormattingEdits ? middleware.provideDocumentFormattingEdits(document, options2, token, provideDocumentFormattingEdits) : provideDocumentFormattingEdits(document, options2, token);
+        }
+      };
+      return [vscode_1.languages.registerDocumentFormattingEditProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var DocumentRangeFormattingFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "rangeFormatting").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDocumentRangeFormattingEdits: (document, range, options2, token) => {
+          const client2 = this._client;
+          const provideDocumentRangeFormattingEdits = (document2, range2, options3, token2) => {
+            let params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              range: client2.code2ProtocolConverter.asRange(range2),
+              options: client2.code2ProtocolConverter.asFormattingOptions(options3)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, params, token2).then(client2.protocol2CodeConverter.asTextEdits, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          let middleware = client2.clientOptions.middleware;
+          return middleware.provideDocumentRangeFormattingEdits ? middleware.provideDocumentRangeFormattingEdits(document, range, options2, token, provideDocumentRangeFormattingEdits) : provideDocumentRangeFormattingEdits(document, range, options2, token);
+        }
+      };
+      return [vscode_1.languages.registerDocumentRangeFormattingEditProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var DocumentOnTypeFormattingFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "onTypeFormatting").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideOnTypeFormattingEdits: (document, position, ch, options2, token) => {
+          const client2 = this._client;
+          const provideOnTypeFormattingEdits = (document2, position2, ch2, options3, token2) => {
+            let params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              position: client2.code2ProtocolConverter.asPosition(position2),
+              ch: ch2,
+              options: client2.code2ProtocolConverter.asFormattingOptions(options3)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, params, token2).then(client2.protocol2CodeConverter.asTextEdits, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideOnTypeFormattingEdits ? middleware.provideOnTypeFormattingEdits(document, position, ch, options2, token, provideOnTypeFormattingEdits) : provideOnTypeFormattingEdits(document, position, ch, options2, token);
+        }
+      };
+      const moreTriggerCharacter = options.moreTriggerCharacter || [];
+      return [vscode_1.languages.registerOnTypeFormattingEditProvider(options.documentSelector, provider, options.firstTriggerCharacter, ...moreTriggerCharacter), provider];
+    }
+  };
+  var RenameFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.RenameRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let rename = ensure(ensure(capabilites, "textDocument"), "rename");
+      rename.dynamicRegistration = true;
+      rename.prepareSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);
+      if (!options) {
+        return;
+      }
+      if (Is.boolean(capabilities.renameProvider)) {
+        options.prepareProvider = false;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideRenameEdits: (document, position, newName, token) => {
+          const client2 = this._client;
+          const provideRenameEdits = (document2, position2, newName2, token2) => {
+            let params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              position: client2.code2ProtocolConverter.asPosition(position2),
+              newName: newName2
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.RenameRequest.type, params, token2).then(client2.protocol2CodeConverter.asWorkspaceEdit, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.RenameRequest.type, error);
+              return Promise.reject(new Error(error.message));
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideRenameEdits ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits) : provideRenameEdits(document, position, newName, token);
+        },
+        prepareRename: options.prepareProvider ? (document, position, token) => {
+          const client2 = this._client;
+          const prepareRename = (document2, position2, token2) => {
+            let params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              position: client2.code2ProtocolConverter.asPosition(position2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, params, token2).then((result) => {
+              if (vscode_languageserver_protocol_1.Range.is(result)) {
+                return client2.protocol2CodeConverter.asRange(result);
+              } else if (result && vscode_languageserver_protocol_1.Range.is(result.range)) {
+                return {
+                  range: client2.protocol2CodeConverter.asRange(result.range),
+                  placeholder: result.placeholder
+                };
+              }
+              return Promise.reject(new Error(`The element can't be renamed.`));
+            }, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, error);
+              return Promise.reject(new Error(error.message));
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.prepareRename ? middleware.prepareRename(document, position, token, prepareRename) : prepareRename(document, position, token);
+        } : void 0
+      };
+      return [vscode_1.languages.registerRenameProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var DocumentLinkFeature = class extends TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentLinkRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      const documentLinkCapabilities = ensure(ensure(capabilites, "textDocument"), "documentLink");
+      documentLinkCapabilities.dynamicRegistration = true;
+      documentLinkCapabilities.tooltipSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);
+      if (!options) {
+        return;
+      }
+      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDocumentLinks: (document, token) => {
+          const client2 = this._client;
+          const provideDocumentLinks = (document2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, client2.code2ProtocolConverter.asDocumentLinkParams(document2), token2).then(client2.protocol2CodeConverter.asDocumentLinks, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, error);
+              return Promise.resolve([]);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDocumentLinks ? middleware.provideDocumentLinks(document, token, provideDocumentLinks) : provideDocumentLinks(document, token);
+        },
+        resolveDocumentLink: options.resolveProvider ? (link, token) => {
+          const client2 = this._client;
+          let resolveDocumentLink = (link2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, client2.code2ProtocolConverter.asDocumentLink(link2), token2).then(client2.protocol2CodeConverter.asDocumentLink, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, error);
+              return Promise.resolve(link2);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.resolveDocumentLink ? middleware.resolveDocumentLink(link, token, resolveDocumentLink) : resolveDocumentLink(link, token);
+        } : void 0
+      };
+      return [vscode_1.languages.registerDocumentLinkProvider(options.documentSelector, provider), provider];
+    }
+  };
+  var ConfigurationFeature = class {
+    constructor(_client) {
+      this._client = _client;
+      this._listeners = new Map();
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "workspace"), "didChangeConfiguration").dynamicRegistration = true;
+    }
+    initialize() {
+      let section = this._client.clientOptions.synchronize.configurationSection;
+      if (section !== void 0) {
+        this.register(this.messages, {
+          id: UUID.generateUuid(),
+          registerOptions: {
+            section
+          }
+        });
+      }
+    }
+    register(_message, data) {
+      let disposable = vscode_1.workspace.onDidChangeConfiguration((event) => {
+        this.onDidChangeConfiguration(data.registerOptions.section, event);
+      });
+      this._listeners.set(data.id, disposable);
+      if (data.registerOptions.section !== void 0) {
+        this.onDidChangeConfiguration(data.registerOptions.section, void 0);
+      }
+    }
+    unregister(id) {
+      let disposable = this._listeners.get(id);
+      if (disposable) {
+        this._listeners.delete(id);
+        disposable.dispose();
+      }
+    }
+    dispose() {
+      for (let disposable of this._listeners.values()) {
+        disposable.dispose();
+      }
+      this._listeners.clear();
+    }
+    onDidChangeConfiguration(configurationSection, event) {
+      let sections;
+      if (Is.string(configurationSection)) {
+        sections = [configurationSection];
+      } else {
+        sections = configurationSection;
+      }
+      if (sections !== void 0 && event !== void 0) {
+        let affected = sections.some((section) => event.affectsConfiguration(section));
+        if (!affected) {
+          return;
+        }
+      }
+      let didChangeConfiguration = (sections2) => {
+        if (sections2 === void 0) {
+          this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, {settings: null});
+          return;
+        }
+        this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, {settings: this.extractSettingsInformation(sections2)});
+      };
+      let middleware = this.getMiddleware();
+      middleware ? middleware(sections, didChangeConfiguration) : didChangeConfiguration(sections);
+    }
+    extractSettingsInformation(keys) {
+      function ensurePath(config, path) {
+        let current = config;
+        for (let i = 0; i < path.length - 1; i++) {
+          let obj = current[path[i]];
+          if (!obj) {
+            obj = Object.create(null);
+            current[path[i]] = obj;
+          }
+          current = obj;
+        }
+        return current;
+      }
+      let resource = this._client.clientOptions.workspaceFolder ? this._client.clientOptions.workspaceFolder.uri : void 0;
+      let result = Object.create(null);
+      for (let i = 0; i < keys.length; i++) {
+        let key = keys[i];
+        let index = key.indexOf(".");
+        let config = null;
+        if (index >= 0) {
+          config = vscode_1.workspace.getConfiguration(key.substr(0, index), resource).get(key.substr(index + 1));
+        } else {
+          config = vscode_1.workspace.getConfiguration(key, resource);
+        }
+        if (config) {
+          let path = keys[i].split(".");
+          ensurePath(result, path)[path[path.length - 1]] = config;
+        }
+      }
+      return result;
+    }
+    getMiddleware() {
+      let middleware = this._client.clientOptions.middleware;
+      if (middleware.workspace && middleware.workspace.didChangeConfiguration) {
+        return middleware.workspace.didChangeConfiguration;
+      } else {
+        return void 0;
+      }
+    }
+  };
+  var ExecuteCommandFeature = class {
+    constructor(_client) {
+      this._client = _client;
+      this._commands = new Map();
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.ExecuteCommandRequest.type;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(ensure(capabilities, "workspace"), "executeCommand").dynamicRegistration = true;
+    }
+    initialize(capabilities) {
+      if (!capabilities.executeCommandProvider) {
+        return;
+      }
+      this.register(this.messages, {
+        id: UUID.generateUuid(),
+        registerOptions: Object.assign({}, capabilities.executeCommandProvider)
+      });
+    }
+    register(_message, data) {
+      const client2 = this._client;
+      const middleware = client2.clientOptions.middleware;
+      const executeCommand = (command, args) => {
+        let params = {
+          command,
+          arguments: args
+        };
+        return client2.sendRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, params).then(void 0, (error) => {
+          client2.logFailedRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, error);
+        });
+      };
+      if (data.registerOptions.commands) {
+        const disposeables = [];
+        for (const command of data.registerOptions.commands) {
+          disposeables.push(vscode_1.commands.registerCommand(command, (...args) => {
+            return middleware.executeCommand ? middleware.executeCommand(command, args, executeCommand) : executeCommand(command, args);
+          }));
+        }
+        this._commands.set(data.id, disposeables);
+      }
+    }
+    unregister(id) {
+      let disposeables = this._commands.get(id);
+      if (disposeables) {
+        disposeables.forEach((disposable) => disposable.dispose());
+      }
+    }
+    dispose() {
+      this._commands.forEach((value) => {
+        value.forEach((disposable) => disposable.dispose());
+      });
+      this._commands.clear();
+    }
+  };
+  var MessageTransports;
+  (function(MessageTransports2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && vscode_languageserver_protocol_1.MessageReader.is(value.reader) && vscode_languageserver_protocol_1.MessageWriter.is(value.writer);
+    }
+    MessageTransports2.is = is;
+  })(MessageTransports = exports2.MessageTransports || (exports2.MessageTransports = {}));
+  var OnReady = class {
+    constructor(_resolve, _reject) {
+      this._resolve = _resolve;
+      this._reject = _reject;
+      this._used = false;
+    }
+    get isUsed() {
+      return this._used;
+    }
+    resolve() {
+      this._used = true;
+      this._resolve();
+    }
+    reject(error) {
+      this._used = true;
+      this._reject(error);
+    }
+  };
+  var BaseLanguageClient = class {
+    constructor(id, name, clientOptions) {
+      this._traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;
+      this._features = [];
+      this._method2Message = new Map();
+      this._dynamicFeatures = new Map();
+      this._id = id;
+      this._name = name;
+      clientOptions = clientOptions || {};
+      this._clientOptions = {
+        documentSelector: clientOptions.documentSelector || [],
+        synchronize: clientOptions.synchronize || {},
+        diagnosticCollectionName: clientOptions.diagnosticCollectionName,
+        outputChannelName: clientOptions.outputChannelName || this._name,
+        revealOutputChannelOn: clientOptions.revealOutputChannelOn || RevealOutputChannelOn.Error,
+        stdioEncoding: clientOptions.stdioEncoding || "utf8",
+        initializationOptions: clientOptions.initializationOptions,
+        initializationFailedHandler: clientOptions.initializationFailedHandler,
+        progressOnInitialization: !!clientOptions.progressOnInitialization,
+        errorHandler: clientOptions.errorHandler || new DefaultErrorHandler(this._name),
+        middleware: clientOptions.middleware || {},
+        uriConverters: clientOptions.uriConverters,
+        workspaceFolder: clientOptions.workspaceFolder
+      };
+      this._clientOptions.synchronize = this._clientOptions.synchronize || {};
+      this.state = ClientState.Initial;
+      this._connectionPromise = void 0;
+      this._resolvedConnection = void 0;
+      this._initializeResult = void 0;
+      if (clientOptions.outputChannel) {
+        this._outputChannel = clientOptions.outputChannel;
+        this._disposeOutputChannel = false;
+      } else {
+        this._outputChannel = void 0;
+        this._disposeOutputChannel = true;
+      }
+      this._traceOutputChannel = clientOptions.traceOutputChannel;
+      this._listeners = void 0;
+      this._providers = void 0;
+      this._diagnostics = void 0;
+      this._fileEvents = [];
+      this._fileEventDelayer = new async_1.Delayer(250);
+      this._onReady = new Promise((resolve, reject) => {
+        this._onReadyCallbacks = new OnReady(resolve, reject);
+      });
+      this._onStop = void 0;
+      this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter();
+      this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter();
+      this._tracer = {
+        log: (messageOrDataObject, data) => {
+          if (Is.string(messageOrDataObject)) {
+            this.logTrace(messageOrDataObject, data);
+          } else {
+            this.logObjectTrace(messageOrDataObject);
+          }
+        }
+      };
+      this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : void 0);
+      this._p2c = p2c.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : void 0);
+      this._syncedDocuments = new Map();
+      this.registerBuiltinFeatures();
+    }
+    get state() {
+      return this._state;
+    }
+    set state(value) {
+      let oldState = this.getPublicState();
+      this._state = value;
+      let newState = this.getPublicState();
+      if (newState !== oldState) {
+        this._stateChangeEmitter.fire({oldState, newState});
+      }
+    }
+    getPublicState() {
+      if (this.state === ClientState.Running) {
+        return State.Running;
+      } else if (this.state === ClientState.Starting) {
+        return State.Starting;
+      } else {
+        return State.Stopped;
+      }
+    }
+    get initializeResult() {
+      return this._initializeResult;
+    }
+    sendRequest(type, ...params) {
+      if (!this.isConnectionActive()) {
+        throw new Error("Language client is not ready yet");
+      }
+      this.forceDocumentSync();
+      try {
+        return this._resolvedConnection.sendRequest(type, ...params);
+      } catch (error) {
+        this.error(`Sending request ${Is.string(type) ? type : type.method} failed.`, error);
+        throw error;
+      }
+    }
+    onRequest(type, handler) {
+      if (!this.isConnectionActive()) {
+        throw new Error("Language client is not ready yet");
+      }
+      try {
+        this._resolvedConnection.onRequest(type, handler);
+      } catch (error) {
+        this.error(`Registering request handler ${Is.string(type) ? type : type.method} failed.`, error);
+        throw error;
+      }
+    }
+    sendNotification(type, params) {
+      if (!this.isConnectionActive()) {
+        throw new Error("Language client is not ready yet");
+      }
+      this.forceDocumentSync();
+      try {
+        this._resolvedConnection.sendNotification(type, params);
+      } catch (error) {
+        this.error(`Sending notification ${Is.string(type) ? type : type.method} failed.`, error);
+        throw error;
+      }
+    }
+    onNotification(type, handler) {
+      if (!this.isConnectionActive()) {
+        throw new Error("Language client is not ready yet");
+      }
+      try {
+        this._resolvedConnection.onNotification(type, handler);
+      } catch (error) {
+        this.error(`Registering notification handler ${Is.string(type) ? type : type.method} failed.`, error);
+        throw error;
+      }
+    }
+    onProgress(type, token, handler) {
+      if (!this.isConnectionActive()) {
+        throw new Error("Language client is not ready yet");
+      }
+      try {
+        return this._resolvedConnection.onProgress(type, token, handler);
+      } catch (error) {
+        this.error(`Registering progress handler for token ${token} failed.`, error);
+        throw error;
+      }
+    }
+    sendProgress(type, token, value) {
+      if (!this.isConnectionActive()) {
+        throw new Error("Language client is not ready yet");
+      }
+      this.forceDocumentSync();
+      try {
+        this._resolvedConnection.sendProgress(type, token, value);
+      } catch (error) {
+        this.error(`Sending progress for token ${token} failed.`, error);
+        throw error;
+      }
+    }
+    get clientOptions() {
+      return this._clientOptions;
+    }
+    get protocol2CodeConverter() {
+      return this._p2c;
+    }
+    get code2ProtocolConverter() {
+      return this._c2p;
+    }
+    get onTelemetry() {
+      return this._telemetryEmitter.event;
+    }
+    get onDidChangeState() {
+      return this._stateChangeEmitter.event;
+    }
+    get outputChannel() {
+      if (!this._outputChannel) {
+        this._outputChannel = vscode_1.window.createOutputChannel(this._clientOptions.outputChannelName ? this._clientOptions.outputChannelName : this._name);
+      }
+      return this._outputChannel;
+    }
+    get traceOutputChannel() {
+      if (this._traceOutputChannel) {
+        return this._traceOutputChannel;
+      }
+      return this.outputChannel;
+    }
+    get diagnostics() {
+      return this._diagnostics;
+    }
+    createDefaultErrorHandler() {
+      return new DefaultErrorHandler(this._name);
+    }
+    set trace(value) {
+      this._trace = value;
+      this.onReady().then(() => {
+        this.resolveConnection().then((connection) => {
+          connection.trace(this._trace, this._tracer, {
+            sendNotification: false,
+            traceFormat: this._traceFormat
+          });
+        });
+      }, () => {
+      });
+    }
+    data2String(data) {
+      if (data instanceof vscode_languageserver_protocol_1.ResponseError) {
+        const responseError = data;
+        return `  Message: ${responseError.message}
+  Code: ${responseError.code} ${responseError.data ? "\n" + responseError.data.toString() : ""}`;
+      }
+      if (data instanceof Error) {
+        if (Is.string(data.stack)) {
+          return data.stack;
+        }
+        return data.message;
+      }
+      if (Is.string(data)) {
+        return data;
+      }
+      return data.toString();
+    }
+    info(message, data, showNotification = true) {
+      this.outputChannel.appendLine(`[Info  - ${new Date().toLocaleTimeString()}] ${message}`);
+      if (data) {
+        this.outputChannel.appendLine(this.data2String(data));
+      }
+      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Info) {
+        this.showNotificationMessage();
+      }
+    }
+    warn(message, data, showNotification = true) {
+      this.outputChannel.appendLine(`[Warn  - ${new Date().toLocaleTimeString()}] ${message}`);
+      if (data) {
+        this.outputChannel.appendLine(this.data2String(data));
+      }
+      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Warn) {
+        this.showNotificationMessage();
+      }
+    }
+    error(message, data, showNotification = true) {
+      this.outputChannel.appendLine(`[Error - ${new Date().toLocaleTimeString()}] ${message}`);
+      if (data) {
+        this.outputChannel.appendLine(this.data2String(data));
+      }
+      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Error) {
+        this.showNotificationMessage();
+      }
+    }
+    showNotificationMessage() {
+      vscode_1.window.showInformationMessage("A request has failed. See the output for more information.", "Go to output").then(() => {
+        this.outputChannel.show(true);
+      });
+    }
+    logTrace(message, data) {
+      this.traceOutputChannel.appendLine(`[Trace - ${new Date().toLocaleTimeString()}] ${message}`);
+      if (data) {
+        this.traceOutputChannel.appendLine(this.data2String(data));
+      }
+    }
+    logObjectTrace(data) {
+      if (data.isLSPMessage && data.type) {
+        this.traceOutputChannel.append(`[LSP   - ${new Date().toLocaleTimeString()}] `);
+      } else {
+        this.traceOutputChannel.append(`[Trace - ${new Date().toLocaleTimeString()}] `);
+      }
+      if (data) {
+        this.traceOutputChannel.appendLine(`${JSON.stringify(data)}`);
+      }
+    }
+    needsStart() {
+      return this.state === ClientState.Initial || this.state === ClientState.Stopping || this.state === ClientState.Stopped;
+    }
+    needsStop() {
+      return this.state === ClientState.Starting || this.state === ClientState.Running;
+    }
+    onReady() {
+      return this._onReady;
+    }
+    isConnectionActive() {
+      return this.state === ClientState.Running && !!this._resolvedConnection;
+    }
+    start() {
+      if (this._onReadyCallbacks.isUsed) {
+        this._onReady = new Promise((resolve, reject) => {
+          this._onReadyCallbacks = new OnReady(resolve, reject);
+        });
+      }
+      this._listeners = [];
+      this._providers = [];
+      if (!this._diagnostics) {
+        this._diagnostics = this._clientOptions.diagnosticCollectionName ? vscode_1.languages.createDiagnosticCollection(this._clientOptions.diagnosticCollectionName) : vscode_1.languages.createDiagnosticCollection();
+      }
+      this.state = ClientState.Starting;
+      this.resolveConnection().then((connection) => {
+        connection.onLogMessage((message) => {
+          switch (message.type) {
+            case vscode_languageserver_protocol_1.MessageType.Error:
+              this.error(message.message, void 0, false);
+              break;
+            case vscode_languageserver_protocol_1.MessageType.Warning:
+              this.warn(message.message, void 0, false);
+              break;
+            case vscode_languageserver_protocol_1.MessageType.Info:
+              this.info(message.message, void 0, false);
+              break;
+            default:
+              this.outputChannel.appendLine(message.message);
+          }
+        });
+        connection.onShowMessage((message) => {
+          switch (message.type) {
+            case vscode_languageserver_protocol_1.MessageType.Error:
+              vscode_1.window.showErrorMessage(message.message);
+              break;
+            case vscode_languageserver_protocol_1.MessageType.Warning:
+              vscode_1.window.showWarningMessage(message.message);
+              break;
+            case vscode_languageserver_protocol_1.MessageType.Info:
+              vscode_1.window.showInformationMessage(message.message);
+              break;
+            default:
+              vscode_1.window.showInformationMessage(message.message);
+          }
+        });
+        connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, (params) => {
+          let messageFunc;
+          switch (params.type) {
+            case vscode_languageserver_protocol_1.MessageType.Error:
+              messageFunc = vscode_1.window.showErrorMessage;
+              break;
+            case vscode_languageserver_protocol_1.MessageType.Warning:
+              messageFunc = vscode_1.window.showWarningMessage;
+              break;
+            case vscode_languageserver_protocol_1.MessageType.Info:
+              messageFunc = vscode_1.window.showInformationMessage;
+              break;
+            default:
+              messageFunc = vscode_1.window.showInformationMessage;
+          }
+          let actions = params.actions || [];
+          return messageFunc(params.message, ...actions);
+        });
+        connection.onTelemetry((data) => {
+          this._telemetryEmitter.fire(data);
+        });
+        connection.listen();
+        return this.initialize(connection);
+      }).then(void 0, (error) => {
+        this.state = ClientState.StartFailed;
+        this._onReadyCallbacks.reject(error);
+        this.error("Starting client failed", error);
+        vscode_1.window.showErrorMessage(`Couldn't start client ${this._name}`);
+      });
+      return new vscode_1.Disposable(() => {
+        if (this.needsStop()) {
+          this.stop();
+        }
+      });
+    }
+    resolveConnection() {
+      if (!this._connectionPromise) {
+        this._connectionPromise = this.createConnection();
+      }
+      return this._connectionPromise;
+    }
+    initialize(connection) {
+      this.refreshTrace(connection, false);
+      let initOption = this._clientOptions.initializationOptions;
+      let rootPath = this._clientOptions.workspaceFolder ? this._clientOptions.workspaceFolder.uri.fsPath : this._clientGetRootPath();
+      let initParams = {
+        processId: process.pid,
+        clientInfo: {
+          name: "vscode",
+          version: vscode_1.version
+        },
+        rootPath: rootPath ? rootPath : null,
+        rootUri: rootPath ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) : null,
+        capabilities: this.computeClientCapabilities(),
+        initializationOptions: Is.func(initOption) ? initOption() : initOption,
+        trace: vscode_languageserver_protocol_1.Trace.toString(this._trace),
+        workspaceFolders: null
+      };
+      this.fillInitializeParams(initParams);
+      if (this._clientOptions.progressOnInitialization) {
+        const token = UUID.generateUuid();
+        const part = new progressPart_1.ProgressPart(connection, token);
+        initParams.workDoneToken = token;
+        return this.doInitialize(connection, initParams).then((result) => {
+          part.done();
+          return result;
+        }, (error) => {
+          part.cancel();
+          throw error;
+        });
+      } else {
+        return this.doInitialize(connection, initParams);
+      }
+    }
+    doInitialize(connection, initParams) {
+      return connection.initialize(initParams).then((result) => {
+        this._resolvedConnection = connection;
+        this._initializeResult = result;
+        this.state = ClientState.Running;
+        let textDocumentSyncOptions = void 0;
+        if (Is.number(result.capabilities.textDocumentSync)) {
+          if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
+            textDocumentSyncOptions = {
+              openClose: false,
+              change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,
+              save: void 0
+            };
+          } else {
+            textDocumentSyncOptions = {
+              openClose: true,
+              change: result.capabilities.textDocumentSync,
+              save: {
+                includeText: false
+              }
+            };
+          }
+        } else if (result.capabilities.textDocumentSync !== void 0 && result.capabilities.textDocumentSync !== null) {
+          textDocumentSyncOptions = result.capabilities.textDocumentSync;
+        }
+        this._capabilities = Object.assign({}, result.capabilities, {resolvedTextDocumentSync: textDocumentSyncOptions});
+        connection.onDiagnostics((params) => this.handleDiagnostics(params));
+        connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, (params) => this.handleRegistrationRequest(params));
+        connection.onRequest("client/registerFeature", (params) => this.handleRegistrationRequest(params));
+        connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, (params) => this.handleUnregistrationRequest(params));
+        connection.onRequest("client/unregisterFeature", (params) => this.handleUnregistrationRequest(params));
+        connection.onRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, (params) => this.handleApplyWorkspaceEdit(params));
+        connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});
+        this.hookFileEvents(connection);
+        this.hookConfigurationChanged(connection);
+        this.initializeFeatures(connection);
+        this._onReadyCallbacks.resolve();
+        return result;
+      }).then(void 0, (error) => {
+        if (this._clientOptions.initializationFailedHandler) {
+          if (this._clientOptions.initializationFailedHandler(error)) {
+            this.initialize(connection);
+          } else {
+            this.stop();
+            this._onReadyCallbacks.reject(error);
+          }
+        } else if (error instanceof vscode_languageserver_protocol_1.ResponseError && error.data && error.data.retry) {
+          vscode_1.window.showErrorMessage(error.message, {title: "Retry", id: "retry"}).then((item) => {
+            if (item && item.id === "retry") {
+              this.initialize(connection);
+            } else {
+              this.stop();
+              this._onReadyCallbacks.reject(error);
+            }
+          });
+        } else {
+          if (error && error.message) {
+            vscode_1.window.showErrorMessage(error.message);
+          }
+          this.error("Server initialization failed.", error);
+          this.stop();
+          this._onReadyCallbacks.reject(error);
+        }
+        throw error;
+      });
+    }
+    _clientGetRootPath() {
+      let folders = vscode_1.workspace.workspaceFolders;
+      if (!folders || folders.length === 0) {
+        return void 0;
+      }
+      let folder = folders[0];
+      if (folder.uri.scheme === "file") {
+        return folder.uri.fsPath;
+      }
+      return void 0;
+    }
+    stop() {
+      this._initializeResult = void 0;
+      if (!this._connectionPromise) {
+        this.state = ClientState.Stopped;
+        return Promise.resolve();
+      }
+      if (this.state === ClientState.Stopping && this._onStop) {
+        return this._onStop;
+      }
+      this.state = ClientState.Stopping;
+      this.cleanUp(false);
+      return this._onStop = this.resolveConnection().then((connection) => {
+        return connection.shutdown().then(() => {
+          connection.exit();
+          connection.dispose();
+          this.state = ClientState.Stopped;
+          this.cleanUpChannel();
+          this._onStop = void 0;
+          this._connectionPromise = void 0;
+          this._resolvedConnection = void 0;
+        });
+      });
+    }
+    cleanUp(channel = true, diagnostics = true) {
+      if (this._listeners) {
+        this._listeners.forEach((listener) => listener.dispose());
+        this._listeners = void 0;
+      }
+      if (this._providers) {
+        this._providers.forEach((provider) => provider.dispose());
+        this._providers = void 0;
+      }
+      if (this._syncedDocuments) {
+        this._syncedDocuments.clear();
+      }
+      for (let handler of this._dynamicFeatures.values()) {
+        handler.dispose();
+      }
+      if (channel) {
+        this.cleanUpChannel();
+      }
+      if (diagnostics && this._diagnostics) {
+        this._diagnostics.dispose();
+        this._diagnostics = void 0;
+      }
+    }
+    cleanUpChannel() {
+      if (this._outputChannel && this._disposeOutputChannel) {
+        this._outputChannel.dispose();
+        this._outputChannel = void 0;
+      }
+    }
+    notifyFileEvent(event) {
+      var _a, _b;
+      const client2 = this;
+      function didChangeWatchedFile(event2) {
+        client2._fileEvents.push(event2);
+        client2._fileEventDelayer.trigger(() => {
+          client2.onReady().then(() => {
+            client2.resolveConnection().then((connection) => {
+              if (client2.isConnectionActive()) {
+                client2.forceDocumentSync();
+                connection.didChangeWatchedFiles({changes: client2._fileEvents});
+              }
+              client2._fileEvents = [];
+            });
+          }, (error) => {
+            client2.error(`Notify file events failed.`, error);
+          });
+        });
+      }
+      const workSpaceMiddleware = (_a = this.clientOptions.middleware) === null || _a === void 0 ? void 0 : _a.workspace;
+      ((_b = workSpaceMiddleware) === null || _b === void 0 ? void 0 : _b.didChangeWatchedFile) ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event);
+    }
+    forceDocumentSync() {
+      this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method).forceDelivery();
+    }
+    handleDiagnostics(params) {
+      if (!this._diagnostics) {
+        return;
+      }
+      let uri = this._p2c.asUri(params.uri);
+      let diagnostics = this._p2c.asDiagnostics(params.diagnostics);
+      let middleware = this.clientOptions.middleware;
+      if (middleware.handleDiagnostics) {
+        middleware.handleDiagnostics(uri, diagnostics, (uri2, diagnostics2) => this.setDiagnostics(uri2, diagnostics2));
+      } else {
+        this.setDiagnostics(uri, diagnostics);
+      }
+    }
+    setDiagnostics(uri, diagnostics) {
+      if (!this._diagnostics) {
+        return;
+      }
+      this._diagnostics.set(uri, diagnostics);
+    }
+    createConnection() {
+      let errorHandler = (error, message, count) => {
+        this.handleConnectionError(error, message, count);
+      };
+      let closeHandler = () => {
+        this.handleConnectionClosed();
+      };
+      return this.createMessageTransports(this._clientOptions.stdioEncoding || "utf8").then((transports) => {
+        return createConnection(transports.reader, transports.writer, errorHandler, closeHandler);
+      });
+    }
+    handleConnectionClosed() {
+      if (this.state === ClientState.Stopping || this.state === ClientState.Stopped) {
+        return;
+      }
+      try {
+        if (this._resolvedConnection) {
+          this._resolvedConnection.dispose();
+        }
+      } catch (error) {
+      }
+      let action = CloseAction.DoNotRestart;
+      try {
+        action = this._clientOptions.errorHandler.closed();
+      } catch (error) {
+      }
+      this._connectionPromise = void 0;
+      this._resolvedConnection = void 0;
+      if (action === CloseAction.DoNotRestart) {
+        this.error("Connection to server got closed. Server will not be restarted.");
+        this.state = ClientState.Stopped;
+        this.cleanUp(false, true);
+      } else if (action === CloseAction.Restart) {
+        this.info("Connection to server got closed. Server will restart.");
+        this.cleanUp(false, false);
+        this.state = ClientState.Initial;
+        this.start();
+      }
+    }
+    handleConnectionError(error, message, count) {
+      let action = this._clientOptions.errorHandler.error(error, message, count);
+      if (action === ErrorAction.Shutdown) {
+        this.error("Connection to server is erroring. Shutting down server.");
+        this.stop();
+      }
+    }
+    hookConfigurationChanged(connection) {
+      vscode_1.workspace.onDidChangeConfiguration(() => {
+        this.refreshTrace(connection, true);
+      });
+    }
+    refreshTrace(connection, sendNotification = false) {
+      let config = vscode_1.workspace.getConfiguration(this._id);
+      let trace = vscode_languageserver_protocol_1.Trace.Off;
+      let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;
+      if (config) {
+        const traceConfig = config.get("trace.server", "off");
+        if (typeof traceConfig === "string") {
+          trace = vscode_languageserver_protocol_1.Trace.fromString(traceConfig);
+        } else {
+          trace = vscode_languageserver_protocol_1.Trace.fromString(config.get("trace.server.verbosity", "off"));
+          traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString(config.get("trace.server.format", "text"));
+        }
+      }
+      this._trace = trace;
+      this._traceFormat = traceFormat;
+      connection.trace(this._trace, this._tracer, {
+        sendNotification,
+        traceFormat: this._traceFormat
+      });
+    }
+    hookFileEvents(_connection) {
+      let fileEvents = this._clientOptions.synchronize.fileEvents;
+      if (!fileEvents) {
+        return;
+      }
+      let watchers;
+      if (Is.array(fileEvents)) {
+        watchers = fileEvents;
+      } else {
+        watchers = [fileEvents];
+      }
+      if (!watchers) {
+        return;
+      }
+      this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type.method).registerRaw(UUID.generateUuid(), watchers);
+    }
+    registerFeatures(features) {
+      for (let feature of features) {
+        this.registerFeature(feature);
+      }
+    }
+    registerFeature(feature) {
+      this._features.push(feature);
+      if (DynamicFeature.is(feature)) {
+        let messages = feature.messages;
+        if (Array.isArray(messages)) {
+          for (let message of messages) {
+            this._method2Message.set(message.method, message);
+            this._dynamicFeatures.set(message.method, feature);
+          }
+        } else {
+          this._method2Message.set(messages.method, messages);
+          this._dynamicFeatures.set(messages.method, feature);
+        }
+      }
+    }
+    getFeature(request) {
+      return this._dynamicFeatures.get(request);
+    }
+    registerBuiltinFeatures() {
+      this.registerFeature(new ConfigurationFeature(this));
+      this.registerFeature(new DidOpenTextDocumentFeature(this, this._syncedDocuments));
+      this.registerFeature(new DidChangeTextDocumentFeature(this));
+      this.registerFeature(new WillSaveFeature(this));
+      this.registerFeature(new WillSaveWaitUntilFeature(this));
+      this.registerFeature(new DidSaveTextDocumentFeature(this));
+      this.registerFeature(new DidCloseTextDocumentFeature(this, this._syncedDocuments));
+      this.registerFeature(new FileSystemWatcherFeature(this, (event) => this.notifyFileEvent(event)));
+      this.registerFeature(new CompletionItemFeature(this));
+      this.registerFeature(new HoverFeature(this));
+      this.registerFeature(new SignatureHelpFeature(this));
+      this.registerFeature(new DefinitionFeature(this));
+      this.registerFeature(new ReferencesFeature(this));
+      this.registerFeature(new DocumentHighlightFeature(this));
+      this.registerFeature(new DocumentSymbolFeature(this));
+      this.registerFeature(new WorkspaceSymbolFeature(this));
+      this.registerFeature(new CodeActionFeature(this));
+      this.registerFeature(new CodeLensFeature(this));
+      this.registerFeature(new DocumentFormattingFeature(this));
+      this.registerFeature(new DocumentRangeFormattingFeature(this));
+      this.registerFeature(new DocumentOnTypeFormattingFeature(this));
+      this.registerFeature(new RenameFeature(this));
+      this.registerFeature(new DocumentLinkFeature(this));
+      this.registerFeature(new ExecuteCommandFeature(this));
+    }
+    fillInitializeParams(params) {
+      for (let feature of this._features) {
+        if (Is.func(feature.fillInitializeParams)) {
+          feature.fillInitializeParams(params);
+        }
+      }
+    }
+    computeClientCapabilities() {
+      let result = {};
+      ensure(result, "workspace").applyEdit = true;
+      let workspaceEdit = ensure(ensure(result, "workspace"), "workspaceEdit");
+      workspaceEdit.documentChanges = true;
+      workspaceEdit.resourceOperations = [vscode_languageserver_protocol_1.ResourceOperationKind.Create, vscode_languageserver_protocol_1.ResourceOperationKind.Rename, vscode_languageserver_protocol_1.ResourceOperationKind.Delete];
+      workspaceEdit.failureHandling = vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional;
+      let diagnostics = ensure(ensure(result, "textDocument"), "publishDiagnostics");
+      diagnostics.relatedInformation = true;
+      diagnostics.versionSupport = false;
+      diagnostics.tagSupport = {valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated]};
+      for (let feature of this._features) {
+        feature.fillClientCapabilities(result);
+      }
+      return result;
+    }
+    initializeFeatures(_connection) {
+      let documentSelector = this._clientOptions.documentSelector;
+      for (let feature of this._features) {
+        feature.initialize(this._capabilities, documentSelector);
+      }
+    }
+    handleRegistrationRequest(params) {
+      return new Promise((resolve, reject) => {
+        for (let registration of params.registrations) {
+          const feature = this._dynamicFeatures.get(registration.method);
+          if (!feature) {
+            reject(new Error(`No feature implementation for ${registration.method} found. Registration failed.`));
+            return;
+          }
+          const options = registration.registerOptions || {};
+          options.documentSelector = options.documentSelector || this._clientOptions.documentSelector;
+          const data = {
+            id: registration.id,
+            registerOptions: options
+          };
+          feature.register(this._method2Message.get(registration.method), data);
+        }
+        resolve();
+      });
+    }
+    handleUnregistrationRequest(params) {
+      return new Promise((resolve, reject) => {
+        for (let unregistration of params.unregisterations) {
+          const feature = this._dynamicFeatures.get(unregistration.method);
+          if (!feature) {
+            reject(new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`));
+            return;
+          }
+          feature.unregister(unregistration.id);
+        }
+        resolve();
+      });
+    }
+    handleApplyWorkspaceEdit(params) {
+      let workspaceEdit = params.edit;
+      let openTextDocuments = new Map();
+      vscode_1.workspace.textDocuments.forEach((document) => openTextDocuments.set(document.uri.toString(), document));
+      let versionMismatch = false;
+      if (workspaceEdit.documentChanges) {
+        for (const change of workspaceEdit.documentChanges) {
+          if (vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && change.textDocument.version && change.textDocument.version >= 0) {
+            let textDocument = openTextDocuments.get(change.textDocument.uri);
+            if (textDocument && textDocument.version !== change.textDocument.version) {
+              versionMismatch = true;
+              break;
+            }
+          }
+        }
+      }
+      if (versionMismatch) {
+        return Promise.resolve({applied: false});
+      }
+      return Is.asPromise(vscode_1.workspace.applyEdit(this._p2c.asWorkspaceEdit(params.edit)).then((value) => {
+        return {applied: value};
+      }));
+    }
+    logFailedRequest(type, error) {
+      if (error instanceof vscode_languageserver_protocol_1.ResponseError && (error.code === vscode_languageserver_protocol_1.ErrorCodes.RequestCancelled || error.code === vscode_languageserver_protocol_1.ErrorCodes.ContentModified)) {
+        return;
+      }
+      this.error(`Request ${type.method} failed.`, error);
+    }
+  };
+  exports2.BaseLanguageClient = BaseLanguageClient;
+});
+
+// node_modules/vscode-languageclient/lib/colorProvider.js
+var require_colorProvider = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var ColorProviderFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DocumentColorRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "colorProvider").dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideColorPresentations: (color, context, token) => {
+          const client2 = this._client;
+          const provideColorPresentations = (color2, context2, token2) => {
+            const requestParams = {
+              color: color2,
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(context2.document),
+              range: client2.code2ProtocolConverter.asRange(context2.range)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, requestParams, token2).then(this.asColorPresentations.bind(this), (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideColorPresentations ? middleware.provideColorPresentations(color, context, token, provideColorPresentations) : provideColorPresentations(color, context, token);
+        },
+        provideDocumentColors: (document, token) => {
+          const client2 = this._client;
+          const provideDocumentColors = (document2, token2) => {
+            const requestParams = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, requestParams, token2).then(this.asColorInformations.bind(this), (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDocumentColors ? middleware.provideDocumentColors(document, token, provideDocumentColors) : provideDocumentColors(document, token);
+        }
+      };
+      return [vscode_1.languages.registerColorProvider(options.documentSelector, provider), provider];
+    }
+    asColor(color) {
+      return new vscode_1.Color(color.red, color.green, color.blue, color.alpha);
+    }
+    asColorInformations(colorInformation) {
+      if (Array.isArray(colorInformation)) {
+        return colorInformation.map((ci) => {
+          return new vscode_1.ColorInformation(this._client.protocol2CodeConverter.asRange(ci.range), this.asColor(ci.color));
+        });
+      }
+      return [];
+    }
+    asColorPresentations(colorPresentations) {
+      if (Array.isArray(colorPresentations)) {
+        return colorPresentations.map((cp) => {
+          let presentation = new vscode_1.ColorPresentation(cp.label);
+          presentation.additionalTextEdits = this._client.protocol2CodeConverter.asTextEdits(cp.additionalTextEdits);
+          presentation.textEdit = this._client.protocol2CodeConverter.asTextEdit(cp.textEdit);
+          return presentation;
+        });
+      }
+      return [];
+    }
+  };
+  exports2.ColorProviderFeature = ColorProviderFeature;
+});
+
+// node_modules/vscode-languageclient/lib/configuration.js
+var require_configuration = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var ConfigurationFeature = class {
+    constructor(_client) {
+      this._client = _client;
+    }
+    fillClientCapabilities(capabilities) {
+      capabilities.workspace = capabilities.workspace || {};
+      capabilities.workspace.configuration = true;
+    }
+    initialize() {
+      let client2 = this._client;
+      client2.onRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, (params, token) => {
+        let configuration = (params2) => {
+          let result = [];
+          for (let item of params2.items) {
+            let resource = item.scopeUri !== void 0 && item.scopeUri !== null ? this._client.protocol2CodeConverter.asUri(item.scopeUri) : void 0;
+            result.push(this.getConfiguration(resource, item.section !== null ? item.section : void 0));
+          }
+          return result;
+        };
+        let middleware = client2.clientOptions.middleware.workspace;
+        return middleware && middleware.configuration ? middleware.configuration(params, token, configuration) : configuration(params, token);
+      });
+    }
+    getConfiguration(resource, section) {
+      let result = null;
+      if (section) {
+        let index = section.lastIndexOf(".");
+        if (index === -1) {
+          result = vscode_1.workspace.getConfiguration(void 0, resource).get(section);
+        } else {
+          let config = vscode_1.workspace.getConfiguration(section.substr(0, index), resource);
+          if (config) {
+            result = config.get(section.substr(index + 1));
+          }
+        }
+      } else {
+        let config = vscode_1.workspace.getConfiguration(void 0, resource);
+        result = {};
+        for (let key of Object.keys(config)) {
+          if (config.has(key)) {
+            result[key] = config.get(key);
+          }
+        }
+      }
+      if (!result) {
+        return null;
+      }
+      return result;
+    }
+  };
+  exports2.ConfigurationFeature = ConfigurationFeature;
+});
+
+// node_modules/vscode-languageclient/lib/implementation.js
+var require_implementation = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var ImplementationFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.ImplementationRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let implementationSupport = ensure(ensure(capabilites, "textDocument"), "implementation");
+      implementationSupport.dynamicRegistration = true;
+      implementationSupport.linkSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideImplementation: (document, position, token) => {
+          const client2 = this._client;
+          const provideImplementation = (document2, position2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDefinitionResult, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideImplementation ? middleware.provideImplementation(document, position, token, provideImplementation) : provideImplementation(document, position, token);
+        }
+      };
+      return [vscode_1.languages.registerImplementationProvider(options.documentSelector, provider), provider];
+    }
+  };
+  exports2.ImplementationFeature = ImplementationFeature;
+});
+
+// node_modules/vscode-languageclient/lib/typeDefinition.js
+var require_typeDefinition = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var TypeDefinitionFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.TypeDefinitionRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      ensure(ensure(capabilites, "textDocument"), "typeDefinition").dynamicRegistration = true;
+      let typeDefinitionSupport = ensure(ensure(capabilites, "textDocument"), "typeDefinition");
+      typeDefinitionSupport.dynamicRegistration = true;
+      typeDefinitionSupport.linkSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideTypeDefinition: (document, position, token) => {
+          const client2 = this._client;
+          const provideTypeDefinition = (document2, position2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDefinitionResult, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideTypeDefinition ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition) : provideTypeDefinition(document, position, token);
+        }
+      };
+      return [vscode_1.languages.registerTypeDefinitionProvider(options.documentSelector, provider), provider];
+    }
+  };
+  exports2.TypeDefinitionFeature = TypeDefinitionFeature;
+});
+
+// node_modules/vscode-languageclient/lib/workspaceFolders.js
+var require_workspaceFolders = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var UUID = require_uuid();
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  function access(target, key) {
+    if (target === void 0) {
+      return void 0;
+    }
+    return target[key];
+  }
+  function arrayDiff(left, right) {
+    return left.filter((element) => right.indexOf(element) < 0);
+  }
+  exports2.arrayDiff = arrayDiff;
+  var WorkspaceFoldersFeature = class {
+    constructor(_client) {
+      this._client = _client;
+      this._listeners = new Map();
+    }
+    get messages() {
+      return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;
+    }
+    fillInitializeParams(params) {
+      let folders = vscode_1.workspace.workspaceFolders;
+      this.initializeWithFolders(folders);
+      if (folders === void 0) {
+        params.workspaceFolders = null;
+      } else {
+        params.workspaceFolders = folders.map((folder) => this.asProtocol(folder));
+      }
+    }
+    initializeWithFolders(currentWorkspaceFolders) {
+      this._initialFolders = currentWorkspaceFolders;
+    }
+    fillClientCapabilities(capabilities) {
+      capabilities.workspace = capabilities.workspace || {};
+      capabilities.workspace.workspaceFolders = true;
+    }
+    initialize(capabilities) {
+      let client2 = this._client;
+      client2.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {
+        let workspaceFolders = () => {
+          let folders = vscode_1.workspace.workspaceFolders;
+          if (folders === void 0) {
+            return null;
+          }
+          let result = folders.map((folder) => {
+            return this.asProtocol(folder);
+          });
+          return result;
+        };
+        let middleware = client2.clientOptions.middleware.workspace;
+        return middleware && middleware.workspaceFolders ? middleware.workspaceFolders(token, workspaceFolders) : workspaceFolders(token);
+      });
+      let value = access(access(access(capabilities, "workspace"), "workspaceFolders"), "changeNotifications");
+      let id;
+      if (typeof value === "string") {
+        id = value;
+      } else if (value === true) {
+        id = UUID.generateUuid();
+      }
+      if (id) {
+        this.register(this.messages, {
+          id,
+          registerOptions: void 0
+        });
+      }
+    }
+    sendInitialEvent(currentWorkspaceFolders) {
+      if (this._initialFolders && currentWorkspaceFolders) {
+        const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);
+        const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);
+        if (added.length > 0 || removed.length > 0) {
+          this.doSendEvent(added, removed);
+        }
+      } else if (this._initialFolders) {
+        this.doSendEvent([], this._initialFolders);
+      } else if (currentWorkspaceFolders) {
+        this.doSendEvent(currentWorkspaceFolders, []);
+      }
+    }
+    doSendEvent(addedFolders, removedFolders) {
+      let params = {
+        event: {
+          added: addedFolders.map((folder) => this.asProtocol(folder)),
+          removed: removedFolders.map((folder) => this.asProtocol(folder))
+        }
+      };
+      this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);
+    }
+    register(_message, data) {
+      let id = data.id;
+      let client2 = this._client;
+      let disposable = vscode_1.workspace.onDidChangeWorkspaceFolders((event) => {
+        let didChangeWorkspaceFolders = (event2) => {
+          this.doSendEvent(event2.added, event2.removed);
+        };
+        let middleware = client2.clientOptions.middleware.workspace;
+        middleware && middleware.didChangeWorkspaceFolders ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders) : didChangeWorkspaceFolders(event);
+      });
+      this._listeners.set(id, disposable);
+      this.sendInitialEvent(vscode_1.workspace.workspaceFolders);
+    }
+    unregister(id) {
+      let disposable = this._listeners.get(id);
+      if (disposable === void 0) {
+        return;
+      }
+      this._listeners.delete(id);
+      disposable.dispose();
+    }
+    dispose() {
+      for (let disposable of this._listeners.values()) {
+        disposable.dispose();
+      }
+      this._listeners.clear();
+    }
+    asProtocol(workspaceFolder) {
+      if (workspaceFolder === void 0) {
+        return null;
+      }
+      return {uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), name: workspaceFolder.name};
+    }
+  };
+  exports2.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
+});
+
+// node_modules/vscode-languageclient/lib/foldingRange.js
+var require_foldingRange = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var FoldingRangeFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.FoldingRangeRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let capability = ensure(ensure(capabilites, "textDocument"), "foldingRange");
+      capability.dynamicRegistration = true;
+      capability.rangeLimit = 5e3;
+      capability.lineFoldingOnly = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideFoldingRanges: (document, context, token) => {
+          const client2 = this._client;
+          const provideFoldingRanges = (document2, _, token2) => {
+            const requestParams = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token2).then(this.asFoldingRanges.bind(this), (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideFoldingRanges ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges) : provideFoldingRanges(document, context, token);
+        }
+      };
+      return [vscode_1.languages.registerFoldingRangeProvider(options.documentSelector, provider), provider];
+    }
+    asFoldingRangeKind(kind) {
+      if (kind) {
+        switch (kind) {
+          case vscode_languageserver_protocol_1.FoldingRangeKind.Comment:
+            return vscode_1.FoldingRangeKind.Comment;
+          case vscode_languageserver_protocol_1.FoldingRangeKind.Imports:
+            return vscode_1.FoldingRangeKind.Imports;
+          case vscode_languageserver_protocol_1.FoldingRangeKind.Region:
+            return vscode_1.FoldingRangeKind.Region;
+        }
+      }
+      return void 0;
+    }
+    asFoldingRanges(foldingRanges) {
+      if (Array.isArray(foldingRanges)) {
+        return foldingRanges.map((r) => {
+          return new vscode_1.FoldingRange(r.startLine, r.endLine, this.asFoldingRangeKind(r.kind));
+        });
+      }
+      return [];
+    }
+  };
+  exports2.FoldingRangeFeature = FoldingRangeFeature;
+});
+
+// node_modules/vscode-languageclient/lib/declaration.js
+var require_declaration = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var DeclarationFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.DeclarationRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      const declarationSupport = ensure(ensure(capabilites, "textDocument"), "declaration");
+      declarationSupport.dynamicRegistration = true;
+      declarationSupport.linkSupport = true;
+    }
+    initialize(capabilities, documentSelector) {
+      const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideDeclaration: (document, position, token) => {
+          const client2 = this._client;
+          const provideDeclaration = (document2, position2, token2) => {
+            return client2.sendRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDeclarationResult, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideDeclaration ? middleware.provideDeclaration(document, position, token, provideDeclaration) : provideDeclaration(document, position, token);
+        }
+      };
+      return [vscode_1.languages.registerDeclarationProvider(options.documentSelector, provider), provider];
+    }
+  };
+  exports2.DeclarationFeature = DeclarationFeature;
+});
+
+// node_modules/vscode-languageclient/lib/selectionRange.js
+var require_selectionRange = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = Object.create(null);
+    }
+    return target[key];
+  }
+  var SelectionRangeFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.SelectionRangeRequest.type);
+    }
+    fillClientCapabilities(capabilites) {
+      let capability = ensure(ensure(capabilites, "textDocument"), "selectionRange");
+      capability.dynamicRegistration = true;
+    }
+    initialize(capabilities, documentSelector) {
+      let [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const provider = {
+        provideSelectionRanges: (document, positions, token) => {
+          const client2 = this._client;
+          const provideSelectionRanges = (document2, positions2, token2) => {
+            const requestParams = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              positions: client2.code2ProtocolConverter.asPositions(positions2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, requestParams, token2).then((ranges) => client2.protocol2CodeConverter.asSelectionRanges(ranges), (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, error);
+              return Promise.resolve(null);
+            });
+          };
+          const middleware = client2.clientOptions.middleware;
+          return middleware.provideSelectionRanges ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges) : provideSelectionRanges(document, positions, token);
+        }
+      };
+      return [vscode_1.languages.registerSelectionRangeProvider(options.documentSelector, provider), provider];
+    }
+  };
+  exports2.SelectionRangeFeature = SelectionRangeFeature;
+});
+
+// node_modules/vscode-languageclient/lib/progress.js
+var require_progress = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_languageserver_protocol_1 = require_main3();
+  var progressPart_1 = require_progressPart();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = Object.create(null);
+    }
+    return target[key];
+  }
+  var ProgressFeature = class {
+    constructor(_client) {
+      this._client = _client;
+    }
+    fillClientCapabilities(capabilities) {
+      ensure(capabilities, "window").workDoneProgress = true;
+    }
+    initialize() {
+      let client2 = this._client;
+      let createHandler = (params) => {
+        new progressPart_1.ProgressPart(this._client, params.token);
+      };
+      client2.onRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, createHandler);
+    }
+  };
+  exports2.ProgressFeature = ProgressFeature;
+});
+
+// node_modules/vscode-languageclient/lib/callHierarchy.proposed.js
+var require_callHierarchy_proposed = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var client_1 = require_client();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var protocol2code;
+  (function(protocol2code2) {
+    function asCallHierarchyItem(converter, item) {
+      if (item === null) {
+        return void 0;
+      }
+      let result = new vscode_1.CallHierarchyItem(converter.asSymbolKind(item.kind), item.name, item.detail || "", converter.asUri(item.uri), converter.asRange(item.range), converter.asRange(item.selectionRange));
+      if (item.tags !== void 0) {
+        result.tags = converter.asSymbolTags(item.tags);
+      }
+      return result;
+    }
+    protocol2code2.asCallHierarchyItem = asCallHierarchyItem;
+    function asCallHierarchyItems(converter, items) {
+      if (items === null) {
+        return void 0;
+      }
+      let result = items.map((item) => asCallHierarchyItem(converter, item));
+      return result[0];
+    }
+    protocol2code2.asCallHierarchyItems = asCallHierarchyItems;
+    function asCallHierarchyIncomingCall(converter, item) {
+      return new vscode_1.CallHierarchyIncomingCall(asCallHierarchyItem(converter, item.from), converter.asRanges(item.fromRanges));
+    }
+    protocol2code2.asCallHierarchyIncomingCall = asCallHierarchyIncomingCall;
+    function asCallHierarchyIncomingCalls(converter, items) {
+      if (items === null) {
+        return void 0;
+      }
+      return items.map((item) => asCallHierarchyIncomingCall(converter, item));
+    }
+    protocol2code2.asCallHierarchyIncomingCalls = asCallHierarchyIncomingCalls;
+    function asCallHierarchyOutgoingCall(converter, item) {
+      return new vscode_1.CallHierarchyOutgoingCall(asCallHierarchyItem(converter, item.to), converter.asRanges(item.fromRanges));
+    }
+    protocol2code2.asCallHierarchyOutgoingCall = asCallHierarchyOutgoingCall;
+    function asCallHierarchyOutgoingCalls(converter, items) {
+      if (items === null) {
+        return void 0;
+      }
+      return items.map((item) => asCallHierarchyOutgoingCall(converter, item));
+    }
+    protocol2code2.asCallHierarchyOutgoingCalls = asCallHierarchyOutgoingCalls;
+  })(protocol2code || (protocol2code = {}));
+  var code2protocol;
+  (function(code2protocol2) {
+    function asCallHierarchyItem(converter, value) {
+      const result = {
+        name: value.name,
+        kind: converter.asSymbolKind(value.kind),
+        uri: converter.asUri(value.uri),
+        range: converter.asRange(value.range),
+        selectionRange: converter.asRange(value.selectionRange)
+      };
+      if (value.detail !== void 0 && value.detail.length > 0) {
+        result.detail = value.detail;
+      }
+      if (value.tags !== void 0) {
+        result.tags = converter.asSymbolTags(value.tags);
+      }
+      return result;
+    }
+    code2protocol2.asCallHierarchyItem = asCallHierarchyItem;
+  })(code2protocol || (code2protocol = {}));
+  var CallHierarchyProvider = class {
+    constructor(client2) {
+      this.client = client2;
+      this.middleware = client2.clientOptions.middleware;
+    }
+    prepareCallHierarchy(document, position, token) {
+      const client2 = this.client;
+      const middleware = this.middleware;
+      const prepareCallHierarchy = (document2, position2, token2) => {
+        const params = client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2);
+        return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, params, token2).then((result) => {
+          return protocol2code.asCallHierarchyItems(this.client.protocol2CodeConverter, result);
+        }, (error) => {
+          client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, error);
+          return Promise.resolve(null);
+        });
+      };
+      return middleware.prepareCallHierarchy ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy) : prepareCallHierarchy(document, position, token);
+    }
+    provideCallHierarchyIncomingCalls(item, token) {
+      const client2 = this.client;
+      const middleware = this.middleware;
+      const provideCallHierarchyIncomingCalls = (item2, token2) => {
+        const params = {
+          item: code2protocol.asCallHierarchyItem(client2.code2ProtocolConverter, item2)
+        };
+        return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, params, token2).then((result) => {
+          return protocol2code.asCallHierarchyIncomingCalls(client2.protocol2CodeConverter, result);
+        }, (error) => {
+          client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, error);
+          return Promise.resolve(null);
+        });
+      };
+      return middleware.provideCallHierarchyIncomingCalls ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls) : provideCallHierarchyIncomingCalls(item, token);
+    }
+    provideCallHierarchyOutgoingCalls(item, token) {
+      const client2 = this.client;
+      const middleware = this.middleware;
+      const provideCallHierarchyOutgoingCalls = (item2, token2) => {
+        const params = {
+          item: code2protocol.asCallHierarchyItem(client2.code2ProtocolConverter, item2)
+        };
+        return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, params, token2).then((result) => {
+          return protocol2code.asCallHierarchyOutgoingCalls(client2.protocol2CodeConverter, result);
+        }, (error) => {
+          client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, error);
+          return Promise.resolve(null);
+        });
+      };
+      return middleware.provideCallHierarchyOutgingCalls ? middleware.provideCallHierarchyOutgingCalls(item, token, provideCallHierarchyOutgoingCalls) : provideCallHierarchyOutgoingCalls(item, token);
+    }
+  };
+  var CallHierarchyFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type);
+    }
+    fillClientCapabilities(cap) {
+      const capabilites = cap;
+      const capability = ensure(ensure(capabilites, "textDocument"), "callHierarchy");
+      capability.dynamicRegistration = true;
+    }
+    initialize(cap, documentSelector) {
+      const capabilities = cap;
+      const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const client2 = this._client;
+      const provider = new CallHierarchyProvider(client2);
+      return [vscode_1.languages.registerCallHierarchyProvider(options.documentSelector, provider), provider];
+    }
+  };
+  exports2.CallHierarchyFeature = CallHierarchyFeature;
+});
+
+// node_modules/vscode-languageclient/lib/semanticTokens.proposed.js
+var require_semanticTokens_proposed = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var vscode6 = require("vscode");
+  var client_1 = require_client();
+  var vscode_languageserver_protocol_1 = require_main3();
+  function ensure(target, key) {
+    if (target[key] === void 0) {
+      target[key] = {};
+    }
+    return target[key];
+  }
+  var protocol2code;
+  (function(protocol2code2) {
+    function asSemanticTokens(value) {
+      if (value === void 0 || value === null) {
+        return void 0;
+      }
+      return new vscode6.SemanticTokens(new Uint32Array(value.data), value.resultId);
+    }
+    protocol2code2.asSemanticTokens = asSemanticTokens;
+    function asSemanticTokensEdit(value) {
+      return new vscode6.SemanticTokensEdit(value.start, value.deleteCount, value.data !== void 0 ? new Uint32Array(value.data) : void 0);
+    }
+    protocol2code2.asSemanticTokensEdit = asSemanticTokensEdit;
+    function asSemanticTokensEdits(value) {
+      if (value === void 0 || value === null) {
+        return void 0;
+      }
+      return new vscode6.SemanticTokensEdits(value.edits.map(asSemanticTokensEdit), value.resultId);
+    }
+    protocol2code2.asSemanticTokensEdits = asSemanticTokensEdits;
+    function asLegend(value) {
+      return value;
+    }
+    protocol2code2.asLegend = asLegend;
+  })(protocol2code || (protocol2code = {}));
+  var SemanticTokensFeature = class extends client_1.TextDocumentFeature {
+    constructor(client2) {
+      super(client2, vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type);
+    }
+    fillClientCapabilities(cap) {
+      const capabilites = cap;
+      let capability = ensure(ensure(capabilites, "textDocument"), "semanticTokens");
+      capability.dynamicRegistration = true;
+      capability.tokenTypes = [
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.comment,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.keyword,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.number,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.regexp,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.operator,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.namespace,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.type,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.struct,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.class,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.interface,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.enum,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.typeParameter,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.function,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.member,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.macro,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.variable,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.parameter,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.property,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.label
+      ];
+      capability.tokenModifiers = [
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.declaration,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.documentation,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.static,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.abstract,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.deprecated,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.async,
+        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.readonly
+      ];
+    }
+    initialize(cap, documentSelector) {
+      const capabilities = cap;
+      let [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);
+      if (!id || !options) {
+        return;
+      }
+      this.register(this.messages, {id, registerOptions: options});
+    }
+    registerLanguageProvider(options) {
+      const hasEditProvider = options.documentProvider !== void 0 && typeof options.documentProvider !== "boolean" && options.documentProvider.edits === true;
+      const documentProvider = {
+        provideDocumentSemanticTokens: (document, token) => {
+          const client2 = this._client;
+          const middleware = client2.clientOptions.middleware;
+          const provideDocumentSemanticTokens = (document2, token2) => {
+            const params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, params, token2).then((result) => {
+              return protocol2code.asSemanticTokens(result);
+            }, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, error);
+              return void 0;
+            });
+          };
+          return middleware.provideDocumentSemanticTokens ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens) : provideDocumentSemanticTokens(document, token);
+        },
+        provideDocumentSemanticTokensEdits: hasEditProvider ? (document, previousResultId, token) => {
+          const client2 = this._client;
+          const middleware = client2.clientOptions.middleware;
+          const provideDocumentSemanticTokensEdits = (document2, previousResultId2, token2) => {
+            const params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              previousResultId: previousResultId2
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, params, token2).then((result) => {
+              if (vscode_languageserver_protocol_1.Proposed.SemanticTokens.is(result)) {
+                return protocol2code.asSemanticTokens(result);
+              } else {
+                return protocol2code.asSemanticTokensEdits(result);
+              }
+            }, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, error);
+              return void 0;
+            });
+          };
+          return middleware.provideDocumentSemanticTokensEdits ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits) : provideDocumentSemanticTokensEdits(document, previousResultId, token);
+        } : void 0
+      };
+      const hasRangeProvider = options.rangeProvider === true;
+      const rangeProvider = hasRangeProvider ? {
+        provideDocumentRangeSemanticTokens: (document, range, token) => {
+          const client2 = this._client;
+          const middleware = client2.clientOptions.middleware;
+          const provideDocumentRangeSemanticTokens = (document2, range2, token2) => {
+            const params = {
+              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
+              range: client2.code2ProtocolConverter.asRange(range2)
+            };
+            return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, params, token2).then((result) => {
+              return protocol2code.asSemanticTokens(result);
+            }, (error) => {
+              client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, error);
+              return void 0;
+            });
+          };
+          return middleware.provideDocumentRangeSemanticTokens ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens) : provideDocumentRangeSemanticTokens(document, range, token);
+        }
+      } : void 0;
+      const disposables = [];
+      const legend = protocol2code.asLegend(options.legend);
+      disposables.push(vscode6.languages.registerDocumentSemanticTokensProvider(options.documentSelector, documentProvider, legend));
+      if (rangeProvider !== void 0) {
+        disposables.push(vscode6.languages.registerDocumentRangeSemanticTokensProvider(options.documentSelector, rangeProvider, legend));
+      }
+      return [new vscode6.Disposable(() => disposables.forEach((item) => item.dispose())), {document: documentProvider, range: rangeProvider}];
+    }
+  };
+  exports2.SemanticTokensFeature = SemanticTokensFeature;
+});
+
+// node_modules/vscode-languageclient/lib/utils/processes.js
+var require_processes = __commonJS((exports2) => {
+  "use strict";
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var cp = require("child_process");
+  var path_1 = require("path");
+  var isWindows = process.platform === "win32";
+  var isMacintosh = process.platform === "darwin";
+  var isLinux = process.platform === "linux";
+  function terminate(process2, cwd) {
+    if (isWindows) {
+      try {
+        let options = {
+          stdio: ["pipe", "pipe", "ignore"]
+        };
+        if (cwd) {
+          options.cwd = cwd;
+        }
+        cp.execFileSync("taskkill", ["/T", "/F", "/PID", process2.pid.toString()], options);
+        return true;
+      } catch (err) {
+        return false;
+      }
+    } else if (isLinux || isMacintosh) {
+      try {
+        var cmd = path_1.join(__dirname, "terminateProcess.sh");
+        var result = cp.spawnSync(cmd, [process2.pid.toString()]);
+        return result.error ? false : true;
+      } catch (err) {
+        return false;
+      }
+    } else {
+      process2.kill("SIGKILL");
+      return true;
+    }
+  }
+  exports2.terminate = terminate;
+});
+
+// node_modules/vscode-languageclient/lib/main.js
+var require_main4 = __commonJS((exports2) => {
+  "use strict";
+  function __export2(m) {
+    for (var p in m)
+      if (!exports2.hasOwnProperty(p))
+        exports2[p] = m[p];
+  }
+  Object.defineProperty(exports2, "__esModule", {value: true});
+  var cp = require("child_process");
+  var fs = require("fs");
+  var SemVer = require_semver();
+  var client_1 = require_client();
+  var vscode_1 = require("vscode");
+  var vscode_languageserver_protocol_1 = require_main3();
+  var colorProvider_1 = require_colorProvider();
+  var configuration_1 = require_configuration();
+  var implementation_1 = require_implementation();
+  var typeDefinition_1 = require_typeDefinition();
+  var workspaceFolders_1 = require_workspaceFolders();
+  var foldingRange_1 = require_foldingRange();
+  var declaration_1 = require_declaration();
+  var selectionRange_1 = require_selectionRange();
+  var progress_1 = require_progress();
+  var callHierarchy_proposed_1 = require_callHierarchy_proposed();
+  var semanticTokens_proposed_1 = require_semanticTokens_proposed();
+  var Is = require_is3();
+  var processes_1 = require_processes();
+  __export2(require_client());
+  var REQUIRED_VSCODE_VERSION = "^1.41.0";
+  var Executable;
+  (function(Executable2) {
+    function is(value) {
+      return Is.string(value.command);
+    }
+    Executable2.is = is;
+  })(Executable || (Executable = {}));
+  var TransportKind;
+  (function(TransportKind2) {
+    TransportKind2[TransportKind2["stdio"] = 0] = "stdio";
+    TransportKind2[TransportKind2["ipc"] = 1] = "ipc";
+    TransportKind2[TransportKind2["pipe"] = 2] = "pipe";
+    TransportKind2[TransportKind2["socket"] = 3] = "socket";
+  })(TransportKind = exports2.TransportKind || (exports2.TransportKind = {}));
+  var Transport;
+  (function(Transport2) {
+    function isSocket(value) {
+      let candidate = value;
+      return candidate && candidate.kind === TransportKind.socket && Is.number(candidate.port);
+    }
+    Transport2.isSocket = isSocket;
+  })(Transport || (Transport = {}));
+  var NodeModule;
+  (function(NodeModule2) {
+    function is(value) {
+      return Is.string(value.module);
+    }
+    NodeModule2.is = is;
+  })(NodeModule || (NodeModule = {}));
+  var StreamInfo;
+  (function(StreamInfo2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && candidate.writer !== void 0 && candidate.reader !== void 0;
+    }
+    StreamInfo2.is = is;
+  })(StreamInfo || (StreamInfo = {}));
+  var ChildProcessInfo;
+  (function(ChildProcessInfo2) {
+    function is(value) {
+      let candidate = value;
+      return candidate && candidate.process !== void 0 && typeof candidate.detached === "boolean";
+    }
+    ChildProcessInfo2.is = is;
+  })(ChildProcessInfo || (ChildProcessInfo = {}));
+  var LanguageClient2 = class extends client_1.BaseLanguageClient {
+    constructor(arg1, arg2, arg3, arg4, arg5) {
+      let id;
+      let name;
+      let serverOptions;
+      let clientOptions;
+      let forceDebug;
+      if (Is.string(arg2)) {
+        id = arg1;
+        name = arg2;
+        serverOptions = arg3;
+        clientOptions = arg4;
+        forceDebug = !!arg5;
+      } else {
+        id = arg1.toLowerCase();
+        name = arg1;
+        serverOptions = arg2;
+        clientOptions = arg3;
+        forceDebug = arg4;
+      }
+      if (forceDebug === void 0) {
+        forceDebug = false;
+      }
+      super(id, name, clientOptions);
+      this._serverOptions = serverOptions;
+      this._forceDebug = forceDebug;
+      try {
+        this.checkVersion();
+      } catch (error) {
+        if (Is.string(error.message)) {
+          this.outputChannel.appendLine(error.message);
+        }
+        throw error;
+      }
+    }
+    checkVersion() {
+      let codeVersion = SemVer.parse(vscode_1.version);
+      if (!codeVersion) {
+        throw new Error(`No valid VS Code version detected. Version string is: ${vscode_1.version}`);
+      }
+      if (codeVersion.prerelease && codeVersion.prerelease.length > 0) {
+        codeVersion.prerelease = [];
+      }
+      if (!SemVer.satisfies(codeVersion, REQUIRED_VSCODE_VERSION)) {
+        throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${vscode_1.version}`);
+      }
+    }
+    stop() {
+      return super.stop().then(() => {
+        if (this._serverProcess) {
+          let toCheck = this._serverProcess;
+          this._serverProcess = void 0;
+          if (this._isDetached === void 0 || !this._isDetached) {
+            this.checkProcessDied(toCheck);
+          }
+          this._isDetached = void 0;
+        }
+      });
+    }
+    checkProcessDied(childProcess) {
+      if (!childProcess) {
+        return;
+      }
+      setTimeout(() => {
+        try {
+          process.kill(childProcess.pid, 0);
+          processes_1.terminate(childProcess);
+        } catch (error) {
+        }
+      }, 2e3);
+    }
+    handleConnectionClosed() {
+      this._serverProcess = void 0;
+      super.handleConnectionClosed();
+    }
+    createMessageTransports(encoding) {
+      function getEnvironment(env, fork) {
+        if (!env && !fork) {
+          return void 0;
+        }
+        let result = Object.create(null);
+        Object.keys(process.env).forEach((key) => result[key] = process.env[key]);
+        if (fork) {
+          result["ELECTRON_RUN_AS_NODE"] = "1";
+          result["ELECTRON_NO_ASAR"] = "1";
+        }
+        if (env) {
+          Object.keys(env).forEach((key) => result[key] = env[key]);
+        }
+        return result;
+      }
+      const debugStartWith = ["--debug=", "--debug-brk=", "--inspect=", "--inspect-brk="];
+      const debugEquals = ["--debug", "--debug-brk", "--inspect", "--inspect-brk"];
+      function startedInDebugMode() {
+        let args = process.execArgv;
+        if (args) {
+          return args.some((arg) => {
+            return debugStartWith.some((value) => arg.startsWith(value)) || debugEquals.some((value) => arg === value);
+          });
+        }
+        return false;
+      }
+      function assertStdio(process2) {
+        if (process2.stdin === null || process2.stdout === null || process2.stderr === null) {
+          throw new Error("Process created without stdio streams");
+        }
+      }
+      let server = this._serverOptions;
+      if (Is.func(server)) {
+        return server().then((result) => {
+          if (client_1.MessageTransports.is(result)) {
+            this._isDetached = !!result.detached;
+            return result;
+          } else if (StreamInfo.is(result)) {
+            this._isDetached = !!result.detached;
+            return {reader: new vscode_languageserver_protocol_1.StreamMessageReader(result.reader), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(result.writer)};
+          } else {
+            let cp2;
+            if (ChildProcessInfo.is(result)) {
+              cp2 = result.process;
+              this._isDetached = result.detached;
+            } else {
+              cp2 = result;
+              this._isDetached = false;
+            }
+            cp2.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+            return {reader: new vscode_languageserver_protocol_1.StreamMessageReader(cp2.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(cp2.stdin)};
+          }
+        });
+      }
+      let json;
+      let runDebug = server;
+      if (runDebug.run || runDebug.debug) {
+        if (this._forceDebug || startedInDebugMode()) {
+          json = runDebug.debug;
+        } else {
+          json = runDebug.run;
+        }
+      } else {
+        json = server;
+      }
+      return this._getServerWorkingDir(json.options).then((serverWorkingDir) => {
+        if (NodeModule.is(json) && json.module) {
+          let node = json;
+          let transport = node.transport || TransportKind.stdio;
+          if (node.runtime) {
+            let args = [];
+            let options = node.options || Object.create(null);
+            if (options.execArgv) {
+              options.execArgv.forEach((element) => args.push(element));
+            }
+            args.push(node.module);
+            if (node.args) {
+              node.args.forEach((element) => args.push(element));
+            }
+            let execOptions = Object.create(null);
+            execOptions.cwd = serverWorkingDir;
+            execOptions.env = getEnvironment(options.env, false);
+            let pipeName = void 0;
+            if (transport === TransportKind.ipc) {
+              execOptions.stdio = [null, null, null, "ipc"];
+              args.push("--node-ipc");
+            } else if (transport === TransportKind.stdio) {
+              args.push("--stdio");
+            } else if (transport === TransportKind.pipe) {
+              pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();
+              args.push(`--pipe=${pipeName}`);
+            } else if (Transport.isSocket(transport)) {
+              args.push(`--socket=${transport.port}`);
+            }
+            args.push(`--clientProcessId=${process.pid.toString()}`);
+            if (transport === TransportKind.ipc || transport === TransportKind.stdio) {
+              let serverProcess = cp.spawn(node.runtime, args, execOptions);
+              if (!serverProcess || !serverProcess.pid) {
+                return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);
+              }
+              this._serverProcess = serverProcess;
+              serverProcess.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+              if (transport === TransportKind.ipc) {
+                serverProcess.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                return Promise.resolve({reader: new vscode_languageserver_protocol_1.IPCMessageReader(serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(serverProcess)});
+              } else {
+                return Promise.resolve({reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin)});
+              }
+            } else if (transport === TransportKind.pipe) {
+              return vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport2) => {
+                let process2 = cp.spawn(node.runtime, args, execOptions);
+                if (!process2 || !process2.pid) {
+                  return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);
+                }
+                this._serverProcess = process2;
+                process2.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                process2.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                return transport2.onConnected().then((protocol) => {
+                  return {reader: protocol[0], writer: protocol[1]};
+                });
+              });
+            } else if (Transport.isSocket(transport)) {
+              return vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport2) => {
+                let process2 = cp.spawn(node.runtime, args, execOptions);
+                if (!process2 || !process2.pid) {
+                  return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);
+                }
+                this._serverProcess = process2;
+                process2.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                process2.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                return transport2.onConnected().then((protocol) => {
+                  return {reader: protocol[0], writer: protocol[1]};
+                });
+              });
+            }
+          } else {
+            let pipeName = void 0;
+            return new Promise((resolve, _reject) => {
+              let args = node.args && node.args.slice() || [];
+              if (transport === TransportKind.ipc) {
+                args.push("--node-ipc");
+              } else if (transport === TransportKind.stdio) {
+                args.push("--stdio");
+              } else if (transport === TransportKind.pipe) {
+                pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();
+                args.push(`--pipe=${pipeName}`);
+              } else if (Transport.isSocket(transport)) {
+                args.push(`--socket=${transport.port}`);
+              }
+              args.push(`--clientProcessId=${process.pid.toString()}`);
+              let options = node.options || Object.create(null);
+              options.env = getEnvironment(options.env, true);
+              options.execArgv = options.execArgv || [];
+              options.cwd = serverWorkingDir;
+              options.silent = true;
+              if (transport === TransportKind.ipc || transport === TransportKind.stdio) {
+                let sp = cp.fork(node.module, args || [], options);
+                assertStdio(sp);
+                this._serverProcess = sp;
+                sp.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                if (transport === TransportKind.ipc) {
+                  sp.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                  resolve({reader: new vscode_languageserver_protocol_1.IPCMessageReader(this._serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(this._serverProcess)});
+                } else {
+                  resolve({reader: new vscode_languageserver_protocol_1.StreamMessageReader(sp.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(sp.stdin)});
+                }
+              } else if (transport === TransportKind.pipe) {
+                vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport2) => {
+                  let sp = cp.fork(node.module, args || [], options);
+                  assertStdio(sp);
+                  this._serverProcess = sp;
+                  sp.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                  sp.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                  transport2.onConnected().then((protocol) => {
+                    resolve({reader: protocol[0], writer: protocol[1]});
+                  });
+                });
+              } else if (Transport.isSocket(transport)) {
+                vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport2) => {
+                  let sp = cp.fork(node.module, args || [], options);
+                  assertStdio(sp);
+                  this._serverProcess = sp;
+                  sp.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                  sp.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+                  transport2.onConnected().then((protocol) => {
+                    resolve({reader: protocol[0], writer: protocol[1]});
+                  });
+                });
+              }
+            });
+          }
+        } else if (Executable.is(json) && json.command) {
+          let command = json;
+          let args = command.args || [];
+          let options = Object.assign({}, command.options);
+          options.cwd = options.cwd || serverWorkingDir;
+          let serverProcess = cp.spawn(command.command, args, options);
+          if (!serverProcess || !serverProcess.pid) {
+            return Promise.reject(`Launching server using command ${command.command} failed.`);
+          }
+          serverProcess.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
+          this._serverProcess = serverProcess;
+          this._isDetached = !!options.detached;
+          return Promise.resolve({reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin)});
+        }
+        return Promise.reject(new Error(`Unsupported server configuration ` + JSON.stringify(server, null, 4)));
+      });
+    }
+    registerProposedFeatures() {
+      this.registerFeatures(ProposedFeatures.createAll(this));
+    }
+    registerBuiltinFeatures() {
+      super.registerBuiltinFeatures();
+      this.registerFeature(new configuration_1.ConfigurationFeature(this));
+      this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this));
+      this.registerFeature(new implementation_1.ImplementationFeature(this));
+      this.registerFeature(new colorProvider_1.ColorProviderFeature(this));
+      this.registerFeature(new workspaceFolders_1.WorkspaceFoldersFeature(this));
+      this.registerFeature(new foldingRange_1.FoldingRangeFeature(this));
+      this.registerFeature(new declaration_1.DeclarationFeature(this));
+      this.registerFeature(new selectionRange_1.SelectionRangeFeature(this));
+      this.registerFeature(new progress_1.ProgressFeature(this));
+    }
+    _mainGetRootPath() {
+      let folders = vscode_1.workspace.workspaceFolders;
+      if (!folders || folders.length === 0) {
+        return void 0;
+      }
+      let folder = folders[0];
+      if (folder.uri.scheme === "file") {
+        return folder.uri.fsPath;
+      }
+      return void 0;
+    }
+    _getServerWorkingDir(options) {
+      let cwd = options && options.cwd;
+      if (!cwd) {
+        cwd = this.clientOptions.workspaceFolder ? this.clientOptions.workspaceFolder.uri.fsPath : this._mainGetRootPath();
+      }
+      if (cwd) {
+        return new Promise((s) => {
+          fs.lstat(cwd, (err, stats) => {
+            s(!err && stats.isDirectory() ? cwd : void 0);
+          });
+        });
+      }
+      return Promise.resolve(void 0);
+    }
+  };
+  exports2.LanguageClient = LanguageClient2;
+  var SettingMonitor = class {
+    constructor(_client, _setting) {
+      this._client = _client;
+      this._setting = _setting;
+      this._listeners = [];
+    }
+    start() {
+      vscode_1.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this._listeners);
+      this.onDidChangeConfiguration();
+      return new vscode_1.Disposable(() => {
+        if (this._client.needsStop()) {
+          this._client.stop();
+        }
+      });
+    }
+    onDidChangeConfiguration() {
+      let index = this._setting.indexOf(".");
+      let primary = index >= 0 ? this._setting.substr(0, index) : this._setting;
+      let rest = index >= 0 ? this._setting.substr(index + 1) : void 0;
+      let enabled = rest ? vscode_1.workspace.getConfiguration(primary).get(rest, false) : vscode_1.workspace.getConfiguration(primary);
+      if (enabled && this._client.needsStart()) {
+        this._client.start();
+      } else if (!enabled && this._client.needsStop()) {
+        this._client.stop();
+      }
+    }
+  };
+  exports2.SettingMonitor = SettingMonitor;
+  var ProposedFeatures;
+  (function(ProposedFeatures2) {
+    function createAll(client2) {
+      let result = [
+        new callHierarchy_proposed_1.CallHierarchyFeature(client2),
+        new semanticTokens_proposed_1.SemanticTokensFeature(client2)
+      ];
+      return result;
+    }
+    ProposedFeatures2.createAll = createAll;
+  })(ProposedFeatures = exports2.ProposedFeatures || (exports2.ProposedFeatures = {}));
+});
+
+// src/extension.ts
+__markAsModule(exports);
+__export(exports, {
+  activate: () => activate,
+  client: () => client,
+  deactivate: () => deactivate
+});
+var vscode5 = __toModule(require("vscode"));
+var import_vscode = __toModule(require("vscode"));
+var import_vscode_languageclient = __toModule(require_main4());
+
+// src/requirements.ts
+var vscode = __toModule(require("vscode"));
+async function resolveRequirements() {
+  const pathToVM = await checkPathToVM();
+  const pathToImage = await checkPathToImage();
+  return Promise.resolve({pathToVM, pathToImage});
+}
+async function checkPathToVM() {
+  return new Promise(async (resolve, reject) => {
+    if (vscode.workspace.getConfiguration("pharo").get("pathToVM") === "") {
+      reject({
+        message: "Path to VM not set",
+        label: "Open settings",
+        command: "workbench.action.openSettingsJson"
+      });
+    }
+    return resolve(vscode.workspace.getConfiguration("pharo").get("pathToVM"));
+  });
+}
+async function checkPathToImage() {
+  return new Promise(async (resolve, reject) => {
+    if (vscode.workspace.getConfiguration("pharo").get("pathToImage") === "") {
+      reject({
+        message: "Path to Image not set",
+        label: "Open settings",
+        command: "workbench.action.openSettingsJson"
+      });
+    }
+    return resolve(vscode.workspace.getConfiguration("pharo").get("pathToImage"));
+  });
+}
+
+// src/extension.ts
+var net = __toModule(require("net"));
+var child_process = __toModule(require("child_process"));
+
+// src/activateDebug.ts
+var vscode2 = __toModule(require("vscode"));
+function activateDebug(context, factory) {
+  context.subscriptions.push(vscode2.commands.registerCommand("extension.pharo-debug.debugEditorContents", (resource) => {
+    let targetResource = resource;
+    if (!targetResource && vscode2.window.activeTextEditor) {
+      targetResource = vscode2.window.activeTextEditor.document.uri;
+    }
+    if (targetResource) {
+      vscode2.debug.startDebugging(void 0, {
+        type: "pharodb",
+        name: "Debug File",
+        request: "launch",
+        program: targetResource.fsPath
+      });
+    }
+  }));
+  context.subscriptions.push(vscode2.debug.registerDebugAdapterDescriptorFactory("pharodb", factory));
+}
+
+// src/debugFactory.ts
+var vscode3 = __toModule(require("vscode"));
+var DebugAdapterFactory = class {
+  async createDebugAdapterDescriptor(session, executable) {
+    const port = client.sendRequest("dap:startServer", {}).then((result) => {
+      return result;
+    });
+    return new vscode3.DebugAdapterServer(await port, "localhost");
+  }
+};
+
+// src/moosebookProvider.ts
+var vscode4 = __toModule(require("vscode"));
+
+// src/moosebook.ts
+var Moosebook = class {
+  constructor(doc) {
+  }
+  async dispose() {
+  }
+  async restartKernel() {
+  }
+  async toggleDebugging(document) {
+  }
+  async eval(cell) {
+    return client.sendRequest("command:notebookPrintIt", {line: cell.document.getText()}).then((result) => {
+      if (result.mimetype == "error")
+        throw new Error(result.content);
+      return result;
+    }).catch((error) => {
+      throw new Error(error);
+    });
+  }
+  addDebugSession(session) {
+  }
+  removeDebugSession(session) {
+  }
+};
+
+// src/moosebookProvider.ts
+var MoosebookContentProvider = class {
+  constructor() {
+    this.id = "moosebookKernel";
+    this.label = "Moosebook Kernel";
+    this._associations = new Map();
+    this._localDisposables = [];
+    this.supportedLanguages = ["pharo"];
+    this._executionOrder = 0;
+    this._localDisposables.push(vscode4.notebook.onDidOpenNotebookDocument((document) => {
+      const docKey = document.uri.toString();
+      if (!this.lookupMoosebook(docKey)) {
+        const project = new Moosebook(document);
+        this.register(docKey, project, (key) => document.cells.some((cell) => cell.index.toString() === key) || key === docKey);
+      }
+    }), vscode4.notebook.onDidCloseNotebookDocument((document) => {
+      const project = this.unregister(document.uri.toString());
+      if (project) {
+        project.dispose();
+      }
+    }));
+    vscode4.notebook.registerNotebookKernelProvider({
+      viewType: "moosebook"
+    }, {
+      provideKernels: () => {
+        return [this];
+      }
+    });
+  }
+  interrupt(document) {
+    throw new Error("Method not implemented.");
+  }
+  async executeCellsRequest(document, ranges) {
+    const cells = [];
+    for (let range of ranges) {
+      for (let i = range.start; i < range.end; i++) {
+        cells.push(document.cells[i]);
+      }
+    }
+    this._executeCells(cells);
+  }
+  async _executeCells(cells) {
+    for (const cell of cells) {
+      const execution = vscode4.notebook.createNotebookCellExecutionTask(cell.notebook.uri, cell.index, this.id);
+      await this._doExecuteCell(execution);
+    }
+  }
+  async _doExecuteCell(execution) {
+    execution.executionOrder = ++this._executionOrder;
+    execution.start({startTime: Date.now()});
+    let output = {mimetype: "text/html", content: "error... "};
+    let error;
+    const moosebook = this.lookupMoosebook(execution.cell.index);
+    try {
+      output = await moosebook.eval(execution.cell);
+    } catch (err) {
+      execution.replaceOutput([new vscode4.NotebookCellOutput([
+        new vscode4.NotebookCellOutputItem("application/x.notebook.error-traceback", {
+          ename: err instanceof Error && err.name || "error",
+          evalue: err instanceof Error && err.message || JSON.stringify(err, void 0, 4),
+          traceback: []
+        })
+      ])]);
+      execution.end({success: false});
+      return;
+    }
+    execution.replaceOutput([new vscode4.NotebookCellOutput([
+      new vscode4.NotebookCellOutputItem(output.mimetype, output.content)
+    ])]);
+    execution.end({success: true});
+  }
+  lookupMoosebook(keyOrUri) {
+    if (keyOrUri) {
+      let key;
+      if (typeof keyOrUri === "string") {
+        key = keyOrUri;
+      } else {
+        key = keyOrUri.toString();
+      }
+      for (let [association, value] of this._associations.values()) {
+        if (association(key)) {
+          return value;
+        }
+      }
+    }
+    return void 0;
+  }
+  async openNotebook(uri) {
+    let contents = "";
+    try {
+      contents = Buffer.from(await vscode4.workspace.fs.readFile(uri)).toString("utf8");
+    } catch {
+    }
+    let raw;
+    try {
+      raw = JSON.parse(contents);
+    } catch {
+      raw = [];
+    }
+    const notebookData = {
+      metadata: new vscode4.NotebookDocumentMetadata().with({editable: true}),
+      cells: raw.map((item) => ({
+        kind: item.kind,
+        source: item.value,
+        language: item.language,
+        outputs: [],
+        metadata: new vscode4.NotebookCellMetadata().with({
+          editable: true,
+          breakpointMargin: false
+        })
+      }))
+    };
+    return notebookData;
+  }
+  saveNotebook(document, _cancellation) {
+    return this._save(document, document.uri);
+  }
+  saveNotebookAs(targetResource, document, _cancellation) {
+    return this._save(document, targetResource);
+  }
+  async resolveNotebook(_document, _webview) {
+  }
+  async backupNotebook(document, context, _cancellation) {
+    return {id: "", delete: () => {
+    }};
+  }
+  dispose() {
+  }
+  async _save(document, targetResource) {
+    let contents = [];
+    for (let cell of document.cells) {
+      contents.push({
+        kind: cell.kind,
+        language: cell.document.languageId,
+        value: cell.document.getText()
+      });
+    }
+    await vscode4.workspace.fs.writeFile(targetResource, Buffer.from(JSON.stringify(contents)));
+  }
+  register(key, project, association) {
+    this._associations.set(key, [association, project]);
+  }
+  unregister(key) {
+    const project = this.lookupMoosebook(key);
+    if (project) {
+      this._associations.delete(key);
+    }
+    return project;
+  }
+};
+
+// src/extension.ts
+var client;
+var socket;
+async function activate(context) {
+  console.info("Start Pharo Language extension");
+  return resolveRequirements().catch((error) => {
+    import_vscode.window.showErrorMessage(error.message, error.label).then((selection) => {
+      if (error.label && error.label === selection && error.command) {
+        import_vscode.commands.executeCommand(error.command, error.commandParam);
+      }
+    });
+  }).then(async (requirements2) => {
+    client = createPharoLanguageServer(requirements2, context);
+    context.subscriptions.push(client.start());
+    import_vscode.window.showInformationMessage("Client started");
+    createCommands(context);
+    let factory = new DebugAdapterFactory();
+    activateDebug(context, factory);
+    console.info("Start moosebook");
+    const moosebookContentProvider = new MoosebookContentProvider();
+    context.subscriptions.push(vscode5.notebook.registerNotebookContentProvider("moosebook", moosebookContentProvider));
+  });
+}
+function createCommands(context) {
+  context.subscriptions.push(vscode5.commands.registerCommand("pharo.extensionVersion", commandPharoExtensionVersion));
+  context.subscriptions.push(vscode5.commands.registerCommand("pharo.printIt", commandPharoPrintIt));
+  context.subscriptions.push(vscode5.commands.registerCommand("pharo.showIt", commandPharoShowIt));
+  context.subscriptions.push(vscode5.commands.registerCommand("pharo.save", commandPharoSave));
+}
+function deactivate() {
+}
+function commandPharoExtensionVersion() {
+  client.sendRequest("command:version").then((result) => {
+    console.log(result);
+    import_vscode.window.showInformationMessage(result);
+  });
+}
+function commandPharoPrintIt() {
+  let editor = vscode5.window.activeTextEditor;
+  let selection = editor.selection;
+  client.sendRequest("command:printIt", {line: editor.document.getText(selection)}).then((result) => {
+    editor.edit((editBuilder) => {
+      editBuilder.replace(new vscode5.Selection(selection.end, selection.end), ' "' + result + '" ');
+    });
+  }).catch((error) => import_vscode.window.showErrorMessage(error));
+}
+function commandPharoShowIt() {
+  let editor = vscode5.window.activeTextEditor;
+  client.sendRequest("command:printIt", {line: editor.document.getText(editor.selection)}).then((result) => {
+    import_vscode.window.showInformationMessage(result);
+  }).catch((error) => import_vscode.window.showErrorMessage(error));
+}
+function commandPharoSave() {
+  client.sendRequest("command:save").then((result) => {
+    import_vscode.window.showInformationMessage(result);
+  }).catch((error) => import_vscode.window.showErrorMessage(error));
+}
+function createPharoLanguageServer(requirements2, context) {
+  let serverOptions = () => createServerWithSocket(requirements2.pathToVM, requirements2.pathToImage, context);
+  let clientOptions = {
+    documentSelector: [{scheme: "file", language: "pharo"}],
+    synchronize: {
+      fileEvents: import_vscode.workspace.createFileSystemWatcher("**/.clientrc")
+    }
+  };
+  return new import_vscode_languageclient.LanguageClient("pharoLanguageServer", "Pharo Language Server", serverOptions, clientOptions);
+}
+async function createServerWithSocket(pharoPath, pathToImage, context) {
+  let dls;
+  dls = child_process.spawn(pharoPath.trim(), [
+    pathToImage,
+    "st",
+    context.asAbsolutePath("/res/run-server.st")
+  ]);
+  await sleep(8e3);
+  socket = net.connect({port: 4e3, host: "127.0.0.1"}, () => {
+    console.log("connected to server!");
+  });
+  let result = {
+    writer: socket,
+    reader: socket
+  };
+  return Promise.resolve(result);
+}
+async function sleep(ms) {
+  return new Promise((resolve) => setTimeout(resolve, ms));
+}
+//# sourceMappingURL=extension.js.map
diff --git a/dist/extension.js.map b/dist/extension.js.map
new file mode 100644
index 0000000..97ac931
--- /dev/null
+++ b/dist/extension.js.map
@@ -0,0 +1,7 @@
+{
+  "version": 3,
+  "sources": ["../node_modules/vscode-languageclient/node_modules/semver/semver.js", "../node_modules/vscode-jsonrpc/lib/is.js", "../node_modules/vscode-jsonrpc/lib/messages.js", "../node_modules/vscode-jsonrpc/lib/events.js", "../node_modules/vscode-jsonrpc/lib/messageReader.js", "../node_modules/vscode-jsonrpc/lib/messageWriter.js", "../node_modules/vscode-jsonrpc/lib/cancellation.js", "../node_modules/vscode-jsonrpc/lib/linkedMap.js", "../node_modules/vscode-jsonrpc/lib/pipeSupport.js", "../node_modules/vscode-jsonrpc/lib/socketSupport.js", "../node_modules/vscode-jsonrpc/lib/main.js", "../node_modules/vscode-languageserver-types/lib/umd/main.js", "../node_modules/vscode-languageserver-protocol/lib/utils/is.js", "../node_modules/vscode-languageserver-protocol/lib/messages.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.implementation.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.typeDefinition.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.workspaceFolders.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.configuration.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.colorProvider.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.foldingRange.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.declaration.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.selectionRange.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.progress.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.callHierarchy.proposed.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.sematicTokens.proposed.js", "../node_modules/vscode-languageserver-protocol/lib/main.js", "../node_modules/vscode-languageclient/lib/utils/is.js", "../node_modules/vscode-languageclient/lib/protocolCompletionItem.js", "../node_modules/vscode-languageclient/lib/protocolCodeLens.js", "../node_modules/vscode-languageclient/lib/protocolDocumentLink.js", "../node_modules/vscode-languageclient/lib/codeConverter.js", "../node_modules/vscode-languageclient/lib/protocolConverter.js", "../node_modules/vscode-languageclient/lib/utils/async.js", "../node_modules/vscode-languageclient/lib/utils/uuid.js", "../node_modules/vscode-languageclient/lib/progressPart.js", "../node_modules/vscode-languageclient/lib/client.js", "../node_modules/vscode-languageclient/lib/colorProvider.js", "../node_modules/vscode-languageclient/lib/configuration.js", "../node_modules/vscode-languageclient/lib/implementation.js", "../node_modules/vscode-languageclient/lib/typeDefinition.js", "../node_modules/vscode-languageclient/lib/workspaceFolders.js", "../node_modules/vscode-languageclient/lib/foldingRange.js", "../node_modules/vscode-languageclient/lib/declaration.js", "../node_modules/vscode-languageclient/lib/selectionRange.js", "../node_modules/vscode-languageclient/lib/progress.js", "../node_modules/vscode-languageclient/lib/callHierarchy.proposed.js", "../node_modules/vscode-languageclient/lib/semanticTokens.proposed.js", "../node_modules/vscode-languageclient/lib/utils/processes.js", "../node_modules/vscode-languageclient/lib/main.js", "../src/extension.ts", "../src/requirements.ts", "../src/activateDebug.ts", "../src/debugFactory.ts", "../src/moosebookProvider.ts", "../src/moosebook.ts"],
+  "sourcesContent": ["exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n    process.env &&\n    process.env.NODE_DEBUG &&\n    /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n  debug = function () {\n    var args = Array.prototype.slice.call(arguments, 0)\n    args.unshift('SEMVER')\n    console.log.apply(console, args)\n  }\n} else {\n  debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n  /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar t = exports.tokens = {}\nvar R = 0\n\nfunction tok (n) {\n  t[n] = R++\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ntok('NUMERICIDENTIFIER')\nsrc[t.NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\ntok('NUMERICIDENTIFIERLOOSE')\nsrc[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ntok('NONNUMERICIDENTIFIER')\nsrc[t.NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ntok('MAINVERSION')\nsrc[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[t.NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[t.NUMERICIDENTIFIER] + ')'\n\ntok('MAINVERSIONLOOSE')\nsrc[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ntok('PRERELEASEIDENTIFIER')\nsrc[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +\n                            '|' + src[t.NONNUMERICIDENTIFIER] + ')'\n\ntok('PRERELEASEIDENTIFIERLOOSE')\nsrc[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +\n                                 '|' + src[t.NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ntok('PRERELEASE')\nsrc[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +\n                  '(?:\\\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'\n\ntok('PRERELEASELOOSE')\nsrc[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +\n                       '(?:\\\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ntok('BUILDIDENTIFIER')\nsrc[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ntok('BUILD')\nsrc[t.BUILD] = '(?:\\\\+(' + src[t.BUILDIDENTIFIER] +\n             '(?:\\\\.' + src[t.BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ntok('FULL')\ntok('FULLPLAIN')\nsrc[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +\n                  src[t.PRERELEASE] + '?' +\n                  src[t.BUILD] + '?'\n\nsrc[t.FULL] = '^' + src[t.FULLPLAIN] + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ntok('LOOSEPLAIN')\nsrc[t.LOOSEPLAIN] = '[v=\\\\s]*' + src[t.MAINVERSIONLOOSE] +\n                  src[t.PRERELEASELOOSE] + '?' +\n                  src[t.BUILD] + '?'\n\ntok('LOOSE')\nsrc[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'\n\ntok('GTLT')\nsrc[t.GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ntok('XRANGEIDENTIFIERLOOSE')\nsrc[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\ntok('XRANGEIDENTIFIER')\nsrc[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\ntok('XRANGEPLAIN')\nsrc[t.XRANGEPLAIN] = '[v=\\\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:' + src[t.PRERELEASE] + ')?' +\n                   src[t.BUILD] + '?' +\n                   ')?)?'\n\ntok('XRANGEPLAINLOOSE')\nsrc[t.XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:' + src[t.PRERELEASELOOSE] + ')?' +\n                        src[t.BUILD] + '?' +\n                        ')?)?'\n\ntok('XRANGE')\nsrc[t.XRANGE] = '^' + src[t.GTLT] + '\\\\s*' + src[t.XRANGEPLAIN] + '$'\ntok('XRANGELOOSE')\nsrc[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\\\s*' + src[t.XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ntok('COERCE')\nsrc[t.COERCE] = '(^|[^\\\\d])' +\n              '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:$|[^\\\\d])'\ntok('COERCERTL')\nre[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ntok('LONETILDE')\nsrc[t.LONETILDE] = '(?:~>?)'\n\ntok('TILDETRIM')\nsrc[t.TILDETRIM] = '(\\\\s*)' + src[t.LONETILDE] + '\\\\s+'\nre[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\ntok('TILDE')\nsrc[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'\ntok('TILDELOOSE')\nsrc[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ntok('LONECARET')\nsrc[t.LONECARET] = '(?:\\\\^)'\n\ntok('CARETTRIM')\nsrc[t.CARETTRIM] = '(\\\\s*)' + src[t.LONECARET] + '\\\\s+'\nre[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\ntok('CARET')\nsrc[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'\ntok('CARETLOOSE')\nsrc[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ntok('COMPARATORLOOSE')\nsrc[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'\ntok('COMPARATOR')\nsrc[t.COMPARATOR] = '^' + src[t.GTLT] + '\\\\s*(' + src[t.FULLPLAIN] + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ntok('COMPARATORTRIM')\nsrc[t.COMPARATORTRIM] = '(\\\\s*)' + src[t.GTLT] +\n                      '\\\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ntok('HYPHENRANGE')\nsrc[t.HYPHENRANGE] = '^\\\\s*(' + src[t.XRANGEPLAIN] + ')' +\n                   '\\\\s+-\\\\s+' +\n                   '(' + src[t.XRANGEPLAIN] + ')' +\n                   '\\\\s*$'\n\ntok('HYPHENRANGELOOSE')\nsrc[t.HYPHENRANGELOOSE] = '^\\\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s+-\\\\s+' +\n                        '(' + src[t.XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\ntok('STAR')\nsrc[t.STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n  debug(i, src[i])\n  if (!re[i]) {\n    re[i] = new RegExp(src[i])\n  }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  if (version.length > MAX_LENGTH) {\n    return null\n  }\n\n  var r = options.loose ? re[t.LOOSE] : re[t.FULL]\n  if (!r.test(version)) {\n    return null\n  }\n\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    return null\n  }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n  var v = parse(version, options)\n  return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n  var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n  if (version instanceof SemVer) {\n    if (version.loose === options.loose) {\n      return version\n    } else {\n      version = version.version\n    }\n  } else if (typeof version !== 'string') {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  if (version.length > MAX_LENGTH) {\n    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n  }\n\n  if (!(this instanceof SemVer)) {\n    return new SemVer(version, options)\n  }\n\n  debug('SemVer', version, options)\n  this.options = options\n  this.loose = !!options.loose\n\n  var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n  if (!m) {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  this.raw = version\n\n  // these are actually numbers\n  this.major = +m[1]\n  this.minor = +m[2]\n  this.patch = +m[3]\n\n  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n    throw new TypeError('Invalid major version')\n  }\n\n  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n    throw new TypeError('Invalid minor version')\n  }\n\n  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n    throw new TypeError('Invalid patch version')\n  }\n\n  // numberify any prerelease numeric ids\n  if (!m[4]) {\n    this.prerelease = []\n  } else {\n    this.prerelease = m[4].split('.').map(function (id) {\n      if (/^[0-9]+$/.test(id)) {\n        var num = +id\n        if (num >= 0 && num < MAX_SAFE_INTEGER) {\n          return num\n        }\n      }\n      return id\n    })\n  }\n\n  this.build = m[5] ? m[5].split('.') : []\n  this.format()\n}\n\nSemVer.prototype.format = function () {\n  this.version = this.major + '.' + this.minor + '.' + this.patch\n  if (this.prerelease.length) {\n    this.version += '-' + this.prerelease.join('.')\n  }\n  return this.version\n}\n\nSemVer.prototype.toString = function () {\n  return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n  debug('SemVer.compare', this.version, this.options, other)\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return compareIdentifiers(this.major, other.major) ||\n         compareIdentifiers(this.minor, other.minor) ||\n         compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  // NOT having a prerelease is > having one\n  if (this.prerelease.length && !other.prerelease.length) {\n    return -1\n  } else if (!this.prerelease.length && other.prerelease.length) {\n    return 1\n  } else if (!this.prerelease.length && !other.prerelease.length) {\n    return 0\n  }\n\n  var i = 0\n  do {\n    var a = this.prerelease[i]\n    var b = other.prerelease[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\nSemVer.prototype.compareBuild = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  var i = 0\n  do {\n    var a = this.build[i]\n    var b = other.build[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n  switch (release) {\n    case 'premajor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor = 0\n      this.major++\n      this.inc('pre', identifier)\n      break\n    case 'preminor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor++\n      this.inc('pre', identifier)\n      break\n    case 'prepatch':\n      // If this is already a prerelease, it will bump to the next version\n      // drop any prereleases that might already exist, since they are not\n      // relevant at this point.\n      this.prerelease.length = 0\n      this.inc('patch', identifier)\n      this.inc('pre', identifier)\n      break\n    // If the input is a non-prerelease version, this acts the same as\n    // prepatch.\n    case 'prerelease':\n      if (this.prerelease.length === 0) {\n        this.inc('patch', identifier)\n      }\n      this.inc('pre', identifier)\n      break\n\n    case 'major':\n      // If this is a pre-major version, bump up to the same major version.\n      // Otherwise increment major.\n      // 1.0.0-5 bumps to 1.0.0\n      // 1.1.0 bumps to 2.0.0\n      if (this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0) {\n        this.major++\n      }\n      this.minor = 0\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'minor':\n      // If this is a pre-minor version, bump up to the same minor version.\n      // Otherwise increment minor.\n      // 1.2.0-5 bumps to 1.2.0\n      // 1.2.1 bumps to 1.3.0\n      if (this.patch !== 0 || this.prerelease.length === 0) {\n        this.minor++\n      }\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'patch':\n      // If this is not a pre-release version, it will increment the patch.\n      // If it is a pre-release it will bump up to the same patch version.\n      // 1.2.0-5 patches to 1.2.0\n      // 1.2.0 patches to 1.2.1\n      if (this.prerelease.length === 0) {\n        this.patch++\n      }\n      this.prerelease = []\n      break\n    // This probably shouldn't be used publicly.\n    // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n    case 'pre':\n      if (this.prerelease.length === 0) {\n        this.prerelease = [0]\n      } else {\n        var i = this.prerelease.length\n        while (--i >= 0) {\n          if (typeof this.prerelease[i] === 'number') {\n            this.prerelease[i]++\n            i = -2\n          }\n        }\n        if (i === -1) {\n          // didn't increment anything\n          this.prerelease.push(0)\n        }\n      }\n      if (identifier) {\n        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n        if (this.prerelease[0] === identifier) {\n          if (isNaN(this.prerelease[1])) {\n            this.prerelease = [identifier, 0]\n          }\n        } else {\n          this.prerelease = [identifier, 0]\n        }\n      }\n      break\n\n    default:\n      throw new Error('invalid increment argument: ' + release)\n  }\n  this.format()\n  this.raw = this.version\n  return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n  if (typeof (loose) === 'string') {\n    identifier = loose\n    loose = undefined\n  }\n\n  try {\n    return new SemVer(version, loose).inc(release, identifier).version\n  } catch (er) {\n    return null\n  }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n  if (eq(version1, version2)) {\n    return null\n  } else {\n    var v1 = parse(version1)\n    var v2 = parse(version2)\n    var prefix = ''\n    if (v1.prerelease.length || v2.prerelease.length) {\n      prefix = 'pre'\n      var defaultResult = 'prerelease'\n    }\n    for (var key in v1) {\n      if (key === 'major' || key === 'minor' || key === 'patch') {\n        if (v1[key] !== v2[key]) {\n          return prefix + key\n        }\n      }\n    }\n    return defaultResult // may be undefined\n  }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n  var anum = numeric.test(a)\n  var bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n  return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n  return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n  return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n  return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n  return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n  return compare(a, b, true)\n}\n\nexports.compareBuild = compareBuild\nfunction compareBuild (a, b, loose) {\n  var versionA = new SemVer(a, loose)\n  var versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n  return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compareBuild(a, b, loose)\n  })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compareBuild(b, a, loose)\n  })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n  return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n  return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n  return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n  return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n  return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n  return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError('Invalid operator: ' + op)\n  }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (comp instanceof Comparator) {\n    if (comp.loose === !!options.loose) {\n      return comp\n    } else {\n      comp = comp.value\n    }\n  }\n\n  if (!(this instanceof Comparator)) {\n    return new Comparator(comp, options)\n  }\n\n  debug('comparator', comp, options)\n  this.options = options\n  this.loose = !!options.loose\n  this.parse(comp)\n\n  if (this.semver === ANY) {\n    this.value = ''\n  } else {\n    this.value = this.operator + this.semver.version\n  }\n\n  debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n  var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n  var m = comp.match(r)\n\n  if (!m) {\n    throw new TypeError('Invalid comparator: ' + comp)\n  }\n\n  this.operator = m[1] !== undefined ? m[1] : ''\n  if (this.operator === '=') {\n    this.operator = ''\n  }\n\n  // if it literally is just '>' or '' then allow anything.\n  if (!m[2]) {\n    this.semver = ANY\n  } else {\n    this.semver = new SemVer(m[2], this.options.loose)\n  }\n}\n\nComparator.prototype.toString = function () {\n  return this.value\n}\n\nComparator.prototype.test = function (version) {\n  debug('Comparator.test', version, this.options.loose)\n\n  if (this.semver === ANY || version === ANY) {\n    return true\n  }\n\n  if (typeof version === 'string') {\n    try {\n      version = new SemVer(version, this.options)\n    } catch (er) {\n      return false\n    }\n  }\n\n  return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n  if (!(comp instanceof Comparator)) {\n    throw new TypeError('a Comparator is required')\n  }\n\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  var rangeTmp\n\n  if (this.operator === '') {\n    if (this.value === '') {\n      return true\n    }\n    rangeTmp = new Range(comp.value, options)\n    return satisfies(this.value, rangeTmp, options)\n  } else if (comp.operator === '') {\n    if (comp.value === '') {\n      return true\n    }\n    rangeTmp = new Range(this.value, options)\n    return satisfies(comp.semver, rangeTmp, options)\n  }\n\n  var sameDirectionIncreasing =\n    (this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '>=' || comp.operator === '>')\n  var sameDirectionDecreasing =\n    (this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '<=' || comp.operator === '<')\n  var sameSemVer = this.semver.version === comp.semver.version\n  var differentDirectionsInclusive =\n    (this.operator === '>=' || this.operator === '<=') &&\n    (comp.operator === '>=' || comp.operator === '<=')\n  var oppositeDirectionsLessThan =\n    cmp(this.semver, '<', comp.semver, options) &&\n    ((this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '<=' || comp.operator === '<'))\n  var oppositeDirectionsGreaterThan =\n    cmp(this.semver, '>', comp.semver, options) &&\n    ((this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '>=' || comp.operator === '>'))\n\n  return sameDirectionIncreasing || sameDirectionDecreasing ||\n    (sameSemVer && differentDirectionsInclusive) ||\n    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (range instanceof Range) {\n    if (range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease) {\n      return range\n    } else {\n      return new Range(range.raw, options)\n    }\n  }\n\n  if (range instanceof Comparator) {\n    return new Range(range.value, options)\n  }\n\n  if (!(this instanceof Range)) {\n    return new Range(range, options)\n  }\n\n  this.options = options\n  this.loose = !!options.loose\n  this.includePrerelease = !!options.includePrerelease\n\n  // First, split based on boolean or ||\n  this.raw = range\n  this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n    return this.parseRange(range.trim())\n  }, this).filter(function (c) {\n    // throw out any that are not relevant for whatever reason\n    return c.length\n  })\n\n  if (!this.set.length) {\n    throw new TypeError('Invalid SemVer Range: ' + range)\n  }\n\n  this.format()\n}\n\nRange.prototype.format = function () {\n  this.range = this.set.map(function (comps) {\n    return comps.join(' ').trim()\n  }).join('||').trim()\n  return this.range\n}\n\nRange.prototype.toString = function () {\n  return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n  var loose = this.options.loose\n  range = range.trim()\n  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n  var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n  range = range.replace(hr, hyphenReplace)\n  debug('hyphen replace', range)\n  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n  range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n  debug('comparator trim', range, re[t.COMPARATORTRIM])\n\n  // `~ 1.2.3` => `~1.2.3`\n  range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n  // `^ 1.2.3` => `^1.2.3`\n  range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n  // normalize spaces\n  range = range.split(/\\s+/).join(' ')\n\n  // At this point, the range is completely trimmed and\n  // ready to be split into comparators.\n\n  var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n  var set = range.split(' ').map(function (comp) {\n    return parseComparator(comp, this.options)\n  }, this).join(' ').split(/\\s+/)\n  if (this.options.loose) {\n    // in loose mode, throw out any that are not valid comparators\n    set = set.filter(function (comp) {\n      return !!comp.match(compRe)\n    })\n  }\n  set = set.map(function (comp) {\n    return new Comparator(comp, this.options)\n  }, this)\n\n  return set\n}\n\nRange.prototype.intersects = function (range, options) {\n  if (!(range instanceof Range)) {\n    throw new TypeError('a Range is required')\n  }\n\n  return this.set.some(function (thisComparators) {\n    return (\n      isSatisfiable(thisComparators, options) &&\n      range.set.some(function (rangeComparators) {\n        return (\n          isSatisfiable(rangeComparators, options) &&\n          thisComparators.every(function (thisComparator) {\n            return rangeComparators.every(function (rangeComparator) {\n              return thisComparator.intersects(rangeComparator, options)\n            })\n          })\n        )\n      })\n    )\n  })\n}\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nfunction isSatisfiable (comparators, options) {\n  var result = true\n  var remainingComparators = comparators.slice()\n  var testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every(function (otherComparator) {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n  return new Range(range, options).set.map(function (comp) {\n    return comp.map(function (c) {\n      return c.value\n    }).join(' ').trim().split(' ')\n  })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nfunction isX (id) {\n  return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceTilde(comp, options)\n  }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n  var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('tilde', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0\n      ret = '>=' + M + '.' + m + '.' + p +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceCaret(comp, options)\n  }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n  debug('caret', comp, options)\n  var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('caret', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n      } else {\n        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nfunction replaceXRanges (comp, options) {\n  debug('replaceXRanges', comp, options)\n  return comp.split(/\\s+/).map(function (comp) {\n    return replaceXRange(comp, options)\n  }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n  comp = comp.trim()\n  var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    var xM = isX(M)\n    var xm = xM || isX(m)\n    var xp = xm || isX(p)\n    var anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        // >1.2.3 => >= 1.2.4\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      ret = gtlt + M + '.' + m + '.' + p + pr\n    } else if (xm) {\n      ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr\n    } else if (xp) {\n      ret = '>=' + M + '.' + m + '.0' + pr +\n        ' <' + M + '.' + (+m + 1) + '.0' + pr\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[t.STAR], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = '>=' + fM + '.0.0'\n  } else if (isX(fp)) {\n    from = '>=' + fM + '.' + fm + '.0'\n  } else {\n    from = '>=' + from\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = '<' + (+tM + 1) + '.0.0'\n  } else if (isX(tp)) {\n    to = '<' + tM + '.' + (+tm + 1) + '.0'\n  } else if (tpr) {\n    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n  } else {\n    to = '<=' + to\n  }\n\n  return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n  if (!version) {\n    return false\n  }\n\n  if (typeof version === 'string') {\n    try {\n      version = new SemVer(version, this.options)\n    } catch (er) {\n      return false\n    }\n  }\n\n  for (var i = 0; i < this.set.length; i++) {\n    if (testSet(this.set[i], version, this.options)) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction testSet (set, version, options) {\n  for (var i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        var allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n  var max = null\n  var maxSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n  var min = null\n  var minSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n  range = new Range(range, loose)\n\n  var minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    comparators.forEach(function (comparator) {\n      // Clone to avoid manipulating the comparator's semver object.\n      var compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!minver || gt(minver, compver)) {\n            minver = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error('Unexpected operation: ' + comparator.operator)\n      }\n    })\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n  return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n  return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  var gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisifes the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    var high = null\n    var low = null\n\n    comparators.forEach(function (comparator) {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n  var parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version, options) {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  var match = null\n  if (!options.rtl) {\n    match = version.match(re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    var next\n    while ((next = re[t.COERCERTL].exec(version)) &&\n      (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n          next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    re[t.COERCERTL].lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  return parse(match[2] +\n    '.' + (match[3] || '0') +\n    '.' + (match[4] || '0'), options)\n}\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction boolean(value) {\r\n    return value === true || value === false;\r\n}\r\nexports.boolean = boolean;\r\nfunction string(value) {\r\n    return typeof value === 'string' || value instanceof String;\r\n}\r\nexports.string = string;\r\nfunction number(value) {\r\n    return typeof value === 'number' || value instanceof Number;\r\n}\r\nexports.number = number;\r\nfunction error(value) {\r\n    return value instanceof Error;\r\n}\r\nexports.error = error;\r\nfunction func(value) {\r\n    return typeof value === 'function';\r\n}\r\nexports.func = func;\r\nfunction array(value) {\r\n    return Array.isArray(value);\r\n}\r\nexports.array = array;\r\nfunction stringArray(value) {\r\n    return array(value) && value.every(elem => string(elem));\r\n}\r\nexports.stringArray = stringArray;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst is = require(\"./is\");\r\n/**\r\n * Predefined error codes.\r\n */\r\nvar ErrorCodes;\r\n(function (ErrorCodes) {\r\n    // Defined by JSON RPC\r\n    ErrorCodes.ParseError = -32700;\r\n    ErrorCodes.InvalidRequest = -32600;\r\n    ErrorCodes.MethodNotFound = -32601;\r\n    ErrorCodes.InvalidParams = -32602;\r\n    ErrorCodes.InternalError = -32603;\r\n    ErrorCodes.serverErrorStart = -32099;\r\n    ErrorCodes.serverErrorEnd = -32000;\r\n    ErrorCodes.ServerNotInitialized = -32002;\r\n    ErrorCodes.UnknownErrorCode = -32001;\r\n    // Defined by the protocol.\r\n    ErrorCodes.RequestCancelled = -32800;\r\n    ErrorCodes.ContentModified = -32801;\r\n    // Defined by VSCode library.\r\n    ErrorCodes.MessageWriteError = 1;\r\n    ErrorCodes.MessageReadError = 2;\r\n})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));\r\n/**\r\n * An error object return in a response in case a request\r\n * has failed.\r\n */\r\nclass ResponseError extends Error {\r\n    constructor(code, message, data) {\r\n        super(message);\r\n        this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;\r\n        this.data = data;\r\n        Object.setPrototypeOf(this, ResponseError.prototype);\r\n    }\r\n    toJson() {\r\n        return {\r\n            code: this.code,\r\n            message: this.message,\r\n            data: this.data,\r\n        };\r\n    }\r\n}\r\nexports.ResponseError = ResponseError;\r\n/**\r\n * An abstract implementation of a MessageType.\r\n */\r\nclass AbstractMessageType {\r\n    constructor(_method, _numberOfParams) {\r\n        this._method = _method;\r\n        this._numberOfParams = _numberOfParams;\r\n    }\r\n    get method() {\r\n        return this._method;\r\n    }\r\n    get numberOfParams() {\r\n        return this._numberOfParams;\r\n    }\r\n}\r\nexports.AbstractMessageType = AbstractMessageType;\r\n/**\r\n * Classes to type request response pairs\r\n *\r\n * The type parameter RO will be removed in the next major version\r\n * of the JSON RPC library since it is a LSP concept and doesn't\r\n * belong here. For now it is tagged as default never.\r\n */\r\nclass RequestType0 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 0);\r\n    }\r\n}\r\nexports.RequestType0 = RequestType0;\r\nclass RequestType extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n    }\r\n}\r\nexports.RequestType = RequestType;\r\nclass RequestType1 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n    }\r\n}\r\nexports.RequestType1 = RequestType1;\r\nclass RequestType2 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 2);\r\n    }\r\n}\r\nexports.RequestType2 = RequestType2;\r\nclass RequestType3 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 3);\r\n    }\r\n}\r\nexports.RequestType3 = RequestType3;\r\nclass RequestType4 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 4);\r\n    }\r\n}\r\nexports.RequestType4 = RequestType4;\r\nclass RequestType5 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 5);\r\n    }\r\n}\r\nexports.RequestType5 = RequestType5;\r\nclass RequestType6 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 6);\r\n    }\r\n}\r\nexports.RequestType6 = RequestType6;\r\nclass RequestType7 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 7);\r\n    }\r\n}\r\nexports.RequestType7 = RequestType7;\r\nclass RequestType8 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 8);\r\n    }\r\n}\r\nexports.RequestType8 = RequestType8;\r\nclass RequestType9 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 9);\r\n    }\r\n}\r\nexports.RequestType9 = RequestType9;\r\n/**\r\n * The type parameter RO will be removed in the next major version\r\n * of the JSON RPC library since it is a LSP concept and doesn't\r\n * belong here. For now it is tagged as default never.\r\n */\r\nclass NotificationType extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n        this._ = undefined;\r\n    }\r\n}\r\nexports.NotificationType = NotificationType;\r\nclass NotificationType0 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 0);\r\n    }\r\n}\r\nexports.NotificationType0 = NotificationType0;\r\nclass NotificationType1 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n    }\r\n}\r\nexports.NotificationType1 = NotificationType1;\r\nclass NotificationType2 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 2);\r\n    }\r\n}\r\nexports.NotificationType2 = NotificationType2;\r\nclass NotificationType3 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 3);\r\n    }\r\n}\r\nexports.NotificationType3 = NotificationType3;\r\nclass NotificationType4 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 4);\r\n    }\r\n}\r\nexports.NotificationType4 = NotificationType4;\r\nclass NotificationType5 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 5);\r\n    }\r\n}\r\nexports.NotificationType5 = NotificationType5;\r\nclass NotificationType6 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 6);\r\n    }\r\n}\r\nexports.NotificationType6 = NotificationType6;\r\nclass NotificationType7 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 7);\r\n    }\r\n}\r\nexports.NotificationType7 = NotificationType7;\r\nclass NotificationType8 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 8);\r\n    }\r\n}\r\nexports.NotificationType8 = NotificationType8;\r\nclass NotificationType9 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 9);\r\n    }\r\n}\r\nexports.NotificationType9 = NotificationType9;\r\n/**\r\n * Tests if the given message is a request message\r\n */\r\nfunction isRequestMessage(message) {\r\n    let candidate = message;\r\n    return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));\r\n}\r\nexports.isRequestMessage = isRequestMessage;\r\n/**\r\n * Tests if the given message is a notification message\r\n */\r\nfunction isNotificationMessage(message) {\r\n    let candidate = message;\r\n    return candidate && is.string(candidate.method) && message.id === void 0;\r\n}\r\nexports.isNotificationMessage = isNotificationMessage;\r\n/**\r\n * Tests if the given message is a response message\r\n */\r\nfunction isResponseMessage(message) {\r\n    let candidate = message;\r\n    return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);\r\n}\r\nexports.isResponseMessage = isResponseMessage;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Disposable;\r\n(function (Disposable) {\r\n    function create(func) {\r\n        return {\r\n            dispose: func\r\n        };\r\n    }\r\n    Disposable.create = create;\r\n})(Disposable = exports.Disposable || (exports.Disposable = {}));\r\nvar Event;\r\n(function (Event) {\r\n    const _disposable = { dispose() { } };\r\n    Event.None = function () { return _disposable; };\r\n})(Event = exports.Event || (exports.Event = {}));\r\nclass CallbackList {\r\n    add(callback, context = null, bucket) {\r\n        if (!this._callbacks) {\r\n            this._callbacks = [];\r\n            this._contexts = [];\r\n        }\r\n        this._callbacks.push(callback);\r\n        this._contexts.push(context);\r\n        if (Array.isArray(bucket)) {\r\n            bucket.push({ dispose: () => this.remove(callback, context) });\r\n        }\r\n    }\r\n    remove(callback, context = null) {\r\n        if (!this._callbacks) {\r\n            return;\r\n        }\r\n        var foundCallbackWithDifferentContext = false;\r\n        for (var i = 0, len = this._callbacks.length; i < len; i++) {\r\n            if (this._callbacks[i] === callback) {\r\n                if (this._contexts[i] === context) {\r\n                    // callback & context match => remove it\r\n                    this._callbacks.splice(i, 1);\r\n                    this._contexts.splice(i, 1);\r\n                    return;\r\n                }\r\n                else {\r\n                    foundCallbackWithDifferentContext = true;\r\n                }\r\n            }\r\n        }\r\n        if (foundCallbackWithDifferentContext) {\r\n            throw new Error('When adding a listener with a context, you should remove it with the same context');\r\n        }\r\n    }\r\n    invoke(...args) {\r\n        if (!this._callbacks) {\r\n            return [];\r\n        }\r\n        var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);\r\n        for (var i = 0, len = callbacks.length; i < len; i++) {\r\n            try {\r\n                ret.push(callbacks[i].apply(contexts[i], args));\r\n            }\r\n            catch (e) {\r\n                // eslint-disable-next-line no-console\r\n                console.error(e);\r\n            }\r\n        }\r\n        return ret;\r\n    }\r\n    isEmpty() {\r\n        return !this._callbacks || this._callbacks.length === 0;\r\n    }\r\n    dispose() {\r\n        this._callbacks = undefined;\r\n        this._contexts = undefined;\r\n    }\r\n}\r\nclass Emitter {\r\n    constructor(_options) {\r\n        this._options = _options;\r\n    }\r\n    /**\r\n     * For the public to allow to subscribe\r\n     * to events from this Emitter\r\n     */\r\n    get event() {\r\n        if (!this._event) {\r\n            this._event = (listener, thisArgs, disposables) => {\r\n                if (!this._callbacks) {\r\n                    this._callbacks = new CallbackList();\r\n                }\r\n                if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {\r\n                    this._options.onFirstListenerAdd(this);\r\n                }\r\n                this._callbacks.add(listener, thisArgs);\r\n                let result;\r\n                result = {\r\n                    dispose: () => {\r\n                        this._callbacks.remove(listener, thisArgs);\r\n                        result.dispose = Emitter._noop;\r\n                        if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {\r\n                            this._options.onLastListenerRemove(this);\r\n                        }\r\n                    }\r\n                };\r\n                if (Array.isArray(disposables)) {\r\n                    disposables.push(result);\r\n                }\r\n                return result;\r\n            };\r\n        }\r\n        return this._event;\r\n    }\r\n    /**\r\n     * To be kept private to fire an event to\r\n     * subscribers\r\n     */\r\n    fire(event) {\r\n        if (this._callbacks) {\r\n            this._callbacks.invoke.call(this._callbacks, event);\r\n        }\r\n    }\r\n    dispose() {\r\n        if (this._callbacks) {\r\n            this._callbacks.dispose();\r\n            this._callbacks = undefined;\r\n        }\r\n    }\r\n}\r\nexports.Emitter = Emitter;\r\nEmitter._noop = function () { };\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"./events\");\r\nconst Is = require(\"./is\");\r\nlet DefaultSize = 8192;\r\nlet CR = Buffer.from('\\r', 'ascii')[0];\r\nlet LF = Buffer.from('\\n', 'ascii')[0];\r\nlet CRLF = '\\r\\n';\r\nclass MessageBuffer {\r\n    constructor(encoding = 'utf8') {\r\n        this.encoding = encoding;\r\n        this.index = 0;\r\n        this.buffer = Buffer.allocUnsafe(DefaultSize);\r\n    }\r\n    append(chunk) {\r\n        var toAppend = chunk;\r\n        if (typeof (chunk) === 'string') {\r\n            var str = chunk;\r\n            var bufferLen = Buffer.byteLength(str, this.encoding);\r\n            toAppend = Buffer.allocUnsafe(bufferLen);\r\n            toAppend.write(str, 0, bufferLen, this.encoding);\r\n        }\r\n        if (this.buffer.length - this.index >= toAppend.length) {\r\n            toAppend.copy(this.buffer, this.index, 0, toAppend.length);\r\n        }\r\n        else {\r\n            var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;\r\n            if (this.index === 0) {\r\n                this.buffer = Buffer.allocUnsafe(newSize);\r\n                toAppend.copy(this.buffer, 0, 0, toAppend.length);\r\n            }\r\n            else {\r\n                this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);\r\n            }\r\n        }\r\n        this.index += toAppend.length;\r\n    }\r\n    tryReadHeaders() {\r\n        let result = undefined;\r\n        let current = 0;\r\n        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\n            current++;\r\n        }\r\n        // No header / body separator found (e.g CRLFCRLF)\r\n        if (current + 3 >= this.index) {\r\n            return result;\r\n        }\r\n        result = Object.create(null);\r\n        let headers = this.buffer.toString('ascii', 0, current).split(CRLF);\r\n        headers.forEach((header) => {\r\n            let index = header.indexOf(':');\r\n            if (index === -1) {\r\n                throw new Error('Message header must separate key and value using :');\r\n            }\r\n            let key = header.substr(0, index);\r\n            let value = header.substr(index + 1).trim();\r\n            result[key] = value;\r\n        });\r\n        let nextStart = current + 4;\r\n        this.buffer = this.buffer.slice(nextStart);\r\n        this.index = this.index - nextStart;\r\n        return result;\r\n    }\r\n    tryReadContent(length) {\r\n        if (this.index < length) {\r\n            return null;\r\n        }\r\n        let result = this.buffer.toString(this.encoding, 0, length);\r\n        let nextStart = length;\r\n        this.buffer.copy(this.buffer, 0, nextStart);\r\n        this.index = this.index - nextStart;\r\n        return result;\r\n    }\r\n    get numberOfBytes() {\r\n        return this.index;\r\n    }\r\n}\r\nvar MessageReader;\r\n(function (MessageReader) {\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&\r\n            Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);\r\n    }\r\n    MessageReader.is = is;\r\n})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));\r\nclass AbstractMessageReader {\r\n    constructor() {\r\n        this.errorEmitter = new events_1.Emitter();\r\n        this.closeEmitter = new events_1.Emitter();\r\n        this.partialMessageEmitter = new events_1.Emitter();\r\n    }\r\n    dispose() {\r\n        this.errorEmitter.dispose();\r\n        this.closeEmitter.dispose();\r\n    }\r\n    get onError() {\r\n        return this.errorEmitter.event;\r\n    }\r\n    fireError(error) {\r\n        this.errorEmitter.fire(this.asError(error));\r\n    }\r\n    get onClose() {\r\n        return this.closeEmitter.event;\r\n    }\r\n    fireClose() {\r\n        this.closeEmitter.fire(undefined);\r\n    }\r\n    get onPartialMessage() {\r\n        return this.partialMessageEmitter.event;\r\n    }\r\n    firePartialMessage(info) {\r\n        this.partialMessageEmitter.fire(info);\r\n    }\r\n    asError(error) {\r\n        if (error instanceof Error) {\r\n            return error;\r\n        }\r\n        else {\r\n            return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r\n        }\r\n    }\r\n}\r\nexports.AbstractMessageReader = AbstractMessageReader;\r\nclass StreamMessageReader extends AbstractMessageReader {\r\n    constructor(readable, encoding = 'utf8') {\r\n        super();\r\n        this.readable = readable;\r\n        this.buffer = new MessageBuffer(encoding);\r\n        this._partialMessageTimeout = 10000;\r\n    }\r\n    set partialMessageTimeout(timeout) {\r\n        this._partialMessageTimeout = timeout;\r\n    }\r\n    get partialMessageTimeout() {\r\n        return this._partialMessageTimeout;\r\n    }\r\n    listen(callback) {\r\n        this.nextMessageLength = -1;\r\n        this.messageToken = 0;\r\n        this.partialMessageTimer = undefined;\r\n        this.callback = callback;\r\n        this.readable.on('data', (data) => {\r\n            this.onData(data);\r\n        });\r\n        this.readable.on('error', (error) => this.fireError(error));\r\n        this.readable.on('close', () => this.fireClose());\r\n    }\r\n    onData(data) {\r\n        this.buffer.append(data);\r\n        while (true) {\r\n            if (this.nextMessageLength === -1) {\r\n                let headers = this.buffer.tryReadHeaders();\r\n                if (!headers) {\r\n                    return;\r\n                }\r\n                let contentLength = headers['Content-Length'];\r\n                if (!contentLength) {\r\n                    throw new Error('Header must provide a Content-Length property.');\r\n                }\r\n                let length = parseInt(contentLength);\r\n                if (isNaN(length)) {\r\n                    throw new Error('Content-Length value must be a number.');\r\n                }\r\n                this.nextMessageLength = length;\r\n                // Take the encoding form the header. For compatibility\r\n                // treat both utf-8 and utf8 as node utf8\r\n            }\r\n            var msg = this.buffer.tryReadContent(this.nextMessageLength);\r\n            if (msg === null) {\r\n                /** We haven't received the full message yet. */\r\n                this.setPartialMessageTimer();\r\n                return;\r\n            }\r\n            this.clearPartialMessageTimer();\r\n            this.nextMessageLength = -1;\r\n            this.messageToken++;\r\n            var json = JSON.parse(msg);\r\n            this.callback(json);\r\n        }\r\n    }\r\n    clearPartialMessageTimer() {\r\n        if (this.partialMessageTimer) {\r\n            clearTimeout(this.partialMessageTimer);\r\n            this.partialMessageTimer = undefined;\r\n        }\r\n    }\r\n    setPartialMessageTimer() {\r\n        this.clearPartialMessageTimer();\r\n        if (this._partialMessageTimeout <= 0) {\r\n            return;\r\n        }\r\n        this.partialMessageTimer = setTimeout((token, timeout) => {\r\n            this.partialMessageTimer = undefined;\r\n            if (token === this.messageToken) {\r\n                this.firePartialMessage({ messageToken: token, waitingTime: timeout });\r\n                this.setPartialMessageTimer();\r\n            }\r\n        }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);\r\n    }\r\n}\r\nexports.StreamMessageReader = StreamMessageReader;\r\nclass IPCMessageReader extends AbstractMessageReader {\r\n    constructor(process) {\r\n        super();\r\n        this.process = process;\r\n        let eventEmitter = this.process;\r\n        eventEmitter.on('error', (error) => this.fireError(error));\r\n        eventEmitter.on('close', () => this.fireClose());\r\n    }\r\n    listen(callback) {\r\n        this.process.on('message', callback);\r\n    }\r\n}\r\nexports.IPCMessageReader = IPCMessageReader;\r\nclass SocketMessageReader extends StreamMessageReader {\r\n    constructor(socket, encoding = 'utf-8') {\r\n        super(socket, encoding);\r\n    }\r\n}\r\nexports.SocketMessageReader = SocketMessageReader;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"./events\");\r\nconst Is = require(\"./is\");\r\nlet ContentLength = 'Content-Length: ';\r\nlet CRLF = '\\r\\n';\r\nvar MessageWriter;\r\n(function (MessageWriter) {\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&\r\n            Is.func(candidate.onError) && Is.func(candidate.write);\r\n    }\r\n    MessageWriter.is = is;\r\n})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));\r\nclass AbstractMessageWriter {\r\n    constructor() {\r\n        this.errorEmitter = new events_1.Emitter();\r\n        this.closeEmitter = new events_1.Emitter();\r\n    }\r\n    dispose() {\r\n        this.errorEmitter.dispose();\r\n        this.closeEmitter.dispose();\r\n    }\r\n    get onError() {\r\n        return this.errorEmitter.event;\r\n    }\r\n    fireError(error, message, count) {\r\n        this.errorEmitter.fire([this.asError(error), message, count]);\r\n    }\r\n    get onClose() {\r\n        return this.closeEmitter.event;\r\n    }\r\n    fireClose() {\r\n        this.closeEmitter.fire(undefined);\r\n    }\r\n    asError(error) {\r\n        if (error instanceof Error) {\r\n            return error;\r\n        }\r\n        else {\r\n            return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r\n        }\r\n    }\r\n}\r\nexports.AbstractMessageWriter = AbstractMessageWriter;\r\nclass StreamMessageWriter extends AbstractMessageWriter {\r\n    constructor(writable, encoding = 'utf8') {\r\n        super();\r\n        this.writable = writable;\r\n        this.encoding = encoding;\r\n        this.errorCount = 0;\r\n        this.writable.on('error', (error) => this.fireError(error));\r\n        this.writable.on('close', () => this.fireClose());\r\n    }\r\n    write(msg) {\r\n        let json = JSON.stringify(msg);\r\n        let contentLength = Buffer.byteLength(json, this.encoding);\r\n        let headers = [\r\n            ContentLength, contentLength.toString(), CRLF,\r\n            CRLF\r\n        ];\r\n        try {\r\n            // Header must be written in ASCII encoding\r\n            this.writable.write(headers.join(''), 'ascii');\r\n            // Now write the content. This can be written in any encoding\r\n            this.writable.write(json, this.encoding);\r\n            this.errorCount = 0;\r\n        }\r\n        catch (error) {\r\n            this.errorCount++;\r\n            this.fireError(error, msg, this.errorCount);\r\n        }\r\n    }\r\n}\r\nexports.StreamMessageWriter = StreamMessageWriter;\r\nclass IPCMessageWriter extends AbstractMessageWriter {\r\n    constructor(process) {\r\n        super();\r\n        this.process = process;\r\n        this.errorCount = 0;\r\n        this.queue = [];\r\n        this.sending = false;\r\n        let eventEmitter = this.process;\r\n        eventEmitter.on('error', (error) => this.fireError(error));\r\n        eventEmitter.on('close', () => this.fireClose);\r\n    }\r\n    write(msg) {\r\n        if (!this.sending && this.queue.length === 0) {\r\n            // See https://github.com/nodejs/node/issues/7657\r\n            this.doWriteMessage(msg);\r\n        }\r\n        else {\r\n            this.queue.push(msg);\r\n        }\r\n    }\r\n    doWriteMessage(msg) {\r\n        try {\r\n            if (this.process.send) {\r\n                this.sending = true;\r\n                this.process.send(msg, undefined, undefined, (error) => {\r\n                    this.sending = false;\r\n                    if (error) {\r\n                        this.errorCount++;\r\n                        this.fireError(error, msg, this.errorCount);\r\n                    }\r\n                    else {\r\n                        this.errorCount = 0;\r\n                    }\r\n                    if (this.queue.length > 0) {\r\n                        this.doWriteMessage(this.queue.shift());\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        catch (error) {\r\n            this.errorCount++;\r\n            this.fireError(error, msg, this.errorCount);\r\n        }\r\n    }\r\n}\r\nexports.IPCMessageWriter = IPCMessageWriter;\r\nclass SocketMessageWriter extends AbstractMessageWriter {\r\n    constructor(socket, encoding = 'utf8') {\r\n        super();\r\n        this.socket = socket;\r\n        this.queue = [];\r\n        this.sending = false;\r\n        this.encoding = encoding;\r\n        this.errorCount = 0;\r\n        this.socket.on('error', (error) => this.fireError(error));\r\n        this.socket.on('close', () => this.fireClose());\r\n    }\r\n    dispose() {\r\n        super.dispose();\r\n        this.socket.destroy();\r\n    }\r\n    write(msg) {\r\n        if (!this.sending && this.queue.length === 0) {\r\n            // See https://github.com/nodejs/node/issues/7657\r\n            this.doWriteMessage(msg);\r\n        }\r\n        else {\r\n            this.queue.push(msg);\r\n        }\r\n    }\r\n    doWriteMessage(msg) {\r\n        let json = JSON.stringify(msg);\r\n        let contentLength = Buffer.byteLength(json, this.encoding);\r\n        let headers = [\r\n            ContentLength, contentLength.toString(), CRLF,\r\n            CRLF\r\n        ];\r\n        try {\r\n            // Header must be written in ASCII encoding\r\n            this.sending = true;\r\n            this.socket.write(headers.join(''), 'ascii', (error) => {\r\n                if (error) {\r\n                    this.handleError(error, msg);\r\n                }\r\n                try {\r\n                    // Now write the content. This can be written in any encoding\r\n                    this.socket.write(json, this.encoding, (error) => {\r\n                        this.sending = false;\r\n                        if (error) {\r\n                            this.handleError(error, msg);\r\n                        }\r\n                        else {\r\n                            this.errorCount = 0;\r\n                        }\r\n                        if (this.queue.length > 0) {\r\n                            this.doWriteMessage(this.queue.shift());\r\n                        }\r\n                    });\r\n                }\r\n                catch (error) {\r\n                    this.handleError(error, msg);\r\n                }\r\n            });\r\n        }\r\n        catch (error) {\r\n            this.handleError(error, msg);\r\n        }\r\n    }\r\n    handleError(error, msg) {\r\n        this.errorCount++;\r\n        this.fireError(error, msg, this.errorCount);\r\n    }\r\n}\r\nexports.SocketMessageWriter = SocketMessageWriter;\r\n", "/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"./events\");\r\nconst Is = require(\"./is\");\r\nvar CancellationToken;\r\n(function (CancellationToken) {\r\n    CancellationToken.None = Object.freeze({\r\n        isCancellationRequested: false,\r\n        onCancellationRequested: events_1.Event.None\r\n    });\r\n    CancellationToken.Cancelled = Object.freeze({\r\n        isCancellationRequested: true,\r\n        onCancellationRequested: events_1.Event.None\r\n    });\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && (candidate === CancellationToken.None\r\n            || candidate === CancellationToken.Cancelled\r\n            || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));\r\n    }\r\n    CancellationToken.is = is;\r\n})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));\r\nconst shortcutEvent = Object.freeze(function (callback, context) {\r\n    let handle = setTimeout(callback.bind(context), 0);\r\n    return { dispose() { clearTimeout(handle); } };\r\n});\r\nclass MutableToken {\r\n    constructor() {\r\n        this._isCancelled = false;\r\n    }\r\n    cancel() {\r\n        if (!this._isCancelled) {\r\n            this._isCancelled = true;\r\n            if (this._emitter) {\r\n                this._emitter.fire(undefined);\r\n                this.dispose();\r\n            }\r\n        }\r\n    }\r\n    get isCancellationRequested() {\r\n        return this._isCancelled;\r\n    }\r\n    get onCancellationRequested() {\r\n        if (this._isCancelled) {\r\n            return shortcutEvent;\r\n        }\r\n        if (!this._emitter) {\r\n            this._emitter = new events_1.Emitter();\r\n        }\r\n        return this._emitter.event;\r\n    }\r\n    dispose() {\r\n        if (this._emitter) {\r\n            this._emitter.dispose();\r\n            this._emitter = undefined;\r\n        }\r\n    }\r\n}\r\nclass CancellationTokenSource {\r\n    get token() {\r\n        if (!this._token) {\r\n            // be lazy and create the token only when\r\n            // actually needed\r\n            this._token = new MutableToken();\r\n        }\r\n        return this._token;\r\n    }\r\n    cancel() {\r\n        if (!this._token) {\r\n            // save an object by returning the default\r\n            // cancelled token when cancellation happens\r\n            // before someone asks for the token\r\n            this._token = CancellationToken.Cancelled;\r\n        }\r\n        else {\r\n            this._token.cancel();\r\n        }\r\n    }\r\n    dispose() {\r\n        if (!this._token) {\r\n            // ensure to initialize with an empty token if we had none\r\n            this._token = CancellationToken.None;\r\n        }\r\n        else if (this._token instanceof MutableToken) {\r\n            // actually dispose\r\n            this._token.dispose();\r\n        }\r\n    }\r\n}\r\nexports.CancellationTokenSource = CancellationTokenSource;\r\n", "\"use strict\";\r\n/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Touch;\r\n(function (Touch) {\r\n    Touch.None = 0;\r\n    Touch.First = 1;\r\n    Touch.Last = 2;\r\n})(Touch = exports.Touch || (exports.Touch = {}));\r\nclass LinkedMap {\r\n    constructor() {\r\n        this._map = new Map();\r\n        this._head = undefined;\r\n        this._tail = undefined;\r\n        this._size = 0;\r\n    }\r\n    clear() {\r\n        this._map.clear();\r\n        this._head = undefined;\r\n        this._tail = undefined;\r\n        this._size = 0;\r\n    }\r\n    isEmpty() {\r\n        return !this._head && !this._tail;\r\n    }\r\n    get size() {\r\n        return this._size;\r\n    }\r\n    has(key) {\r\n        return this._map.has(key);\r\n    }\r\n    get(key) {\r\n        const item = this._map.get(key);\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        return item.value;\r\n    }\r\n    set(key, value, touch = Touch.None) {\r\n        let item = this._map.get(key);\r\n        if (item) {\r\n            item.value = value;\r\n            if (touch !== Touch.None) {\r\n                this.touch(item, touch);\r\n            }\r\n        }\r\n        else {\r\n            item = { key, value, next: undefined, previous: undefined };\r\n            switch (touch) {\r\n                case Touch.None:\r\n                    this.addItemLast(item);\r\n                    break;\r\n                case Touch.First:\r\n                    this.addItemFirst(item);\r\n                    break;\r\n                case Touch.Last:\r\n                    this.addItemLast(item);\r\n                    break;\r\n                default:\r\n                    this.addItemLast(item);\r\n                    break;\r\n            }\r\n            this._map.set(key, item);\r\n            this._size++;\r\n        }\r\n    }\r\n    delete(key) {\r\n        const item = this._map.get(key);\r\n        if (!item) {\r\n            return false;\r\n        }\r\n        this._map.delete(key);\r\n        this.removeItem(item);\r\n        this._size--;\r\n        return true;\r\n    }\r\n    shift() {\r\n        if (!this._head && !this._tail) {\r\n            return undefined;\r\n        }\r\n        if (!this._head || !this._tail) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        const item = this._head;\r\n        this._map.delete(item.key);\r\n        this.removeItem(item);\r\n        this._size--;\r\n        return item.value;\r\n    }\r\n    forEach(callbackfn, thisArg) {\r\n        let current = this._head;\r\n        while (current) {\r\n            if (thisArg) {\r\n                callbackfn.bind(thisArg)(current.value, current.key, this);\r\n            }\r\n            else {\r\n                callbackfn(current.value, current.key, this);\r\n            }\r\n            current = current.next;\r\n        }\r\n    }\r\n    forEachReverse(callbackfn, thisArg) {\r\n        let current = this._tail;\r\n        while (current) {\r\n            if (thisArg) {\r\n                callbackfn.bind(thisArg)(current.value, current.key, this);\r\n            }\r\n            else {\r\n                callbackfn(current.value, current.key, this);\r\n            }\r\n            current = current.previous;\r\n        }\r\n    }\r\n    values() {\r\n        let result = [];\r\n        let current = this._head;\r\n        while (current) {\r\n            result.push(current.value);\r\n            current = current.next;\r\n        }\r\n        return result;\r\n    }\r\n    keys() {\r\n        let result = [];\r\n        let current = this._head;\r\n        while (current) {\r\n            result.push(current.key);\r\n            current = current.next;\r\n        }\r\n        return result;\r\n    }\r\n    /* JSON RPC run on es5 which has no Symbol.iterator\r\n    public keys(): IterableIterator<K> {\r\n        let current = this._head;\r\n        let iterator: IterableIterator<K> = {\r\n            [Symbol.iterator]() {\r\n                return iterator;\r\n            },\r\n            next():IteratorResult<K> {\r\n                if (current) {\r\n                    let result = { value: current.key, done: false };\r\n                    current = current.next;\r\n                    return result;\r\n                } else {\r\n                    return { value: undefined, done: true };\r\n                }\r\n            }\r\n        };\r\n        return iterator;\r\n    }\r\n\r\n    public values(): IterableIterator<V> {\r\n        let current = this._head;\r\n        let iterator: IterableIterator<V> = {\r\n            [Symbol.iterator]() {\r\n                return iterator;\r\n            },\r\n            next():IteratorResult<V> {\r\n                if (current) {\r\n                    let result = { value: current.value, done: false };\r\n                    current = current.next;\r\n                    return result;\r\n                } else {\r\n                    return { value: undefined, done: true };\r\n                }\r\n            }\r\n        };\r\n        return iterator;\r\n    }\r\n    */\r\n    addItemFirst(item) {\r\n        // First time Insert\r\n        if (!this._head && !this._tail) {\r\n            this._tail = item;\r\n        }\r\n        else if (!this._head) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        else {\r\n            item.next = this._head;\r\n            this._head.previous = item;\r\n        }\r\n        this._head = item;\r\n    }\r\n    addItemLast(item) {\r\n        // First time Insert\r\n        if (!this._head && !this._tail) {\r\n            this._head = item;\r\n        }\r\n        else if (!this._tail) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        else {\r\n            item.previous = this._tail;\r\n            this._tail.next = item;\r\n        }\r\n        this._tail = item;\r\n    }\r\n    removeItem(item) {\r\n        if (item === this._head && item === this._tail) {\r\n            this._head = undefined;\r\n            this._tail = undefined;\r\n        }\r\n        else if (item === this._head) {\r\n            this._head = item.next;\r\n        }\r\n        else if (item === this._tail) {\r\n            this._tail = item.previous;\r\n        }\r\n        else {\r\n            const next = item.next;\r\n            const previous = item.previous;\r\n            if (!next || !previous) {\r\n                throw new Error('Invalid list');\r\n            }\r\n            next.previous = previous;\r\n            previous.next = next;\r\n        }\r\n    }\r\n    touch(item, touch) {\r\n        if (!this._head || !this._tail) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        if ((touch !== Touch.First && touch !== Touch.Last)) {\r\n            return;\r\n        }\r\n        if (touch === Touch.First) {\r\n            if (item === this._head) {\r\n                return;\r\n            }\r\n            const next = item.next;\r\n            const previous = item.previous;\r\n            // Unlink the item\r\n            if (item === this._tail) {\r\n                // previous must be defined since item was not head but is tail\r\n                // So there are more than on item in the map\r\n                previous.next = undefined;\r\n                this._tail = previous;\r\n            }\r\n            else {\r\n                // Both next and previous are not undefined since item was neither head nor tail.\r\n                next.previous = previous;\r\n                previous.next = next;\r\n            }\r\n            // Insert the node at head\r\n            item.previous = undefined;\r\n            item.next = this._head;\r\n            this._head.previous = item;\r\n            this._head = item;\r\n        }\r\n        else if (touch === Touch.Last) {\r\n            if (item === this._tail) {\r\n                return;\r\n            }\r\n            const next = item.next;\r\n            const previous = item.previous;\r\n            // Unlink the item.\r\n            if (item === this._head) {\r\n                // next must be defined since item was not tail but is head\r\n                // So there are more than on item in the map\r\n                next.previous = undefined;\r\n                this._head = next;\r\n            }\r\n            else {\r\n                // Both next and previous are not undefined since item was neither head nor tail.\r\n                next.previous = previous;\r\n                previous.next = next;\r\n            }\r\n            item.next = undefined;\r\n            item.previous = this._tail;\r\n            this._tail.next = item;\r\n            this._tail = item;\r\n        }\r\n    }\r\n}\r\nexports.LinkedMap = LinkedMap;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst path_1 = require(\"path\");\r\nconst os_1 = require(\"os\");\r\nconst crypto_1 = require(\"crypto\");\r\nconst net_1 = require(\"net\");\r\nconst messageReader_1 = require(\"./messageReader\");\r\nconst messageWriter_1 = require(\"./messageWriter\");\r\nfunction generateRandomPipeName() {\r\n    const randomSuffix = crypto_1.randomBytes(21).toString('hex');\r\n    if (process.platform === 'win32') {\r\n        return `\\\\\\\\.\\\\pipe\\\\vscode-jsonrpc-${randomSuffix}-sock`;\r\n    }\r\n    else {\r\n        // Mac/Unix: use socket file\r\n        return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);\r\n    }\r\n}\r\nexports.generateRandomPipeName = generateRandomPipeName;\r\nfunction createClientPipeTransport(pipeName, encoding = 'utf-8') {\r\n    let connectResolve;\r\n    let connected = new Promise((resolve, _reject) => {\r\n        connectResolve = resolve;\r\n    });\r\n    return new Promise((resolve, reject) => {\r\n        let server = net_1.createServer((socket) => {\r\n            server.close();\r\n            connectResolve([\r\n                new messageReader_1.SocketMessageReader(socket, encoding),\r\n                new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n            ]);\r\n        });\r\n        server.on('error', reject);\r\n        server.listen(pipeName, () => {\r\n            server.removeListener('error', reject);\r\n            resolve({\r\n                onConnected: () => { return connected; }\r\n            });\r\n        });\r\n    });\r\n}\r\nexports.createClientPipeTransport = createClientPipeTransport;\r\nfunction createServerPipeTransport(pipeName, encoding = 'utf-8') {\r\n    const socket = net_1.createConnection(pipeName);\r\n    return [\r\n        new messageReader_1.SocketMessageReader(socket, encoding),\r\n        new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n    ];\r\n}\r\nexports.createServerPipeTransport = createServerPipeTransport;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst net_1 = require(\"net\");\r\nconst messageReader_1 = require(\"./messageReader\");\r\nconst messageWriter_1 = require(\"./messageWriter\");\r\nfunction createClientSocketTransport(port, encoding = 'utf-8') {\r\n    let connectResolve;\r\n    let connected = new Promise((resolve, _reject) => {\r\n        connectResolve = resolve;\r\n    });\r\n    return new Promise((resolve, reject) => {\r\n        let server = net_1.createServer((socket) => {\r\n            server.close();\r\n            connectResolve([\r\n                new messageReader_1.SocketMessageReader(socket, encoding),\r\n                new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n            ]);\r\n        });\r\n        server.on('error', reject);\r\n        server.listen(port, '127.0.0.1', () => {\r\n            server.removeListener('error', reject);\r\n            resolve({\r\n                onConnected: () => { return connected; }\r\n            });\r\n        });\r\n    });\r\n}\r\nexports.createClientSocketTransport = createClientSocketTransport;\r\nfunction createServerSocketTransport(port, encoding = 'utf-8') {\r\n    const socket = net_1.createConnection(port, '127.0.0.1');\r\n    return [\r\n        new messageReader_1.SocketMessageReader(socket, encoding),\r\n        new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n    ];\r\n}\r\nexports.createServerSocketTransport = createServerSocketTransport;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n/// <reference path=\"../typings/thenable.d.ts\" />\r\n'use strict';\r\nfunction __export(m) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst Is = require(\"./is\");\r\nconst messages_1 = require(\"./messages\");\r\nexports.RequestType = messages_1.RequestType;\r\nexports.RequestType0 = messages_1.RequestType0;\r\nexports.RequestType1 = messages_1.RequestType1;\r\nexports.RequestType2 = messages_1.RequestType2;\r\nexports.RequestType3 = messages_1.RequestType3;\r\nexports.RequestType4 = messages_1.RequestType4;\r\nexports.RequestType5 = messages_1.RequestType5;\r\nexports.RequestType6 = messages_1.RequestType6;\r\nexports.RequestType7 = messages_1.RequestType7;\r\nexports.RequestType8 = messages_1.RequestType8;\r\nexports.RequestType9 = messages_1.RequestType9;\r\nexports.ResponseError = messages_1.ResponseError;\r\nexports.ErrorCodes = messages_1.ErrorCodes;\r\nexports.NotificationType = messages_1.NotificationType;\r\nexports.NotificationType0 = messages_1.NotificationType0;\r\nexports.NotificationType1 = messages_1.NotificationType1;\r\nexports.NotificationType2 = messages_1.NotificationType2;\r\nexports.NotificationType3 = messages_1.NotificationType3;\r\nexports.NotificationType4 = messages_1.NotificationType4;\r\nexports.NotificationType5 = messages_1.NotificationType5;\r\nexports.NotificationType6 = messages_1.NotificationType6;\r\nexports.NotificationType7 = messages_1.NotificationType7;\r\nexports.NotificationType8 = messages_1.NotificationType8;\r\nexports.NotificationType9 = messages_1.NotificationType9;\r\nconst messageReader_1 = require(\"./messageReader\");\r\nexports.MessageReader = messageReader_1.MessageReader;\r\nexports.StreamMessageReader = messageReader_1.StreamMessageReader;\r\nexports.IPCMessageReader = messageReader_1.IPCMessageReader;\r\nexports.SocketMessageReader = messageReader_1.SocketMessageReader;\r\nconst messageWriter_1 = require(\"./messageWriter\");\r\nexports.MessageWriter = messageWriter_1.MessageWriter;\r\nexports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;\r\nexports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;\r\nexports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;\r\nconst events_1 = require(\"./events\");\r\nexports.Disposable = events_1.Disposable;\r\nexports.Event = events_1.Event;\r\nexports.Emitter = events_1.Emitter;\r\nconst cancellation_1 = require(\"./cancellation\");\r\nexports.CancellationTokenSource = cancellation_1.CancellationTokenSource;\r\nexports.CancellationToken = cancellation_1.CancellationToken;\r\nconst linkedMap_1 = require(\"./linkedMap\");\r\n__export(require(\"./pipeSupport\"));\r\n__export(require(\"./socketSupport\"));\r\nvar CancelNotification;\r\n(function (CancelNotification) {\r\n    CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');\r\n})(CancelNotification || (CancelNotification = {}));\r\nvar ProgressNotification;\r\n(function (ProgressNotification) {\r\n    ProgressNotification.type = new messages_1.NotificationType('$/progress');\r\n})(ProgressNotification || (ProgressNotification = {}));\r\nclass ProgressType {\r\n    constructor() {\r\n    }\r\n}\r\nexports.ProgressType = ProgressType;\r\nexports.NullLogger = Object.freeze({\r\n    error: () => { },\r\n    warn: () => { },\r\n    info: () => { },\r\n    log: () => { }\r\n});\r\nvar Trace;\r\n(function (Trace) {\r\n    Trace[Trace[\"Off\"] = 0] = \"Off\";\r\n    Trace[Trace[\"Messages\"] = 1] = \"Messages\";\r\n    Trace[Trace[\"Verbose\"] = 2] = \"Verbose\";\r\n})(Trace = exports.Trace || (exports.Trace = {}));\r\n(function (Trace) {\r\n    function fromString(value) {\r\n        if (!Is.string(value)) {\r\n            return Trace.Off;\r\n        }\r\n        value = value.toLowerCase();\r\n        switch (value) {\r\n            case 'off':\r\n                return Trace.Off;\r\n            case 'messages':\r\n                return Trace.Messages;\r\n            case 'verbose':\r\n                return Trace.Verbose;\r\n            default:\r\n                return Trace.Off;\r\n        }\r\n    }\r\n    Trace.fromString = fromString;\r\n    function toString(value) {\r\n        switch (value) {\r\n            case Trace.Off:\r\n                return 'off';\r\n            case Trace.Messages:\r\n                return 'messages';\r\n            case Trace.Verbose:\r\n                return 'verbose';\r\n            default:\r\n                return 'off';\r\n        }\r\n    }\r\n    Trace.toString = toString;\r\n})(Trace = exports.Trace || (exports.Trace = {}));\r\nvar TraceFormat;\r\n(function (TraceFormat) {\r\n    TraceFormat[\"Text\"] = \"text\";\r\n    TraceFormat[\"JSON\"] = \"json\";\r\n})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));\r\n(function (TraceFormat) {\r\n    function fromString(value) {\r\n        value = value.toLowerCase();\r\n        if (value === 'json') {\r\n            return TraceFormat.JSON;\r\n        }\r\n        else {\r\n            return TraceFormat.Text;\r\n        }\r\n    }\r\n    TraceFormat.fromString = fromString;\r\n})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));\r\nvar SetTraceNotification;\r\n(function (SetTraceNotification) {\r\n    SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');\r\n})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));\r\nvar LogTraceNotification;\r\n(function (LogTraceNotification) {\r\n    LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');\r\n})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));\r\nvar ConnectionErrors;\r\n(function (ConnectionErrors) {\r\n    /**\r\n     * The connection is closed.\r\n     */\r\n    ConnectionErrors[ConnectionErrors[\"Closed\"] = 1] = \"Closed\";\r\n    /**\r\n     * The connection got disposed.\r\n     */\r\n    ConnectionErrors[ConnectionErrors[\"Disposed\"] = 2] = \"Disposed\";\r\n    /**\r\n     * The connection is already in listening mode.\r\n     */\r\n    ConnectionErrors[ConnectionErrors[\"AlreadyListening\"] = 3] = \"AlreadyListening\";\r\n})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));\r\nclass ConnectionError extends Error {\r\n    constructor(code, message) {\r\n        super(message);\r\n        this.code = code;\r\n        Object.setPrototypeOf(this, ConnectionError.prototype);\r\n    }\r\n}\r\nexports.ConnectionError = ConnectionError;\r\nvar ConnectionStrategy;\r\n(function (ConnectionStrategy) {\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && Is.func(candidate.cancelUndispatched);\r\n    }\r\n    ConnectionStrategy.is = is;\r\n})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));\r\nvar ConnectionState;\r\n(function (ConnectionState) {\r\n    ConnectionState[ConnectionState[\"New\"] = 1] = \"New\";\r\n    ConnectionState[ConnectionState[\"Listening\"] = 2] = \"Listening\";\r\n    ConnectionState[ConnectionState[\"Closed\"] = 3] = \"Closed\";\r\n    ConnectionState[ConnectionState[\"Disposed\"] = 4] = \"Disposed\";\r\n})(ConnectionState || (ConnectionState = {}));\r\nfunction _createMessageConnection(messageReader, messageWriter, logger, strategy) {\r\n    let sequenceNumber = 0;\r\n    let notificationSquenceNumber = 0;\r\n    let unknownResponseSquenceNumber = 0;\r\n    const version = '2.0';\r\n    let starRequestHandler = undefined;\r\n    let requestHandlers = Object.create(null);\r\n    let starNotificationHandler = undefined;\r\n    let notificationHandlers = Object.create(null);\r\n    let progressHandlers = new Map();\r\n    let timer;\r\n    let messageQueue = new linkedMap_1.LinkedMap();\r\n    let responsePromises = Object.create(null);\r\n    let requestTokens = Object.create(null);\r\n    let trace = Trace.Off;\r\n    let traceFormat = TraceFormat.Text;\r\n    let tracer;\r\n    let state = ConnectionState.New;\r\n    let errorEmitter = new events_1.Emitter();\r\n    let closeEmitter = new events_1.Emitter();\r\n    let unhandledNotificationEmitter = new events_1.Emitter();\r\n    let unhandledProgressEmitter = new events_1.Emitter();\r\n    let disposeEmitter = new events_1.Emitter();\r\n    function createRequestQueueKey(id) {\r\n        return 'req-' + id.toString();\r\n    }\r\n    function createResponseQueueKey(id) {\r\n        if (id === null) {\r\n            return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();\r\n        }\r\n        else {\r\n            return 'res-' + id.toString();\r\n        }\r\n    }\r\n    function createNotificationQueueKey() {\r\n        return 'not-' + (++notificationSquenceNumber).toString();\r\n    }\r\n    function addMessageToQueue(queue, message) {\r\n        if (messages_1.isRequestMessage(message)) {\r\n            queue.set(createRequestQueueKey(message.id), message);\r\n        }\r\n        else if (messages_1.isResponseMessage(message)) {\r\n            queue.set(createResponseQueueKey(message.id), message);\r\n        }\r\n        else {\r\n            queue.set(createNotificationQueueKey(), message);\r\n        }\r\n    }\r\n    function cancelUndispatched(_message) {\r\n        return undefined;\r\n    }\r\n    function isListening() {\r\n        return state === ConnectionState.Listening;\r\n    }\r\n    function isClosed() {\r\n        return state === ConnectionState.Closed;\r\n    }\r\n    function isDisposed() {\r\n        return state === ConnectionState.Disposed;\r\n    }\r\n    function closeHandler() {\r\n        if (state === ConnectionState.New || state === ConnectionState.Listening) {\r\n            state = ConnectionState.Closed;\r\n            closeEmitter.fire(undefined);\r\n        }\r\n        // If the connection is disposed don't sent close events.\r\n    }\r\n    function readErrorHandler(error) {\r\n        errorEmitter.fire([error, undefined, undefined]);\r\n    }\r\n    function writeErrorHandler(data) {\r\n        errorEmitter.fire(data);\r\n    }\r\n    messageReader.onClose(closeHandler);\r\n    messageReader.onError(readErrorHandler);\r\n    messageWriter.onClose(closeHandler);\r\n    messageWriter.onError(writeErrorHandler);\r\n    function triggerMessageQueue() {\r\n        if (timer || messageQueue.size === 0) {\r\n            return;\r\n        }\r\n        timer = setImmediate(() => {\r\n            timer = undefined;\r\n            processMessageQueue();\r\n        });\r\n    }\r\n    function processMessageQueue() {\r\n        if (messageQueue.size === 0) {\r\n            return;\r\n        }\r\n        let message = messageQueue.shift();\r\n        try {\r\n            if (messages_1.isRequestMessage(message)) {\r\n                handleRequest(message);\r\n            }\r\n            else if (messages_1.isNotificationMessage(message)) {\r\n                handleNotification(message);\r\n            }\r\n            else if (messages_1.isResponseMessage(message)) {\r\n                handleResponse(message);\r\n            }\r\n            else {\r\n                handleInvalidMessage(message);\r\n            }\r\n        }\r\n        finally {\r\n            triggerMessageQueue();\r\n        }\r\n    }\r\n    let callback = (message) => {\r\n        try {\r\n            // We have received a cancellation message. Check if the message is still in the queue\r\n            // and cancel it if allowed to do so.\r\n            if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {\r\n                let key = createRequestQueueKey(message.params.id);\r\n                let toCancel = messageQueue.get(key);\r\n                if (messages_1.isRequestMessage(toCancel)) {\r\n                    let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);\r\n                    if (response && (response.error !== void 0 || response.result !== void 0)) {\r\n                        messageQueue.delete(key);\r\n                        response.id = toCancel.id;\r\n                        traceSendingResponse(response, message.method, Date.now());\r\n                        messageWriter.write(response);\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n            addMessageToQueue(messageQueue, message);\r\n        }\r\n        finally {\r\n            triggerMessageQueue();\r\n        }\r\n    };\r\n    function handleRequest(requestMessage) {\r\n        if (isDisposed()) {\r\n            // we return here silently since we fired an event when the\r\n            // connection got disposed.\r\n            return;\r\n        }\r\n        function reply(resultOrError, method, startTime) {\r\n            let message = {\r\n                jsonrpc: version,\r\n                id: requestMessage.id\r\n            };\r\n            if (resultOrError instanceof messages_1.ResponseError) {\r\n                message.error = resultOrError.toJson();\r\n            }\r\n            else {\r\n                message.result = resultOrError === void 0 ? null : resultOrError;\r\n            }\r\n            traceSendingResponse(message, method, startTime);\r\n            messageWriter.write(message);\r\n        }\r\n        function replyError(error, method, startTime) {\r\n            let message = {\r\n                jsonrpc: version,\r\n                id: requestMessage.id,\r\n                error: error.toJson()\r\n            };\r\n            traceSendingResponse(message, method, startTime);\r\n            messageWriter.write(message);\r\n        }\r\n        function replySuccess(result, method, startTime) {\r\n            // The JSON RPC defines that a response must either have a result or an error\r\n            // So we can't treat undefined as a valid response result.\r\n            if (result === void 0) {\r\n                result = null;\r\n            }\r\n            let message = {\r\n                jsonrpc: version,\r\n                id: requestMessage.id,\r\n                result: result\r\n            };\r\n            traceSendingResponse(message, method, startTime);\r\n            messageWriter.write(message);\r\n        }\r\n        traceReceivedRequest(requestMessage);\r\n        let element = requestHandlers[requestMessage.method];\r\n        let type;\r\n        let requestHandler;\r\n        if (element) {\r\n            type = element.type;\r\n            requestHandler = element.handler;\r\n        }\r\n        let startTime = Date.now();\r\n        if (requestHandler || starRequestHandler) {\r\n            let cancellationSource = new cancellation_1.CancellationTokenSource();\r\n            let tokenKey = String(requestMessage.id);\r\n            requestTokens[tokenKey] = cancellationSource;\r\n            try {\r\n                let handlerResult;\r\n                if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {\r\n                    handlerResult = requestHandler\r\n                        ? requestHandler(cancellationSource.token)\r\n                        : starRequestHandler(requestMessage.method, cancellationSource.token);\r\n                }\r\n                else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {\r\n                    handlerResult = requestHandler\r\n                        ? requestHandler(...requestMessage.params, cancellationSource.token)\r\n                        : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);\r\n                }\r\n                else {\r\n                    handlerResult = requestHandler\r\n                        ? requestHandler(requestMessage.params, cancellationSource.token)\r\n                        : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);\r\n                }\r\n                let promise = handlerResult;\r\n                if (!handlerResult) {\r\n                    delete requestTokens[tokenKey];\r\n                    replySuccess(handlerResult, requestMessage.method, startTime);\r\n                }\r\n                else if (promise.then) {\r\n                    promise.then((resultOrError) => {\r\n                        delete requestTokens[tokenKey];\r\n                        reply(resultOrError, requestMessage.method, startTime);\r\n                    }, error => {\r\n                        delete requestTokens[tokenKey];\r\n                        if (error instanceof messages_1.ResponseError) {\r\n                            replyError(error, requestMessage.method, startTime);\r\n                        }\r\n                        else if (error && Is.string(error.message)) {\r\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\r\n                        }\r\n                        else {\r\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\r\n                        }\r\n                    });\r\n                }\r\n                else {\r\n                    delete requestTokens[tokenKey];\r\n                    reply(handlerResult, requestMessage.method, startTime);\r\n                }\r\n            }\r\n            catch (error) {\r\n                delete requestTokens[tokenKey];\r\n                if (error instanceof messages_1.ResponseError) {\r\n                    reply(error, requestMessage.method, startTime);\r\n                }\r\n                else if (error && Is.string(error.message)) {\r\n                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\r\n                }\r\n                else {\r\n                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);\r\n        }\r\n    }\r\n    function handleResponse(responseMessage) {\r\n        if (isDisposed()) {\r\n            // See handle request.\r\n            return;\r\n        }\r\n        if (responseMessage.id === null) {\r\n            if (responseMessage.error) {\r\n                logger.error(`Received response message without id: Error is: \\n${JSON.stringify(responseMessage.error, undefined, 4)}`);\r\n            }\r\n            else {\r\n                logger.error(`Received response message without id. No further error information provided.`);\r\n            }\r\n        }\r\n        else {\r\n            let key = String(responseMessage.id);\r\n            let responsePromise = responsePromises[key];\r\n            traceReceivedResponse(responseMessage, responsePromise);\r\n            if (responsePromise) {\r\n                delete responsePromises[key];\r\n                try {\r\n                    if (responseMessage.error) {\r\n                        let error = responseMessage.error;\r\n                        responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));\r\n                    }\r\n                    else if (responseMessage.result !== void 0) {\r\n                        responsePromise.resolve(responseMessage.result);\r\n                    }\r\n                    else {\r\n                        throw new Error('Should never happen.');\r\n                    }\r\n                }\r\n                catch (error) {\r\n                    if (error.message) {\r\n                        logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);\r\n                    }\r\n                    else {\r\n                        logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    function handleNotification(message) {\r\n        if (isDisposed()) {\r\n            // See handle request.\r\n            return;\r\n        }\r\n        let type = undefined;\r\n        let notificationHandler;\r\n        if (message.method === CancelNotification.type.method) {\r\n            notificationHandler = (params) => {\r\n                let id = params.id;\r\n                let source = requestTokens[String(id)];\r\n                if (source) {\r\n                    source.cancel();\r\n                }\r\n            };\r\n        }\r\n        else {\r\n            let element = notificationHandlers[message.method];\r\n            if (element) {\r\n                notificationHandler = element.handler;\r\n                type = element.type;\r\n            }\r\n        }\r\n        if (notificationHandler || starNotificationHandler) {\r\n            try {\r\n                traceReceivedNotification(message);\r\n                if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {\r\n                    notificationHandler ? notificationHandler() : starNotificationHandler(message.method);\r\n                }\r\n                else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {\r\n                    notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);\r\n                }\r\n                else {\r\n                    notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);\r\n                }\r\n            }\r\n            catch (error) {\r\n                if (error.message) {\r\n                    logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);\r\n                }\r\n                else {\r\n                    logger.error(`Notification handler '${message.method}' failed unexpectedly.`);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            unhandledNotificationEmitter.fire(message);\r\n        }\r\n    }\r\n    function handleInvalidMessage(message) {\r\n        if (!message) {\r\n            logger.error('Received empty message.');\r\n            return;\r\n        }\r\n        logger.error(`Received message which is neither a response nor a notification message:\\n${JSON.stringify(message, null, 4)}`);\r\n        // Test whether we find an id to reject the promise\r\n        let responseMessage = message;\r\n        if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {\r\n            let key = String(responseMessage.id);\r\n            let responseHandler = responsePromises[key];\r\n            if (responseHandler) {\r\n                responseHandler.reject(new Error('The received response has neither a result nor an error property.'));\r\n            }\r\n        }\r\n    }\r\n    function traceSendingRequest(message) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose && message.params) {\r\n                data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n            }\r\n            tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('send-request', message);\r\n        }\r\n    }\r\n    function traceSendingNotification(message) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.params) {\r\n                    data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    data = 'No parameters provided.\\n\\n';\r\n                }\r\n            }\r\n            tracer.log(`Sending notification '${message.method}'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('send-notification', message);\r\n        }\r\n    }\r\n    function traceSendingResponse(message, method, startTime) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.error && message.error.data) {\r\n                    data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    if (message.result) {\r\n                        data = `Result: ${JSON.stringify(message.result, null, 4)}\\n\\n`;\r\n                    }\r\n                    else if (message.error === void 0) {\r\n                        data = 'No result returned.\\n\\n';\r\n                    }\r\n                }\r\n            }\r\n            tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('send-response', message);\r\n        }\r\n    }\r\n    function traceReceivedRequest(message) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose && message.params) {\r\n                data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n            }\r\n            tracer.log(`Received request '${message.method} - (${message.id})'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('receive-request', message);\r\n        }\r\n    }\r\n    function traceReceivedNotification(message) {\r\n        if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.params) {\r\n                    data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    data = 'No parameters provided.\\n\\n';\r\n                }\r\n            }\r\n            tracer.log(`Received notification '${message.method}'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('receive-notification', message);\r\n        }\r\n    }\r\n    function traceReceivedResponse(message, responsePromise) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.error && message.error.data) {\r\n                    data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    if (message.result) {\r\n                        data = `Result: ${JSON.stringify(message.result, null, 4)}\\n\\n`;\r\n                    }\r\n                    else if (message.error === void 0) {\r\n                        data = 'No result returned.\\n\\n';\r\n                    }\r\n                }\r\n            }\r\n            if (responsePromise) {\r\n                let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';\r\n                tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);\r\n            }\r\n            else {\r\n                tracer.log(`Received response ${message.id} without active response promise.`, data);\r\n            }\r\n        }\r\n        else {\r\n            logLSPMessage('receive-response', message);\r\n        }\r\n    }\r\n    function logLSPMessage(type, message) {\r\n        if (!tracer || trace === Trace.Off) {\r\n            return;\r\n        }\r\n        const lspMessage = {\r\n            isLSPMessage: true,\r\n            type,\r\n            message,\r\n            timestamp: Date.now()\r\n        };\r\n        tracer.log(lspMessage);\r\n    }\r\n    function throwIfClosedOrDisposed() {\r\n        if (isClosed()) {\r\n            throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');\r\n        }\r\n        if (isDisposed()) {\r\n            throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');\r\n        }\r\n    }\r\n    function throwIfListening() {\r\n        if (isListening()) {\r\n            throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');\r\n        }\r\n    }\r\n    function throwIfNotListening() {\r\n        if (!isListening()) {\r\n            throw new Error('Call listen() first.');\r\n        }\r\n    }\r\n    function undefinedToNull(param) {\r\n        if (param === void 0) {\r\n            return null;\r\n        }\r\n        else {\r\n            return param;\r\n        }\r\n    }\r\n    function computeMessageParams(type, params) {\r\n        let result;\r\n        let numberOfParams = type.numberOfParams;\r\n        switch (numberOfParams) {\r\n            case 0:\r\n                result = null;\r\n                break;\r\n            case 1:\r\n                result = undefinedToNull(params[0]);\r\n                break;\r\n            default:\r\n                result = [];\r\n                for (let i = 0; i < params.length && i < numberOfParams; i++) {\r\n                    result.push(undefinedToNull(params[i]));\r\n                }\r\n                if (params.length < numberOfParams) {\r\n                    for (let i = params.length; i < numberOfParams; i++) {\r\n                        result.push(null);\r\n                    }\r\n                }\r\n                break;\r\n        }\r\n        return result;\r\n    }\r\n    let connection = {\r\n        sendNotification: (type, ...params) => {\r\n            throwIfClosedOrDisposed();\r\n            let method;\r\n            let messageParams;\r\n            if (Is.string(type)) {\r\n                method = type;\r\n                switch (params.length) {\r\n                    case 0:\r\n                        messageParams = null;\r\n                        break;\r\n                    case 1:\r\n                        messageParams = params[0];\r\n                        break;\r\n                    default:\r\n                        messageParams = params;\r\n                        break;\r\n                }\r\n            }\r\n            else {\r\n                method = type.method;\r\n                messageParams = computeMessageParams(type, params);\r\n            }\r\n            let notificationMessage = {\r\n                jsonrpc: version,\r\n                method: method,\r\n                params: messageParams\r\n            };\r\n            traceSendingNotification(notificationMessage);\r\n            messageWriter.write(notificationMessage);\r\n        },\r\n        onNotification: (type, handler) => {\r\n            throwIfClosedOrDisposed();\r\n            if (Is.func(type)) {\r\n                starNotificationHandler = type;\r\n            }\r\n            else if (handler) {\r\n                if (Is.string(type)) {\r\n                    notificationHandlers[type] = { type: undefined, handler };\r\n                }\r\n                else {\r\n                    notificationHandlers[type.method] = { type, handler };\r\n                }\r\n            }\r\n        },\r\n        onProgress: (_type, token, handler) => {\r\n            if (progressHandlers.has(token)) {\r\n                throw new Error(`Progress handler for token ${token} already registered`);\r\n            }\r\n            progressHandlers.set(token, handler);\r\n            return {\r\n                dispose: () => {\r\n                    progressHandlers.delete(token);\r\n                }\r\n            };\r\n        },\r\n        sendProgress: (_type, token, value) => {\r\n            connection.sendNotification(ProgressNotification.type, { token, value });\r\n        },\r\n        onUnhandledProgress: unhandledProgressEmitter.event,\r\n        sendRequest: (type, ...params) => {\r\n            throwIfClosedOrDisposed();\r\n            throwIfNotListening();\r\n            let method;\r\n            let messageParams;\r\n            let token = undefined;\r\n            if (Is.string(type)) {\r\n                method = type;\r\n                switch (params.length) {\r\n                    case 0:\r\n                        messageParams = null;\r\n                        break;\r\n                    case 1:\r\n                        // The cancellation token is optional so it can also be undefined.\r\n                        if (cancellation_1.CancellationToken.is(params[0])) {\r\n                            messageParams = null;\r\n                            token = params[0];\r\n                        }\r\n                        else {\r\n                            messageParams = undefinedToNull(params[0]);\r\n                        }\r\n                        break;\r\n                    default:\r\n                        const last = params.length - 1;\r\n                        if (cancellation_1.CancellationToken.is(params[last])) {\r\n                            token = params[last];\r\n                            if (params.length === 2) {\r\n                                messageParams = undefinedToNull(params[0]);\r\n                            }\r\n                            else {\r\n                                messageParams = params.slice(0, last).map(value => undefinedToNull(value));\r\n                            }\r\n                        }\r\n                        else {\r\n                            messageParams = params.map(value => undefinedToNull(value));\r\n                        }\r\n                        break;\r\n                }\r\n            }\r\n            else {\r\n                method = type.method;\r\n                messageParams = computeMessageParams(type, params);\r\n                let numberOfParams = type.numberOfParams;\r\n                token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;\r\n            }\r\n            let id = sequenceNumber++;\r\n            let result = new Promise((resolve, reject) => {\r\n                let requestMessage = {\r\n                    jsonrpc: version,\r\n                    id: id,\r\n                    method: method,\r\n                    params: messageParams\r\n                };\r\n                let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };\r\n                traceSendingRequest(requestMessage);\r\n                try {\r\n                    messageWriter.write(requestMessage);\r\n                }\r\n                catch (e) {\r\n                    // Writing the message failed. So we need to reject the promise.\r\n                    responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));\r\n                    responsePromise = null;\r\n                }\r\n                if (responsePromise) {\r\n                    responsePromises[String(id)] = responsePromise;\r\n                }\r\n            });\r\n            if (token) {\r\n                token.onCancellationRequested(() => {\r\n                    connection.sendNotification(CancelNotification.type, { id });\r\n                });\r\n            }\r\n            return result;\r\n        },\r\n        onRequest: (type, handler) => {\r\n            throwIfClosedOrDisposed();\r\n            if (Is.func(type)) {\r\n                starRequestHandler = type;\r\n            }\r\n            else if (handler) {\r\n                if (Is.string(type)) {\r\n                    requestHandlers[type] = { type: undefined, handler };\r\n                }\r\n                else {\r\n                    requestHandlers[type.method] = { type, handler };\r\n                }\r\n            }\r\n        },\r\n        trace: (_value, _tracer, sendNotificationOrTraceOptions) => {\r\n            let _sendNotification = false;\r\n            let _traceFormat = TraceFormat.Text;\r\n            if (sendNotificationOrTraceOptions !== void 0) {\r\n                if (Is.boolean(sendNotificationOrTraceOptions)) {\r\n                    _sendNotification = sendNotificationOrTraceOptions;\r\n                }\r\n                else {\r\n                    _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;\r\n                    _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;\r\n                }\r\n            }\r\n            trace = _value;\r\n            traceFormat = _traceFormat;\r\n            if (trace === Trace.Off) {\r\n                tracer = undefined;\r\n            }\r\n            else {\r\n                tracer = _tracer;\r\n            }\r\n            if (_sendNotification && !isClosed() && !isDisposed()) {\r\n                connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });\r\n            }\r\n        },\r\n        onError: errorEmitter.event,\r\n        onClose: closeEmitter.event,\r\n        onUnhandledNotification: unhandledNotificationEmitter.event,\r\n        onDispose: disposeEmitter.event,\r\n        dispose: () => {\r\n            if (isDisposed()) {\r\n                return;\r\n            }\r\n            state = ConnectionState.Disposed;\r\n            disposeEmitter.fire(undefined);\r\n            let error = new Error('Connection got disposed.');\r\n            Object.keys(responsePromises).forEach((key) => {\r\n                responsePromises[key].reject(error);\r\n            });\r\n            responsePromises = Object.create(null);\r\n            requestTokens = Object.create(null);\r\n            messageQueue = new linkedMap_1.LinkedMap();\r\n            // Test for backwards compatibility\r\n            if (Is.func(messageWriter.dispose)) {\r\n                messageWriter.dispose();\r\n            }\r\n            if (Is.func(messageReader.dispose)) {\r\n                messageReader.dispose();\r\n            }\r\n        },\r\n        listen: () => {\r\n            throwIfClosedOrDisposed();\r\n            throwIfListening();\r\n            state = ConnectionState.Listening;\r\n            messageReader.listen(callback);\r\n        },\r\n        inspect: () => {\r\n            // eslint-disable-next-line no-console\r\n            console.log('inspect');\r\n        }\r\n    };\r\n    connection.onNotification(LogTraceNotification.type, (params) => {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);\r\n    });\r\n    connection.onNotification(ProgressNotification.type, (params) => {\r\n        const handler = progressHandlers.get(params.token);\r\n        if (handler) {\r\n            handler(params.value);\r\n        }\r\n        else {\r\n            unhandledProgressEmitter.fire(params);\r\n        }\r\n    });\r\n    return connection;\r\n}\r\nfunction isMessageReader(value) {\r\n    return value.listen !== void 0 && value.read === void 0;\r\n}\r\nfunction isMessageWriter(value) {\r\n    return value.write !== void 0 && value.end === void 0;\r\n}\r\nfunction createMessageConnection(input, output, logger, strategy) {\r\n    if (!logger) {\r\n        logger = exports.NullLogger;\r\n    }\r\n    let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);\r\n    let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);\r\n    return _createMessageConnection(reader, writer, logger, strategy);\r\n}\r\nexports.createMessageConnection = createMessageConnection;\r\n", "(function (factory) {\r\n    if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n        var v = factory(require, exports);\r\n        if (v !== undefined) module.exports = v;\r\n    }\r\n    else if (typeof define === \"function\" && define.amd) {\r\n        define([\"require\", \"exports\"], factory);\r\n    }\r\n})(function (require, exports) {\r\n    /* --------------------------------------------------------------------------------------------\r\n     * Copyright (c) Microsoft Corporation. All rights reserved.\r\n     * Licensed under the MIT License. See License.txt in the project root for license information.\r\n     * ------------------------------------------------------------------------------------------ */\r\n    'use strict';\r\n    Object.defineProperty(exports, \"__esModule\", { value: true });\r\n    /**\r\n     * The Position namespace provides helper functions to work with\r\n     * [Position](#Position) literals.\r\n     */\r\n    var Position;\r\n    (function (Position) {\r\n        /**\r\n         * Creates a new Position literal from the given line and character.\r\n         * @param line The position's line.\r\n         * @param character The position's character.\r\n         */\r\n        function create(line, character) {\r\n            return { line: line, character: character };\r\n        }\r\n        Position.create = create;\r\n        /**\r\n         * Checks whether the given liternal conforms to the [Position](#Position) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);\r\n        }\r\n        Position.is = is;\r\n    })(Position = exports.Position || (exports.Position = {}));\r\n    /**\r\n     * The Range namespace provides helper functions to work with\r\n     * [Range](#Range) literals.\r\n     */\r\n    var Range;\r\n    (function (Range) {\r\n        function create(one, two, three, four) {\r\n            if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {\r\n                return { start: Position.create(one, two), end: Position.create(three, four) };\r\n            }\r\n            else if (Position.is(one) && Position.is(two)) {\r\n                return { start: one, end: two };\r\n            }\r\n            else {\r\n                throw new Error(\"Range#create called with invalid arguments[\" + one + \", \" + two + \", \" + three + \", \" + four + \"]\");\r\n            }\r\n        }\r\n        Range.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Range](#Range) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\r\n        }\r\n        Range.is = is;\r\n    })(Range = exports.Range || (exports.Range = {}));\r\n    /**\r\n     * The Location namespace provides helper functions to work with\r\n     * [Location](#Location) literals.\r\n     */\r\n    var Location;\r\n    (function (Location) {\r\n        /**\r\n         * Creates a Location literal.\r\n         * @param uri The location's uri.\r\n         * @param range The location's range.\r\n         */\r\n        function create(uri, range) {\r\n            return { uri: uri, range: range };\r\n        }\r\n        Location.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Location](#Location) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\r\n        }\r\n        Location.is = is;\r\n    })(Location = exports.Location || (exports.Location = {}));\r\n    /**\r\n     * The LocationLink namespace provides helper functions to work with\r\n     * [LocationLink](#LocationLink) literals.\r\n     */\r\n    var LocationLink;\r\n    (function (LocationLink) {\r\n        /**\r\n         * Creates a LocationLink literal.\r\n         * @param targetUri The definition's uri.\r\n         * @param targetRange The full range of the definition.\r\n         * @param targetSelectionRange The span of the symbol definition at the target.\r\n         * @param originSelectionRange The span of the symbol being defined in the originating source file.\r\n         */\r\n        function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\r\n            return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };\r\n        }\r\n        LocationLink.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\r\n                && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))\r\n                && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\r\n        }\r\n        LocationLink.is = is;\r\n    })(LocationLink = exports.LocationLink || (exports.LocationLink = {}));\r\n    /**\r\n     * The Color namespace provides helper functions to work with\r\n     * [Color](#Color) literals.\r\n     */\r\n    var Color;\r\n    (function (Color) {\r\n        /**\r\n         * Creates a new Color literal.\r\n         */\r\n        function create(red, green, blue, alpha) {\r\n            return {\r\n                red: red,\r\n                green: green,\r\n                blue: blue,\r\n                alpha: alpha,\r\n            };\r\n        }\r\n        Color.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Color](#Color) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.number(candidate.red)\r\n                && Is.number(candidate.green)\r\n                && Is.number(candidate.blue)\r\n                && Is.number(candidate.alpha);\r\n        }\r\n        Color.is = is;\r\n    })(Color = exports.Color || (exports.Color = {}));\r\n    /**\r\n     * The ColorInformation namespace provides helper functions to work with\r\n     * [ColorInformation](#ColorInformation) literals.\r\n     */\r\n    var ColorInformation;\r\n    (function (ColorInformation) {\r\n        /**\r\n         * Creates a new ColorInformation literal.\r\n         */\r\n        function create(range, color) {\r\n            return {\r\n                range: range,\r\n                color: color,\r\n            };\r\n        }\r\n        ColorInformation.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Range.is(candidate.range) && Color.is(candidate.color);\r\n        }\r\n        ColorInformation.is = is;\r\n    })(ColorInformation = exports.ColorInformation || (exports.ColorInformation = {}));\r\n    /**\r\n     * The Color namespace provides helper functions to work with\r\n     * [ColorPresentation](#ColorPresentation) literals.\r\n     */\r\n    var ColorPresentation;\r\n    (function (ColorPresentation) {\r\n        /**\r\n         * Creates a new ColorInformation literal.\r\n         */\r\n        function create(label, textEdit, additionalTextEdits) {\r\n            return {\r\n                label: label,\r\n                textEdit: textEdit,\r\n                additionalTextEdits: additionalTextEdits,\r\n            };\r\n        }\r\n        ColorPresentation.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.string(candidate.label)\r\n                && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\r\n                && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\r\n        }\r\n        ColorPresentation.is = is;\r\n    })(ColorPresentation = exports.ColorPresentation || (exports.ColorPresentation = {}));\r\n    /**\r\n     * Enum of known range kinds\r\n     */\r\n    var FoldingRangeKind;\r\n    (function (FoldingRangeKind) {\r\n        /**\r\n         * Folding range for a comment\r\n         */\r\n        FoldingRangeKind[\"Comment\"] = \"comment\";\r\n        /**\r\n         * Folding range for a imports or includes\r\n         */\r\n        FoldingRangeKind[\"Imports\"] = \"imports\";\r\n        /**\r\n         * Folding range for a region (e.g. `#region`)\r\n         */\r\n        FoldingRangeKind[\"Region\"] = \"region\";\r\n    })(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));\r\n    /**\r\n     * The folding range namespace provides helper functions to work with\r\n     * [FoldingRange](#FoldingRange) literals.\r\n     */\r\n    var FoldingRange;\r\n    (function (FoldingRange) {\r\n        /**\r\n         * Creates a new FoldingRange literal.\r\n         */\r\n        function create(startLine, endLine, startCharacter, endCharacter, kind) {\r\n            var result = {\r\n                startLine: startLine,\r\n                endLine: endLine\r\n            };\r\n            if (Is.defined(startCharacter)) {\r\n                result.startCharacter = startCharacter;\r\n            }\r\n            if (Is.defined(endCharacter)) {\r\n                result.endCharacter = endCharacter;\r\n            }\r\n            if (Is.defined(kind)) {\r\n                result.kind = kind;\r\n            }\r\n            return result;\r\n        }\r\n        FoldingRange.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.number(candidate.startLine) && Is.number(candidate.startLine)\r\n                && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))\r\n                && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))\r\n                && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\r\n        }\r\n        FoldingRange.is = is;\r\n    })(FoldingRange = exports.FoldingRange || (exports.FoldingRange = {}));\r\n    /**\r\n     * The DiagnosticRelatedInformation namespace provides helper functions to work with\r\n     * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.\r\n     */\r\n    var DiagnosticRelatedInformation;\r\n    (function (DiagnosticRelatedInformation) {\r\n        /**\r\n         * Creates a new DiagnosticRelatedInformation literal.\r\n         */\r\n        function create(location, message) {\r\n            return {\r\n                location: location,\r\n                message: message\r\n            };\r\n        }\r\n        DiagnosticRelatedInformation.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\r\n        }\r\n        DiagnosticRelatedInformation.is = is;\r\n    })(DiagnosticRelatedInformation = exports.DiagnosticRelatedInformation || (exports.DiagnosticRelatedInformation = {}));\r\n    /**\r\n     * The diagnostic's severity.\r\n     */\r\n    var DiagnosticSeverity;\r\n    (function (DiagnosticSeverity) {\r\n        /**\r\n         * Reports an error.\r\n         */\r\n        DiagnosticSeverity.Error = 1;\r\n        /**\r\n         * Reports a warning.\r\n         */\r\n        DiagnosticSeverity.Warning = 2;\r\n        /**\r\n         * Reports an information.\r\n         */\r\n        DiagnosticSeverity.Information = 3;\r\n        /**\r\n         * Reports a hint.\r\n         */\r\n        DiagnosticSeverity.Hint = 4;\r\n    })(DiagnosticSeverity = exports.DiagnosticSeverity || (exports.DiagnosticSeverity = {}));\r\n    /**\r\n     * The diagnostic tags.\r\n     *\r\n     * @since 3.15.0\r\n     */\r\n    var DiagnosticTag;\r\n    (function (DiagnosticTag) {\r\n        /**\r\n         * Unused or unnecessary code.\r\n         *\r\n         * Clients are allowed to render diagnostics with this tag faded out instead of having\r\n         * an error squiggle.\r\n         */\r\n        DiagnosticTag.Unnecessary = 1;\r\n        /**\r\n         * Deprecated or obsolete code.\r\n         *\r\n         * Clients are allowed to rendered diagnostics with this tag strike through.\r\n         */\r\n        DiagnosticTag.Deprecated = 2;\r\n    })(DiagnosticTag = exports.DiagnosticTag || (exports.DiagnosticTag = {}));\r\n    /**\r\n     * The Diagnostic namespace provides helper functions to work with\r\n     * [Diagnostic](#Diagnostic) literals.\r\n     */\r\n    var Diagnostic;\r\n    (function (Diagnostic) {\r\n        /**\r\n         * Creates a new Diagnostic literal.\r\n         */\r\n        function create(range, message, severity, code, source, relatedInformation) {\r\n            var result = { range: range, message: message };\r\n            if (Is.defined(severity)) {\r\n                result.severity = severity;\r\n            }\r\n            if (Is.defined(code)) {\r\n                result.code = code;\r\n            }\r\n            if (Is.defined(source)) {\r\n                result.source = source;\r\n            }\r\n            if (Is.defined(relatedInformation)) {\r\n                result.relatedInformation = relatedInformation;\r\n            }\r\n            return result;\r\n        }\r\n        Diagnostic.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate)\r\n                && Range.is(candidate.range)\r\n                && Is.string(candidate.message)\r\n                && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\r\n                && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\r\n                && (Is.string(candidate.source) || Is.undefined(candidate.source))\r\n                && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\r\n        }\r\n        Diagnostic.is = is;\r\n    })(Diagnostic = exports.Diagnostic || (exports.Diagnostic = {}));\r\n    /**\r\n     * The Command namespace provides helper functions to work with\r\n     * [Command](#Command) literals.\r\n     */\r\n    var Command;\r\n    (function (Command) {\r\n        /**\r\n         * Creates a new Command literal.\r\n         */\r\n        function create(title, command) {\r\n            var args = [];\r\n            for (var _i = 2; _i < arguments.length; _i++) {\r\n                args[_i - 2] = arguments[_i];\r\n            }\r\n            var result = { title: title, command: command };\r\n            if (Is.defined(args) && args.length > 0) {\r\n                result.arguments = args;\r\n            }\r\n            return result;\r\n        }\r\n        Command.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Command](#Command) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\r\n        }\r\n        Command.is = is;\r\n    })(Command = exports.Command || (exports.Command = {}));\r\n    /**\r\n     * The TextEdit namespace provides helper function to create replace,\r\n     * insert and delete edits more easily.\r\n     */\r\n    var TextEdit;\r\n    (function (TextEdit) {\r\n        /**\r\n         * Creates a replace text edit.\r\n         * @param range The range of text to be replaced.\r\n         * @param newText The new text.\r\n         */\r\n        function replace(range, newText) {\r\n            return { range: range, newText: newText };\r\n        }\r\n        TextEdit.replace = replace;\r\n        /**\r\n         * Creates a insert text edit.\r\n         * @param position The position to insert the text at.\r\n         * @param newText The text to be inserted.\r\n         */\r\n        function insert(position, newText) {\r\n            return { range: { start: position, end: position }, newText: newText };\r\n        }\r\n        TextEdit.insert = insert;\r\n        /**\r\n         * Creates a delete text edit.\r\n         * @param range The range of text to be deleted.\r\n         */\r\n        function del(range) {\r\n            return { range: range, newText: '' };\r\n        }\r\n        TextEdit.del = del;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(candidate)\r\n                && Is.string(candidate.newText)\r\n                && Range.is(candidate.range);\r\n        }\r\n        TextEdit.is = is;\r\n    })(TextEdit = exports.TextEdit || (exports.TextEdit = {}));\r\n    /**\r\n     * The TextDocumentEdit namespace provides helper function to create\r\n     * an edit that manipulates a text document.\r\n     */\r\n    var TextDocumentEdit;\r\n    (function (TextDocumentEdit) {\r\n        /**\r\n         * Creates a new `TextDocumentEdit`\r\n         */\r\n        function create(textDocument, edits) {\r\n            return { textDocument: textDocument, edits: edits };\r\n        }\r\n        TextDocumentEdit.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate)\r\n                && VersionedTextDocumentIdentifier.is(candidate.textDocument)\r\n                && Array.isArray(candidate.edits);\r\n        }\r\n        TextDocumentEdit.is = is;\r\n    })(TextDocumentEdit = exports.TextDocumentEdit || (exports.TextDocumentEdit = {}));\r\n    var CreateFile;\r\n    (function (CreateFile) {\r\n        function create(uri, options) {\r\n            var result = {\r\n                kind: 'create',\r\n                uri: uri\r\n            };\r\n            if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\r\n                result.options = options;\r\n            }\r\n            return result;\r\n        }\r\n        CreateFile.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&\r\n                (candidate.options === void 0 ||\r\n                    ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));\r\n        }\r\n        CreateFile.is = is;\r\n    })(CreateFile = exports.CreateFile || (exports.CreateFile = {}));\r\n    var RenameFile;\r\n    (function (RenameFile) {\r\n        function create(oldUri, newUri, options) {\r\n            var result = {\r\n                kind: 'rename',\r\n                oldUri: oldUri,\r\n                newUri: newUri\r\n            };\r\n            if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\r\n                result.options = options;\r\n            }\r\n            return result;\r\n        }\r\n        RenameFile.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&\r\n                (candidate.options === void 0 ||\r\n                    ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));\r\n        }\r\n        RenameFile.is = is;\r\n    })(RenameFile = exports.RenameFile || (exports.RenameFile = {}));\r\n    var DeleteFile;\r\n    (function (DeleteFile) {\r\n        function create(uri, options) {\r\n            var result = {\r\n                kind: 'delete',\r\n                uri: uri\r\n            };\r\n            if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {\r\n                result.options = options;\r\n            }\r\n            return result;\r\n        }\r\n        DeleteFile.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&\r\n                (candidate.options === void 0 ||\r\n                    ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));\r\n        }\r\n        DeleteFile.is = is;\r\n    })(DeleteFile = exports.DeleteFile || (exports.DeleteFile = {}));\r\n    var WorkspaceEdit;\r\n    (function (WorkspaceEdit) {\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate &&\r\n                (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&\r\n                (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {\r\n                    if (Is.string(change.kind)) {\r\n                        return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\r\n                    }\r\n                    else {\r\n                        return TextDocumentEdit.is(change);\r\n                    }\r\n                }));\r\n        }\r\n        WorkspaceEdit.is = is;\r\n    })(WorkspaceEdit = exports.WorkspaceEdit || (exports.WorkspaceEdit = {}));\r\n    var TextEditChangeImpl = /** @class */ (function () {\r\n        function TextEditChangeImpl(edits) {\r\n            this.edits = edits;\r\n        }\r\n        TextEditChangeImpl.prototype.insert = function (position, newText) {\r\n            this.edits.push(TextEdit.insert(position, newText));\r\n        };\r\n        TextEditChangeImpl.prototype.replace = function (range, newText) {\r\n            this.edits.push(TextEdit.replace(range, newText));\r\n        };\r\n        TextEditChangeImpl.prototype.delete = function (range) {\r\n            this.edits.push(TextEdit.del(range));\r\n        };\r\n        TextEditChangeImpl.prototype.add = function (edit) {\r\n            this.edits.push(edit);\r\n        };\r\n        TextEditChangeImpl.prototype.all = function () {\r\n            return this.edits;\r\n        };\r\n        TextEditChangeImpl.prototype.clear = function () {\r\n            this.edits.splice(0, this.edits.length);\r\n        };\r\n        return TextEditChangeImpl;\r\n    }());\r\n    /**\r\n     * A workspace change helps constructing changes to a workspace.\r\n     */\r\n    var WorkspaceChange = /** @class */ (function () {\r\n        function WorkspaceChange(workspaceEdit) {\r\n            var _this = this;\r\n            this._textEditChanges = Object.create(null);\r\n            if (workspaceEdit) {\r\n                this._workspaceEdit = workspaceEdit;\r\n                if (workspaceEdit.documentChanges) {\r\n                    workspaceEdit.documentChanges.forEach(function (change) {\r\n                        if (TextDocumentEdit.is(change)) {\r\n                            var textEditChange = new TextEditChangeImpl(change.edits);\r\n                            _this._textEditChanges[change.textDocument.uri] = textEditChange;\r\n                        }\r\n                    });\r\n                }\r\n                else if (workspaceEdit.changes) {\r\n                    Object.keys(workspaceEdit.changes).forEach(function (key) {\r\n                        var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\r\n                        _this._textEditChanges[key] = textEditChange;\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        Object.defineProperty(WorkspaceChange.prototype, \"edit\", {\r\n            /**\r\n             * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal\r\n             * use to be returned from a workspace edit operation like rename.\r\n             */\r\n            get: function () {\r\n                return this._workspaceEdit;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        WorkspaceChange.prototype.getTextEditChange = function (key) {\r\n            if (VersionedTextDocumentIdentifier.is(key)) {\r\n                if (!this._workspaceEdit) {\r\n                    this._workspaceEdit = {\r\n                        documentChanges: []\r\n                    };\r\n                }\r\n                if (!this._workspaceEdit.documentChanges) {\r\n                    throw new Error('Workspace edit is not configured for document changes.');\r\n                }\r\n                var textDocument = key;\r\n                var result = this._textEditChanges[textDocument.uri];\r\n                if (!result) {\r\n                    var edits = [];\r\n                    var textDocumentEdit = {\r\n                        textDocument: textDocument,\r\n                        edits: edits\r\n                    };\r\n                    this._workspaceEdit.documentChanges.push(textDocumentEdit);\r\n                    result = new TextEditChangeImpl(edits);\r\n                    this._textEditChanges[textDocument.uri] = result;\r\n                }\r\n                return result;\r\n            }\r\n            else {\r\n                if (!this._workspaceEdit) {\r\n                    this._workspaceEdit = {\r\n                        changes: Object.create(null)\r\n                    };\r\n                }\r\n                if (!this._workspaceEdit.changes) {\r\n                    throw new Error('Workspace edit is not configured for normal text edit changes.');\r\n                }\r\n                var result = this._textEditChanges[key];\r\n                if (!result) {\r\n                    var edits = [];\r\n                    this._workspaceEdit.changes[key] = edits;\r\n                    result = new TextEditChangeImpl(edits);\r\n                    this._textEditChanges[key] = result;\r\n                }\r\n                return result;\r\n            }\r\n        };\r\n        WorkspaceChange.prototype.createFile = function (uri, options) {\r\n            this.checkDocumentChanges();\r\n            this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));\r\n        };\r\n        WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {\r\n            this.checkDocumentChanges();\r\n            this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));\r\n        };\r\n        WorkspaceChange.prototype.deleteFile = function (uri, options) {\r\n            this.checkDocumentChanges();\r\n            this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));\r\n        };\r\n        WorkspaceChange.prototype.checkDocumentChanges = function () {\r\n            if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {\r\n                throw new Error('Workspace edit is not configured for document changes.');\r\n            }\r\n        };\r\n        return WorkspaceChange;\r\n    }());\r\n    exports.WorkspaceChange = WorkspaceChange;\r\n    /**\r\n     * The TextDocumentIdentifier namespace provides helper functions to work with\r\n     * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.\r\n     */\r\n    var TextDocumentIdentifier;\r\n    (function (TextDocumentIdentifier) {\r\n        /**\r\n         * Creates a new TextDocumentIdentifier literal.\r\n         * @param uri The document's uri.\r\n         */\r\n        function create(uri) {\r\n            return { uri: uri };\r\n        }\r\n        TextDocumentIdentifier.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri);\r\n        }\r\n        TextDocumentIdentifier.is = is;\r\n    })(TextDocumentIdentifier = exports.TextDocumentIdentifier || (exports.TextDocumentIdentifier = {}));\r\n    /**\r\n     * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\r\n     * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.\r\n     */\r\n    var VersionedTextDocumentIdentifier;\r\n    (function (VersionedTextDocumentIdentifier) {\r\n        /**\r\n         * Creates a new VersionedTextDocumentIdentifier literal.\r\n         * @param uri The document's uri.\r\n         * @param uri The document's text.\r\n         */\r\n        function create(uri, version) {\r\n            return { uri: uri, version: version };\r\n        }\r\n        VersionedTextDocumentIdentifier.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));\r\n        }\r\n        VersionedTextDocumentIdentifier.is = is;\r\n    })(VersionedTextDocumentIdentifier = exports.VersionedTextDocumentIdentifier || (exports.VersionedTextDocumentIdentifier = {}));\r\n    /**\r\n     * The TextDocumentItem namespace provides helper functions to work with\r\n     * [TextDocumentItem](#TextDocumentItem) literals.\r\n     */\r\n    var TextDocumentItem;\r\n    (function (TextDocumentItem) {\r\n        /**\r\n         * Creates a new TextDocumentItem literal.\r\n         * @param uri The document's uri.\r\n         * @param languageId The document's language identifier.\r\n         * @param version The document's version number.\r\n         * @param text The document's text.\r\n         */\r\n        function create(uri, languageId, version, text) {\r\n            return { uri: uri, languageId: languageId, version: version, text: text };\r\n        }\r\n        TextDocumentItem.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);\r\n        }\r\n        TextDocumentItem.is = is;\r\n    })(TextDocumentItem = exports.TextDocumentItem || (exports.TextDocumentItem = {}));\r\n    /**\r\n     * Describes the content type that a client supports in various\r\n     * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\r\n     *\r\n     * Please note that `MarkupKinds` must not start with a `$`. This kinds\r\n     * are reserved for internal usage.\r\n     */\r\n    var MarkupKind;\r\n    (function (MarkupKind) {\r\n        /**\r\n         * Plain text is supported as a content format\r\n         */\r\n        MarkupKind.PlainText = 'plaintext';\r\n        /**\r\n         * Markdown is supported as a content format\r\n         */\r\n        MarkupKind.Markdown = 'markdown';\r\n    })(MarkupKind = exports.MarkupKind || (exports.MarkupKind = {}));\r\n    (function (MarkupKind) {\r\n        /**\r\n         * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\r\n        }\r\n        MarkupKind.is = is;\r\n    })(MarkupKind = exports.MarkupKind || (exports.MarkupKind = {}));\r\n    var MarkupContent;\r\n    (function (MarkupContent) {\r\n        /**\r\n         * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\r\n        }\r\n        MarkupContent.is = is;\r\n    })(MarkupContent = exports.MarkupContent || (exports.MarkupContent = {}));\r\n    /**\r\n     * The kind of a completion entry.\r\n     */\r\n    var CompletionItemKind;\r\n    (function (CompletionItemKind) {\r\n        CompletionItemKind.Text = 1;\r\n        CompletionItemKind.Method = 2;\r\n        CompletionItemKind.Function = 3;\r\n        CompletionItemKind.Constructor = 4;\r\n        CompletionItemKind.Field = 5;\r\n        CompletionItemKind.Variable = 6;\r\n        CompletionItemKind.Class = 7;\r\n        CompletionItemKind.Interface = 8;\r\n        CompletionItemKind.Module = 9;\r\n        CompletionItemKind.Property = 10;\r\n        CompletionItemKind.Unit = 11;\r\n        CompletionItemKind.Value = 12;\r\n        CompletionItemKind.Enum = 13;\r\n        CompletionItemKind.Keyword = 14;\r\n        CompletionItemKind.Snippet = 15;\r\n        CompletionItemKind.Color = 16;\r\n        CompletionItemKind.File = 17;\r\n        CompletionItemKind.Reference = 18;\r\n        CompletionItemKind.Folder = 19;\r\n        CompletionItemKind.EnumMember = 20;\r\n        CompletionItemKind.Constant = 21;\r\n        CompletionItemKind.Struct = 22;\r\n        CompletionItemKind.Event = 23;\r\n        CompletionItemKind.Operator = 24;\r\n        CompletionItemKind.TypeParameter = 25;\r\n    })(CompletionItemKind = exports.CompletionItemKind || (exports.CompletionItemKind = {}));\r\n    /**\r\n     * Defines whether the insert text in a completion item should be interpreted as\r\n     * plain text or a snippet.\r\n     */\r\n    var InsertTextFormat;\r\n    (function (InsertTextFormat) {\r\n        /**\r\n         * The primary text to be inserted is treated as a plain string.\r\n         */\r\n        InsertTextFormat.PlainText = 1;\r\n        /**\r\n         * The primary text to be inserted is treated as a snippet.\r\n         *\r\n         * A snippet can define tab stops and placeholders with `$1`, `$2`\r\n         * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\r\n         * the end of the snippet. Placeholders with equal identifiers are linked,\r\n         * that is typing in one will update others too.\r\n         *\r\n         * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md\r\n         */\r\n        InsertTextFormat.Snippet = 2;\r\n    })(InsertTextFormat = exports.InsertTextFormat || (exports.InsertTextFormat = {}));\r\n    /**\r\n     * Completion item tags are extra annotations that tweak the rendering of a completion\r\n     * item.\r\n     *\r\n     * @since 3.15.0\r\n     */\r\n    var CompletionItemTag;\r\n    (function (CompletionItemTag) {\r\n        /**\r\n         * Render a completion as obsolete, usually using a strike-out.\r\n         */\r\n        CompletionItemTag.Deprecated = 1;\r\n    })(CompletionItemTag = exports.CompletionItemTag || (exports.CompletionItemTag = {}));\r\n    /**\r\n     * The CompletionItem namespace provides functions to deal with\r\n     * completion items.\r\n     */\r\n    var CompletionItem;\r\n    (function (CompletionItem) {\r\n        /**\r\n         * Create a completion item and seed it with a label.\r\n         * @param label The completion item's label\r\n         */\r\n        function create(label) {\r\n            return { label: label };\r\n        }\r\n        CompletionItem.create = create;\r\n    })(CompletionItem = exports.CompletionItem || (exports.CompletionItem = {}));\r\n    /**\r\n     * The CompletionList namespace provides functions to deal with\r\n     * completion lists.\r\n     */\r\n    var CompletionList;\r\n    (function (CompletionList) {\r\n        /**\r\n         * Creates a new completion list.\r\n         *\r\n         * @param items The completion items.\r\n         * @param isIncomplete The list is not complete.\r\n         */\r\n        function create(items, isIncomplete) {\r\n            return { items: items ? items : [], isIncomplete: !!isIncomplete };\r\n        }\r\n        CompletionList.create = create;\r\n    })(CompletionList = exports.CompletionList || (exports.CompletionList = {}));\r\n    var MarkedString;\r\n    (function (MarkedString) {\r\n        /**\r\n         * Creates a marked string from plain text.\r\n         *\r\n         * @param plainText The plain text.\r\n         */\r\n        function fromPlainText(plainText) {\r\n            return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\r\n        }\r\n        MarkedString.fromPlainText = fromPlainText;\r\n        /**\r\n         * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\r\n        }\r\n        MarkedString.is = is;\r\n    })(MarkedString = exports.MarkedString || (exports.MarkedString = {}));\r\n    var Hover;\r\n    (function (Hover) {\r\n        /**\r\n         * Checks whether the given value conforms to the [Hover](#Hover) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\r\n                MarkedString.is(candidate.contents) ||\r\n                Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));\r\n        }\r\n        Hover.is = is;\r\n    })(Hover = exports.Hover || (exports.Hover = {}));\r\n    /**\r\n     * The ParameterInformation namespace provides helper functions to work with\r\n     * [ParameterInformation](#ParameterInformation) literals.\r\n     */\r\n    var ParameterInformation;\r\n    (function (ParameterInformation) {\r\n        /**\r\n         * Creates a new parameter information literal.\r\n         *\r\n         * @param label A label string.\r\n         * @param documentation A doc string.\r\n         */\r\n        function create(label, documentation) {\r\n            return documentation ? { label: label, documentation: documentation } : { label: label };\r\n        }\r\n        ParameterInformation.create = create;\r\n    })(ParameterInformation = exports.ParameterInformation || (exports.ParameterInformation = {}));\r\n    /**\r\n     * The SignatureInformation namespace provides helper functions to work with\r\n     * [SignatureInformation](#SignatureInformation) literals.\r\n     */\r\n    var SignatureInformation;\r\n    (function (SignatureInformation) {\r\n        function create(label, documentation) {\r\n            var parameters = [];\r\n            for (var _i = 2; _i < arguments.length; _i++) {\r\n                parameters[_i - 2] = arguments[_i];\r\n            }\r\n            var result = { label: label };\r\n            if (Is.defined(documentation)) {\r\n                result.documentation = documentation;\r\n            }\r\n            if (Is.defined(parameters)) {\r\n                result.parameters = parameters;\r\n            }\r\n            else {\r\n                result.parameters = [];\r\n            }\r\n            return result;\r\n        }\r\n        SignatureInformation.create = create;\r\n    })(SignatureInformation = exports.SignatureInformation || (exports.SignatureInformation = {}));\r\n    /**\r\n     * A document highlight kind.\r\n     */\r\n    var DocumentHighlightKind;\r\n    (function (DocumentHighlightKind) {\r\n        /**\r\n         * A textual occurrence.\r\n         */\r\n        DocumentHighlightKind.Text = 1;\r\n        /**\r\n         * Read-access of a symbol, like reading a variable.\r\n         */\r\n        DocumentHighlightKind.Read = 2;\r\n        /**\r\n         * Write-access of a symbol, like writing to a variable.\r\n         */\r\n        DocumentHighlightKind.Write = 3;\r\n    })(DocumentHighlightKind = exports.DocumentHighlightKind || (exports.DocumentHighlightKind = {}));\r\n    /**\r\n     * DocumentHighlight namespace to provide helper functions to work with\r\n     * [DocumentHighlight](#DocumentHighlight) literals.\r\n     */\r\n    var DocumentHighlight;\r\n    (function (DocumentHighlight) {\r\n        /**\r\n         * Create a DocumentHighlight object.\r\n         * @param range The range the highlight applies to.\r\n         */\r\n        function create(range, kind) {\r\n            var result = { range: range };\r\n            if (Is.number(kind)) {\r\n                result.kind = kind;\r\n            }\r\n            return result;\r\n        }\r\n        DocumentHighlight.create = create;\r\n    })(DocumentHighlight = exports.DocumentHighlight || (exports.DocumentHighlight = {}));\r\n    /**\r\n     * A symbol kind.\r\n     */\r\n    var SymbolKind;\r\n    (function (SymbolKind) {\r\n        SymbolKind.File = 1;\r\n        SymbolKind.Module = 2;\r\n        SymbolKind.Namespace = 3;\r\n        SymbolKind.Package = 4;\r\n        SymbolKind.Class = 5;\r\n        SymbolKind.Method = 6;\r\n        SymbolKind.Property = 7;\r\n        SymbolKind.Field = 8;\r\n        SymbolKind.Constructor = 9;\r\n        SymbolKind.Enum = 10;\r\n        SymbolKind.Interface = 11;\r\n        SymbolKind.Function = 12;\r\n        SymbolKind.Variable = 13;\r\n        SymbolKind.Constant = 14;\r\n        SymbolKind.String = 15;\r\n        SymbolKind.Number = 16;\r\n        SymbolKind.Boolean = 17;\r\n        SymbolKind.Array = 18;\r\n        SymbolKind.Object = 19;\r\n        SymbolKind.Key = 20;\r\n        SymbolKind.Null = 21;\r\n        SymbolKind.EnumMember = 22;\r\n        SymbolKind.Struct = 23;\r\n        SymbolKind.Event = 24;\r\n        SymbolKind.Operator = 25;\r\n        SymbolKind.TypeParameter = 26;\r\n    })(SymbolKind = exports.SymbolKind || (exports.SymbolKind = {}));\r\n    /**\r\n     * Symbol tags are extra annotations that tweak the rendering of a symbol.\r\n     * @since 3.15\r\n     */\r\n    var SymbolTag;\r\n    (function (SymbolTag) {\r\n        /**\r\n         * Render a symbol as obsolete, usually using a strike-out.\r\n         */\r\n        SymbolTag.Deprecated = 1;\r\n    })(SymbolTag = exports.SymbolTag || (exports.SymbolTag = {}));\r\n    var SymbolInformation;\r\n    (function (SymbolInformation) {\r\n        /**\r\n         * Creates a new symbol information literal.\r\n         *\r\n         * @param name The name of the symbol.\r\n         * @param kind The kind of the symbol.\r\n         * @param range The range of the location of the symbol.\r\n         * @param uri The resource of the location of symbol, defaults to the current document.\r\n         * @param containerName The name of the symbol containing the symbol.\r\n         */\r\n        function create(name, kind, range, uri, containerName) {\r\n            var result = {\r\n                name: name,\r\n                kind: kind,\r\n                location: { uri: uri, range: range }\r\n            };\r\n            if (containerName) {\r\n                result.containerName = containerName;\r\n            }\r\n            return result;\r\n        }\r\n        SymbolInformation.create = create;\r\n    })(SymbolInformation = exports.SymbolInformation || (exports.SymbolInformation = {}));\r\n    var DocumentSymbol;\r\n    (function (DocumentSymbol) {\r\n        /**\r\n         * Creates a new symbol information literal.\r\n         *\r\n         * @param name The name of the symbol.\r\n         * @param detail The detail of the symbol.\r\n         * @param kind The kind of the symbol.\r\n         * @param range The range of the symbol.\r\n         * @param selectionRange The selectionRange of the symbol.\r\n         * @param children Children of the symbol.\r\n         */\r\n        function create(name, detail, kind, range, selectionRange, children) {\r\n            var result = {\r\n                name: name,\r\n                detail: detail,\r\n                kind: kind,\r\n                range: range,\r\n                selectionRange: selectionRange\r\n            };\r\n            if (children !== void 0) {\r\n                result.children = children;\r\n            }\r\n            return result;\r\n        }\r\n        DocumentSymbol.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate &&\r\n                Is.string(candidate.name) && Is.number(candidate.kind) &&\r\n                Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\r\n                (candidate.detail === void 0 || Is.string(candidate.detail)) &&\r\n                (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&\r\n                (candidate.children === void 0 || Array.isArray(candidate.children));\r\n        }\r\n        DocumentSymbol.is = is;\r\n    })(DocumentSymbol = exports.DocumentSymbol || (exports.DocumentSymbol = {}));\r\n    /**\r\n     * A set of predefined code action kinds\r\n     */\r\n    var CodeActionKind;\r\n    (function (CodeActionKind) {\r\n        /**\r\n         * Empty kind.\r\n         */\r\n        CodeActionKind.Empty = '';\r\n        /**\r\n         * Base kind for quickfix actions: 'quickfix'\r\n         */\r\n        CodeActionKind.QuickFix = 'quickfix';\r\n        /**\r\n         * Base kind for refactoring actions: 'refactor'\r\n         */\r\n        CodeActionKind.Refactor = 'refactor';\r\n        /**\r\n         * Base kind for refactoring extraction actions: 'refactor.extract'\r\n         *\r\n         * Example extract actions:\r\n         *\r\n         * - Extract method\r\n         * - Extract function\r\n         * - Extract variable\r\n         * - Extract interface from class\r\n         * - ...\r\n         */\r\n        CodeActionKind.RefactorExtract = 'refactor.extract';\r\n        /**\r\n         * Base kind for refactoring inline actions: 'refactor.inline'\r\n         *\r\n         * Example inline actions:\r\n         *\r\n         * - Inline function\r\n         * - Inline variable\r\n         * - Inline constant\r\n         * - ...\r\n         */\r\n        CodeActionKind.RefactorInline = 'refactor.inline';\r\n        /**\r\n         * Base kind for refactoring rewrite actions: 'refactor.rewrite'\r\n         *\r\n         * Example rewrite actions:\r\n         *\r\n         * - Convert JavaScript function to class\r\n         * - Add or remove parameter\r\n         * - Encapsulate field\r\n         * - Make method static\r\n         * - Move method to base class\r\n         * - ...\r\n         */\r\n        CodeActionKind.RefactorRewrite = 'refactor.rewrite';\r\n        /**\r\n         * Base kind for source actions: `source`\r\n         *\r\n         * Source code actions apply to the entire file.\r\n         */\r\n        CodeActionKind.Source = 'source';\r\n        /**\r\n         * Base kind for an organize imports source action: `source.organizeImports`\r\n         */\r\n        CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\r\n        /**\r\n         * Base kind for auto-fix source actions: `source.fixAll`.\r\n         *\r\n         * Fix all actions automatically fix errors that have a clear fix that do not require user input.\r\n         * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\r\n         *\r\n         * @since 3.15.0\r\n         */\r\n        CodeActionKind.SourceFixAll = 'source.fixAll';\r\n    })(CodeActionKind = exports.CodeActionKind || (exports.CodeActionKind = {}));\r\n    /**\r\n     * The CodeActionContext namespace provides helper functions to work with\r\n     * [CodeActionContext](#CodeActionContext) literals.\r\n     */\r\n    var CodeActionContext;\r\n    (function (CodeActionContext) {\r\n        /**\r\n         * Creates a new CodeActionContext literal.\r\n         */\r\n        function create(diagnostics, only) {\r\n            var result = { diagnostics: diagnostics };\r\n            if (only !== void 0 && only !== null) {\r\n                result.only = only;\r\n            }\r\n            return result;\r\n        }\r\n        CodeActionContext.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));\r\n        }\r\n        CodeActionContext.is = is;\r\n    })(CodeActionContext = exports.CodeActionContext || (exports.CodeActionContext = {}));\r\n    var CodeAction;\r\n    (function (CodeAction) {\r\n        function create(title, commandOrEdit, kind) {\r\n            var result = { title: title };\r\n            if (Command.is(commandOrEdit)) {\r\n                result.command = commandOrEdit;\r\n            }\r\n            else {\r\n                result.edit = commandOrEdit;\r\n            }\r\n            if (kind !== void 0) {\r\n                result.kind = kind;\r\n            }\r\n            return result;\r\n        }\r\n        CodeAction.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && Is.string(candidate.title) &&\r\n                (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\r\n                (candidate.kind === void 0 || Is.string(candidate.kind)) &&\r\n                (candidate.edit !== void 0 || candidate.command !== void 0) &&\r\n                (candidate.command === void 0 || Command.is(candidate.command)) &&\r\n                (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) &&\r\n                (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));\r\n        }\r\n        CodeAction.is = is;\r\n    })(CodeAction = exports.CodeAction || (exports.CodeAction = {}));\r\n    /**\r\n     * The CodeLens namespace provides helper functions to work with\r\n     * [CodeLens](#CodeLens) literals.\r\n     */\r\n    var CodeLens;\r\n    (function (CodeLens) {\r\n        /**\r\n         * Creates a new CodeLens literal.\r\n         */\r\n        function create(range, data) {\r\n            var result = { range: range };\r\n            if (Is.defined(data)) {\r\n                result.data = data;\r\n            }\r\n            return result;\r\n        }\r\n        CodeLens.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\r\n        }\r\n        CodeLens.is = is;\r\n    })(CodeLens = exports.CodeLens || (exports.CodeLens = {}));\r\n    /**\r\n     * The FormattingOptions namespace provides helper functions to work with\r\n     * [FormattingOptions](#FormattingOptions) literals.\r\n     */\r\n    var FormattingOptions;\r\n    (function (FormattingOptions) {\r\n        /**\r\n         * Creates a new FormattingOptions literal.\r\n         */\r\n        function create(tabSize, insertSpaces) {\r\n            return { tabSize: tabSize, insertSpaces: insertSpaces };\r\n        }\r\n        FormattingOptions.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\r\n        }\r\n        FormattingOptions.is = is;\r\n    })(FormattingOptions = exports.FormattingOptions || (exports.FormattingOptions = {}));\r\n    /**\r\n     * The DocumentLink namespace provides helper functions to work with\r\n     * [DocumentLink](#DocumentLink) literals.\r\n     */\r\n    var DocumentLink;\r\n    (function (DocumentLink) {\r\n        /**\r\n         * Creates a new DocumentLink literal.\r\n         */\r\n        function create(range, target, data) {\r\n            return { range: range, target: target, data: data };\r\n        }\r\n        DocumentLink.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\r\n        }\r\n        DocumentLink.is = is;\r\n    })(DocumentLink = exports.DocumentLink || (exports.DocumentLink = {}));\r\n    /**\r\n     * The SelectionRange namespace provides helper function to work with\r\n     * SelectionRange literals.\r\n     */\r\n    var SelectionRange;\r\n    (function (SelectionRange) {\r\n        /**\r\n         * Creates a new SelectionRange\r\n         * @param range the range.\r\n         * @param parent an optional parent.\r\n         */\r\n        function create(range, parent) {\r\n            return { range: range, parent: parent };\r\n        }\r\n        SelectionRange.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\r\n        }\r\n        SelectionRange.is = is;\r\n    })(SelectionRange = exports.SelectionRange || (exports.SelectionRange = {}));\r\n    exports.EOL = ['\\n', '\\r\\n', '\\r'];\r\n    /**\r\n     * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\r\n     */\r\n    var TextDocument;\r\n    (function (TextDocument) {\r\n        /**\r\n         * Creates a new ITextDocument literal from the given uri and content.\r\n         * @param uri The document's uri.\r\n         * @param languageId  The document's language Id.\r\n         * @param content The document's content.\r\n         */\r\n        function create(uri, languageId, version, content) {\r\n            return new FullTextDocument(uri, languageId, version, content);\r\n        }\r\n        TextDocument.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)\r\n                && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\r\n        }\r\n        TextDocument.is = is;\r\n        function applyEdits(document, edits) {\r\n            var text = document.getText();\r\n            var sortedEdits = mergeSort(edits, function (a, b) {\r\n                var diff = a.range.start.line - b.range.start.line;\r\n                if (diff === 0) {\r\n                    return a.range.start.character - b.range.start.character;\r\n                }\r\n                return diff;\r\n            });\r\n            var lastModifiedOffset = text.length;\r\n            for (var i = sortedEdits.length - 1; i >= 0; i--) {\r\n                var e = sortedEdits[i];\r\n                var startOffset = document.offsetAt(e.range.start);\r\n                var endOffset = document.offsetAt(e.range.end);\r\n                if (endOffset <= lastModifiedOffset) {\r\n                    text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\r\n                }\r\n                else {\r\n                    throw new Error('Overlapping edit');\r\n                }\r\n                lastModifiedOffset = startOffset;\r\n            }\r\n            return text;\r\n        }\r\n        TextDocument.applyEdits = applyEdits;\r\n        function mergeSort(data, compare) {\r\n            if (data.length <= 1) {\r\n                // sorted\r\n                return data;\r\n            }\r\n            var p = (data.length / 2) | 0;\r\n            var left = data.slice(0, p);\r\n            var right = data.slice(p);\r\n            mergeSort(left, compare);\r\n            mergeSort(right, compare);\r\n            var leftIdx = 0;\r\n            var rightIdx = 0;\r\n            var i = 0;\r\n            while (leftIdx < left.length && rightIdx < right.length) {\r\n                var ret = compare(left[leftIdx], right[rightIdx]);\r\n                if (ret <= 0) {\r\n                    // smaller_equal -> take left to preserve order\r\n                    data[i++] = left[leftIdx++];\r\n                }\r\n                else {\r\n                    // greater -> take right\r\n                    data[i++] = right[rightIdx++];\r\n                }\r\n            }\r\n            while (leftIdx < left.length) {\r\n                data[i++] = left[leftIdx++];\r\n            }\r\n            while (rightIdx < right.length) {\r\n                data[i++] = right[rightIdx++];\r\n            }\r\n            return data;\r\n        }\r\n    })(TextDocument = exports.TextDocument || (exports.TextDocument = {}));\r\n    var FullTextDocument = /** @class */ (function () {\r\n        function FullTextDocument(uri, languageId, version, content) {\r\n            this._uri = uri;\r\n            this._languageId = languageId;\r\n            this._version = version;\r\n            this._content = content;\r\n            this._lineOffsets = undefined;\r\n        }\r\n        Object.defineProperty(FullTextDocument.prototype, \"uri\", {\r\n            get: function () {\r\n                return this._uri;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\r\n            get: function () {\r\n                return this._languageId;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        Object.defineProperty(FullTextDocument.prototype, \"version\", {\r\n            get: function () {\r\n                return this._version;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        FullTextDocument.prototype.getText = function (range) {\r\n            if (range) {\r\n                var start = this.offsetAt(range.start);\r\n                var end = this.offsetAt(range.end);\r\n                return this._content.substring(start, end);\r\n            }\r\n            return this._content;\r\n        };\r\n        FullTextDocument.prototype.update = function (event, version) {\r\n            this._content = event.text;\r\n            this._version = version;\r\n            this._lineOffsets = undefined;\r\n        };\r\n        FullTextDocument.prototype.getLineOffsets = function () {\r\n            if (this._lineOffsets === undefined) {\r\n                var lineOffsets = [];\r\n                var text = this._content;\r\n                var isLineStart = true;\r\n                for (var i = 0; i < text.length; i++) {\r\n                    if (isLineStart) {\r\n                        lineOffsets.push(i);\r\n                        isLineStart = false;\r\n                    }\r\n                    var ch = text.charAt(i);\r\n                    isLineStart = (ch === '\\r' || ch === '\\n');\r\n                    if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\r\n                        i++;\r\n                    }\r\n                }\r\n                if (isLineStart && text.length > 0) {\r\n                    lineOffsets.push(text.length);\r\n                }\r\n                this._lineOffsets = lineOffsets;\r\n            }\r\n            return this._lineOffsets;\r\n        };\r\n        FullTextDocument.prototype.positionAt = function (offset) {\r\n            offset = Math.max(Math.min(offset, this._content.length), 0);\r\n            var lineOffsets = this.getLineOffsets();\r\n            var low = 0, high = lineOffsets.length;\r\n            if (high === 0) {\r\n                return Position.create(0, offset);\r\n            }\r\n            while (low < high) {\r\n                var mid = Math.floor((low + high) / 2);\r\n                if (lineOffsets[mid] > offset) {\r\n                    high = mid;\r\n                }\r\n                else {\r\n                    low = mid + 1;\r\n                }\r\n            }\r\n            // low is the least x for which the line offset is larger than the current offset\r\n            // or array.length if no line offset is larger than the current offset\r\n            var line = low - 1;\r\n            return Position.create(line, offset - lineOffsets[line]);\r\n        };\r\n        FullTextDocument.prototype.offsetAt = function (position) {\r\n            var lineOffsets = this.getLineOffsets();\r\n            if (position.line >= lineOffsets.length) {\r\n                return this._content.length;\r\n            }\r\n            else if (position.line < 0) {\r\n                return 0;\r\n            }\r\n            var lineOffset = lineOffsets[position.line];\r\n            var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\r\n            return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\r\n        };\r\n        Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\r\n            get: function () {\r\n                return this.getLineOffsets().length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        return FullTextDocument;\r\n    }());\r\n    var Is;\r\n    (function (Is) {\r\n        var toString = Object.prototype.toString;\r\n        function defined(value) {\r\n            return typeof value !== 'undefined';\r\n        }\r\n        Is.defined = defined;\r\n        function undefined(value) {\r\n            return typeof value === 'undefined';\r\n        }\r\n        Is.undefined = undefined;\r\n        function boolean(value) {\r\n            return value === true || value === false;\r\n        }\r\n        Is.boolean = boolean;\r\n        function string(value) {\r\n            return toString.call(value) === '[object String]';\r\n        }\r\n        Is.string = string;\r\n        function number(value) {\r\n            return toString.call(value) === '[object Number]';\r\n        }\r\n        Is.number = number;\r\n        function func(value) {\r\n            return toString.call(value) === '[object Function]';\r\n        }\r\n        Is.func = func;\r\n        function objectLiteral(value) {\r\n            // Strictly speaking class instances pass this check as well. Since the LSP\r\n            // doesn't use classes we ignore this for now. If we do we need to add something\r\n            // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\r\n            return value !== null && typeof value === 'object';\r\n        }\r\n        Is.objectLiteral = objectLiteral;\r\n        function typedArray(value, check) {\r\n            return Array.isArray(value) && value.every(check);\r\n        }\r\n        Is.typedArray = typedArray;\r\n    })(Is || (Is = {}));\r\n});\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction boolean(value) {\r\n    return value === true || value === false;\r\n}\r\nexports.boolean = boolean;\r\nfunction string(value) {\r\n    return typeof value === 'string' || value instanceof String;\r\n}\r\nexports.string = string;\r\nfunction number(value) {\r\n    return typeof value === 'number' || value instanceof Number;\r\n}\r\nexports.number = number;\r\nfunction error(value) {\r\n    return value instanceof Error;\r\n}\r\nexports.error = error;\r\nfunction func(value) {\r\n    return typeof value === 'function';\r\n}\r\nexports.func = func;\r\nfunction array(value) {\r\n    return Array.isArray(value);\r\n}\r\nexports.array = array;\r\nfunction stringArray(value) {\r\n    return array(value) && value.every(elem => string(elem));\r\n}\r\nexports.stringArray = stringArray;\r\nfunction typedArray(value, check) {\r\n    return Array.isArray(value) && value.every(check);\r\n}\r\nexports.typedArray = typedArray;\r\nfunction objectLiteral(value) {\r\n    // Strictly speaking class instances pass this check as well. Since the LSP\r\n    // doesn't use classes we ignore this for now. If we do we need to add something\r\n    // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\r\n    return value !== null && typeof value === 'object';\r\n}\r\nexports.objectLiteral = objectLiteral;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nclass ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolRequestType0 = ProtocolRequestType0;\r\nclass ProtocolRequestType extends vscode_jsonrpc_1.RequestType {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolRequestType = ProtocolRequestType;\r\nclass ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolNotificationType = ProtocolNotificationType;\r\nclass ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolNotificationType0 = ProtocolNotificationType0;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * A request to resolve the implementation locations of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPositioParams]\r\n * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a\r\n * Thenable that resolves to such.\r\n */\r\nvar ImplementationRequest;\r\n(function (ImplementationRequest) {\r\n    ImplementationRequest.method = 'textDocument/implementation';\r\n    ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);\r\n    /** @deprecated Use ImplementationRequest.type */\r\n    ImplementationRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * A request to resolve the type definition locations of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPositioParams]\r\n * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a\r\n * Thenable that resolves to such.\r\n */\r\nvar TypeDefinitionRequest;\r\n(function (TypeDefinitionRequest) {\r\n    TypeDefinitionRequest.method = 'textDocument/typeDefinition';\r\n    TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);\r\n    /** @deprecated Use TypeDefinitionRequest.type */\r\n    TypeDefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.\r\n */\r\nvar WorkspaceFoldersRequest;\r\n(function (WorkspaceFoldersRequest) {\r\n    WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');\r\n})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));\r\n/**\r\n * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace\r\n * folder configuration changes.\r\n */\r\nvar DidChangeWorkspaceFoldersNotification;\r\n(function (DidChangeWorkspaceFoldersNotification) {\r\n    DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');\r\n})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * The 'workspace/configuration' request is sent from the server to the client to fetch a certain\r\n * configuration setting.\r\n *\r\n * This pull model replaces the old push model were the client signaled configuration change via an\r\n * event. If the server still needs to react to configuration changes (since the server caches the\r\n * result of `workspace/configuration` requests) the server should register for an empty configuration\r\n * change event and empty the cache if such an event is received.\r\n */\r\nvar ConfigurationRequest;\r\n(function (ConfigurationRequest) {\r\n    ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');\r\n})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A request to list all color symbols found in a given text document. The request's\r\n * parameter is of type [DocumentColorParams](#DocumentColorParams) the\r\n * response is of type [ColorInformation[]](#ColorInformation) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar DocumentColorRequest;\r\n(function (DocumentColorRequest) {\r\n    DocumentColorRequest.method = 'textDocument/documentColor';\r\n    DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);\r\n    /** @deprecated Use DocumentColorRequest.type */\r\n    DocumentColorRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));\r\n/**\r\n * A request to list all presentation for a color. The request's\r\n * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the\r\n * response is of type [ColorInformation[]](#ColorInformation) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar ColorPresentationRequest;\r\n(function (ColorPresentationRequest) {\r\n    ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');\r\n})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));\r\n", "\"use strict\";\r\n/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * Enum of known range kinds\r\n */\r\nvar FoldingRangeKind;\r\n(function (FoldingRangeKind) {\r\n    /**\r\n     * Folding range for a comment\r\n     */\r\n    FoldingRangeKind[\"Comment\"] = \"comment\";\r\n    /**\r\n     * Folding range for a imports or includes\r\n     */\r\n    FoldingRangeKind[\"Imports\"] = \"imports\";\r\n    /**\r\n     * Folding range for a region (e.g. `#region`)\r\n     */\r\n    FoldingRangeKind[\"Region\"] = \"region\";\r\n})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));\r\n/**\r\n * A request to provide folding ranges in a document. The request's\r\n * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the\r\n * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar FoldingRangeRequest;\r\n(function (FoldingRangeRequest) {\r\n    FoldingRangeRequest.method = 'textDocument/foldingRange';\r\n    FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);\r\n    /** @deprecated Use FoldingRangeRequest.type */\r\n    FoldingRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * A request to resolve the type definition locations of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPositioParams]\r\n * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)\r\n * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves\r\n * to such.\r\n */\r\nvar DeclarationRequest;\r\n(function (DeclarationRequest) {\r\n    DeclarationRequest.method = 'textDocument/declaration';\r\n    DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);\r\n    /** @deprecated Use DeclarationRequest.type */\r\n    DeclarationRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));\r\n", "\"use strict\";\r\n/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A request to provide selection ranges in a document. The request's\r\n * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the\r\n * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar SelectionRangeRequest;\r\n(function (SelectionRangeRequest) {\r\n    SelectionRangeRequest.method = 'textDocument/selectionRange';\r\n    SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);\r\n    /** @deprecated  Use SelectionRangeRequest.type */\r\n    SelectionRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\nvar WorkDoneProgress;\r\n(function (WorkDoneProgress) {\r\n    WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();\r\n})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));\r\n/**\r\n * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress\r\n * reporting from the server.\r\n */\r\nvar WorkDoneProgressCreateRequest;\r\n(function (WorkDoneProgressCreateRequest) {\r\n    WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');\r\n})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));\r\n/**\r\n * The `window/workDoneProgress/cancel` notification is sent from  the client to the server to cancel a progress\r\n * initiated on the server side.\r\n */\r\nvar WorkDoneProgressCancelNotification;\r\n(function (WorkDoneProgressCancelNotification) {\r\n    WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');\r\n})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst Is = require(\"./utils/is\");\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\nconst protocol_implementation_1 = require(\"./protocol.implementation\");\r\nexports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;\r\nconst protocol_typeDefinition_1 = require(\"./protocol.typeDefinition\");\r\nexports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;\r\nconst protocol_workspaceFolders_1 = require(\"./protocol.workspaceFolders\");\r\nexports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;\r\nexports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;\r\nconst protocol_configuration_1 = require(\"./protocol.configuration\");\r\nexports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;\r\nconst protocol_colorProvider_1 = require(\"./protocol.colorProvider\");\r\nexports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;\r\nexports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;\r\nconst protocol_foldingRange_1 = require(\"./protocol.foldingRange\");\r\nexports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;\r\nconst protocol_declaration_1 = require(\"./protocol.declaration\");\r\nexports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;\r\nconst protocol_selectionRange_1 = require(\"./protocol.selectionRange\");\r\nexports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;\r\nconst protocol_progress_1 = require(\"./protocol.progress\");\r\nexports.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;\r\nexports.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;\r\nexports.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * The DocumentFilter namespace provides helper functions to work with\r\n * [DocumentFilter](#DocumentFilter) literals.\r\n */\r\nvar DocumentFilter;\r\n(function (DocumentFilter) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);\r\n    }\r\n    DocumentFilter.is = is;\r\n})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));\r\n/**\r\n * The DocumentSelector namespace provides helper functions to work with\r\n * [DocumentSelector](#DocumentSelector)s.\r\n */\r\nvar DocumentSelector;\r\n(function (DocumentSelector) {\r\n    function is(value) {\r\n        if (!Array.isArray(value)) {\r\n            return false;\r\n        }\r\n        for (let elem of value) {\r\n            if (!Is.string(elem) && !DocumentFilter.is(elem)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    DocumentSelector.is = is;\r\n})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));\r\n/**\r\n * The `client/registerCapability` request is sent from the server to the client to register a new capability\r\n * handler on the client side.\r\n */\r\nvar RegistrationRequest;\r\n(function (RegistrationRequest) {\r\n    RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');\r\n})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));\r\n/**\r\n * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability\r\n * handler on the client side.\r\n */\r\nvar UnregistrationRequest;\r\n(function (UnregistrationRequest) {\r\n    UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');\r\n})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));\r\nvar ResourceOperationKind;\r\n(function (ResourceOperationKind) {\r\n    /**\r\n     * Supports creating new files and folders.\r\n     */\r\n    ResourceOperationKind.Create = 'create';\r\n    /**\r\n     * Supports renaming existing files and folders.\r\n     */\r\n    ResourceOperationKind.Rename = 'rename';\r\n    /**\r\n     * Supports deleting existing files and folders.\r\n     */\r\n    ResourceOperationKind.Delete = 'delete';\r\n})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));\r\nvar FailureHandlingKind;\r\n(function (FailureHandlingKind) {\r\n    /**\r\n     * Applying the workspace change is simply aborted if one of the changes provided\r\n     * fails. All operations executed before the failing operation stay executed.\r\n     */\r\n    FailureHandlingKind.Abort = 'abort';\r\n    /**\r\n     * All operations are executed transactional. That means they either all\r\n     * succeed or no changes at all are applied to the workspace.\r\n     */\r\n    FailureHandlingKind.Transactional = 'transactional';\r\n    /**\r\n     * If the workspace edit contains only textual file changes they are executed transactional.\r\n     * If resource changes (create, rename or delete file) are part of the change the failure\r\n     * handling startegy is abort.\r\n     */\r\n    FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';\r\n    /**\r\n     * The client tries to undo the operations already executed. But there is no\r\n     * guarantee that this is succeeding.\r\n     */\r\n    FailureHandlingKind.Undo = 'undo';\r\n})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));\r\n/**\r\n * The StaticRegistrationOptions namespace provides helper functions to work with\r\n * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.\r\n */\r\nvar StaticRegistrationOptions;\r\n(function (StaticRegistrationOptions) {\r\n    function hasId(value) {\r\n        const candidate = value;\r\n        return candidate && Is.string(candidate.id) && candidate.id.length > 0;\r\n    }\r\n    StaticRegistrationOptions.hasId = hasId;\r\n})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));\r\n/**\r\n * The TextDocumentRegistrationOptions namespace provides helper functions to work with\r\n * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.\r\n */\r\nvar TextDocumentRegistrationOptions;\r\n(function (TextDocumentRegistrationOptions) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));\r\n    }\r\n    TextDocumentRegistrationOptions.is = is;\r\n})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));\r\n/**\r\n * The WorkDoneProgressOptions namespace provides helper functions to work with\r\n * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.\r\n */\r\nvar WorkDoneProgressOptions;\r\n(function (WorkDoneProgressOptions) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));\r\n    }\r\n    WorkDoneProgressOptions.is = is;\r\n    function hasWorkDoneProgress(value) {\r\n        const candidate = value;\r\n        return candidate && Is.boolean(candidate.workDoneProgress);\r\n    }\r\n    WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;\r\n})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));\r\n/**\r\n * The initialize request is sent from the client to the server.\r\n * It is sent once as the request after starting up the server.\r\n * The requests parameter is of type [InitializeParams](#InitializeParams)\r\n * the response if of type [InitializeResult](#InitializeResult) of a Thenable that\r\n * resolves to such.\r\n */\r\nvar InitializeRequest;\r\n(function (InitializeRequest) {\r\n    InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');\r\n})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));\r\n/**\r\n * Known error codes for an `InitializeError`;\r\n */\r\nvar InitializeError;\r\n(function (InitializeError) {\r\n    /**\r\n     * If the protocol version provided by the client can't be handled by the server.\r\n     * @deprecated This initialize error got replaced by client capabilities. There is\r\n     * no version handshake in version 3.0x\r\n     */\r\n    InitializeError.unknownProtocolVersion = 1;\r\n})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));\r\n/**\r\n * The intialized notification is sent from the client to the\r\n * server after the client is fully initialized and the server\r\n * is allowed to send requests from the server to the client.\r\n */\r\nvar InitializedNotification;\r\n(function (InitializedNotification) {\r\n    InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');\r\n})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));\r\n//---- Shutdown Method ----\r\n/**\r\n * A shutdown request is sent from the client to the server.\r\n * It is sent once when the client decides to shutdown the\r\n * server. The only notification that is sent after a shutdown request\r\n * is the exit event.\r\n */\r\nvar ShutdownRequest;\r\n(function (ShutdownRequest) {\r\n    ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');\r\n})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));\r\n//---- Exit Notification ----\r\n/**\r\n * The exit event is sent from the client to the server to\r\n * ask the server to exit its process.\r\n */\r\nvar ExitNotification;\r\n(function (ExitNotification) {\r\n    ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');\r\n})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));\r\n/**\r\n * The configuration change notification is sent from the client to the server\r\n * when the client's configuration has changed. The notification contains\r\n * the changed configuration as defined by the language client.\r\n */\r\nvar DidChangeConfigurationNotification;\r\n(function (DidChangeConfigurationNotification) {\r\n    DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');\r\n})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));\r\n//---- Message show and log notifications ----\r\n/**\r\n * The message type\r\n */\r\nvar MessageType;\r\n(function (MessageType) {\r\n    /**\r\n     * An error message.\r\n     */\r\n    MessageType.Error = 1;\r\n    /**\r\n     * A warning message.\r\n     */\r\n    MessageType.Warning = 2;\r\n    /**\r\n     * An information message.\r\n     */\r\n    MessageType.Info = 3;\r\n    /**\r\n     * A log message.\r\n     */\r\n    MessageType.Log = 4;\r\n})(MessageType = exports.MessageType || (exports.MessageType = {}));\r\n/**\r\n * The show message notification is sent from a server to a client to ask\r\n * the client to display a particular message in the user interface.\r\n */\r\nvar ShowMessageNotification;\r\n(function (ShowMessageNotification) {\r\n    ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');\r\n})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));\r\n/**\r\n * The show message request is sent from the server to the client to show a message\r\n * and a set of options actions to the user.\r\n */\r\nvar ShowMessageRequest;\r\n(function (ShowMessageRequest) {\r\n    ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');\r\n})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));\r\n/**\r\n * The log message notification is sent from the server to the client to ask\r\n * the client to log a particular message.\r\n */\r\nvar LogMessageNotification;\r\n(function (LogMessageNotification) {\r\n    LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');\r\n})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));\r\n//---- Telemetry notification\r\n/**\r\n * The telemetry event notification is sent from the server to the client to ask\r\n * the client to log telemetry data.\r\n */\r\nvar TelemetryEventNotification;\r\n(function (TelemetryEventNotification) {\r\n    TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');\r\n})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));\r\n/**\r\n * Defines how the host (editor) should sync\r\n * document changes to the language server.\r\n */\r\nvar TextDocumentSyncKind;\r\n(function (TextDocumentSyncKind) {\r\n    /**\r\n     * Documents should not be synced at all.\r\n     */\r\n    TextDocumentSyncKind.None = 0;\r\n    /**\r\n     * Documents are synced by always sending the full content\r\n     * of the document.\r\n     */\r\n    TextDocumentSyncKind.Full = 1;\r\n    /**\r\n     * Documents are synced by sending the full content on open.\r\n     * After that only incremental updates to the document are\r\n     * send.\r\n     */\r\n    TextDocumentSyncKind.Incremental = 2;\r\n})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));\r\n/**\r\n * The document open notification is sent from the client to the server to signal\r\n * newly opened text documents. The document's truth is now managed by the client\r\n * and the server must not try to read the document's truth using the document's\r\n * uri. Open in this sense means it is managed by the client. It doesn't necessarily\r\n * mean that its content is presented in an editor. An open notification must not\r\n * be sent more than once without a corresponding close notification send before.\r\n * This means open and close notification must be balanced and the max open count\r\n * is one.\r\n */\r\nvar DidOpenTextDocumentNotification;\r\n(function (DidOpenTextDocumentNotification) {\r\n    DidOpenTextDocumentNotification.method = 'textDocument/didOpen';\r\n    DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);\r\n})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));\r\n/**\r\n * The document change notification is sent from the client to the server to signal\r\n * changes to a text document.\r\n */\r\nvar DidChangeTextDocumentNotification;\r\n(function (DidChangeTextDocumentNotification) {\r\n    DidChangeTextDocumentNotification.method = 'textDocument/didChange';\r\n    DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);\r\n})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));\r\n/**\r\n * The document close notification is sent from the client to the server when\r\n * the document got closed in the client. The document's truth now exists where\r\n * the document's uri points to (e.g. if the document's uri is a file uri the\r\n * truth now exists on disk). As with the open notification the close notification\r\n * is about managing the document's content. Receiving a close notification\r\n * doesn't mean that the document was open in an editor before. A close\r\n * notification requires a previous open notification to be sent.\r\n */\r\nvar DidCloseTextDocumentNotification;\r\n(function (DidCloseTextDocumentNotification) {\r\n    DidCloseTextDocumentNotification.method = 'textDocument/didClose';\r\n    DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);\r\n})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));\r\n/**\r\n * The document save notification is sent from the client to the server when\r\n * the document got saved in the client.\r\n */\r\nvar DidSaveTextDocumentNotification;\r\n(function (DidSaveTextDocumentNotification) {\r\n    DidSaveTextDocumentNotification.method = 'textDocument/didSave';\r\n    DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);\r\n})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));\r\n/**\r\n * Represents reasons why a text document is saved.\r\n */\r\nvar TextDocumentSaveReason;\r\n(function (TextDocumentSaveReason) {\r\n    /**\r\n     * Manually triggered, e.g. by the user pressing save, by starting debugging,\r\n     * or by an API call.\r\n     */\r\n    TextDocumentSaveReason.Manual = 1;\r\n    /**\r\n     * Automatic after a delay.\r\n     */\r\n    TextDocumentSaveReason.AfterDelay = 2;\r\n    /**\r\n     * When the editor lost focus.\r\n     */\r\n    TextDocumentSaveReason.FocusOut = 3;\r\n})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));\r\n/**\r\n * A document will save notification is sent from the client to the server before\r\n * the document is actually saved.\r\n */\r\nvar WillSaveTextDocumentNotification;\r\n(function (WillSaveTextDocumentNotification) {\r\n    WillSaveTextDocumentNotification.method = 'textDocument/willSave';\r\n    WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);\r\n})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));\r\n/**\r\n * A document will save request is sent from the client to the server before\r\n * the document is actually saved. The request can return an array of TextEdits\r\n * which will be applied to the text document before it is saved. Please note that\r\n * clients might drop results if computing the text edits took too long or if a\r\n * server constantly fails on this request. This is done to keep the save fast and\r\n * reliable.\r\n */\r\nvar WillSaveTextDocumentWaitUntilRequest;\r\n(function (WillSaveTextDocumentWaitUntilRequest) {\r\n    WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';\r\n    WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);\r\n})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));\r\n/**\r\n * The watched files notification is sent from the client to the server when\r\n * the client detects changes to file watched by the language client.\r\n */\r\nvar DidChangeWatchedFilesNotification;\r\n(function (DidChangeWatchedFilesNotification) {\r\n    DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');\r\n})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));\r\n/**\r\n * The file event type\r\n */\r\nvar FileChangeType;\r\n(function (FileChangeType) {\r\n    /**\r\n     * The file got created.\r\n     */\r\n    FileChangeType.Created = 1;\r\n    /**\r\n     * The file got changed.\r\n     */\r\n    FileChangeType.Changed = 2;\r\n    /**\r\n     * The file got deleted.\r\n     */\r\n    FileChangeType.Deleted = 3;\r\n})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));\r\nvar WatchKind;\r\n(function (WatchKind) {\r\n    /**\r\n     * Interested in create events.\r\n     */\r\n    WatchKind.Create = 1;\r\n    /**\r\n     * Interested in change events\r\n     */\r\n    WatchKind.Change = 2;\r\n    /**\r\n     * Interested in delete events\r\n     */\r\n    WatchKind.Delete = 4;\r\n})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));\r\n/**\r\n * Diagnostics notification are sent from the server to the client to signal\r\n * results of validation runs.\r\n */\r\nvar PublishDiagnosticsNotification;\r\n(function (PublishDiagnosticsNotification) {\r\n    PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');\r\n})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));\r\n/**\r\n * How a completion was triggered\r\n */\r\nvar CompletionTriggerKind;\r\n(function (CompletionTriggerKind) {\r\n    /**\r\n     * Completion was triggered by typing an identifier (24x7 code\r\n     * complete), manual invocation (e.g Ctrl+Space) or via API.\r\n     */\r\n    CompletionTriggerKind.Invoked = 1;\r\n    /**\r\n     * Completion was triggered by a trigger character specified by\r\n     * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.\r\n     */\r\n    CompletionTriggerKind.TriggerCharacter = 2;\r\n    /**\r\n     * Completion was re-triggered as current completion list is incomplete\r\n     */\r\n    CompletionTriggerKind.TriggerForIncompleteCompletions = 3;\r\n})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));\r\n/**\r\n * Request to request completion at a given text document position. The request's\r\n * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response\r\n * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)\r\n * or a Thenable that resolves to such.\r\n *\r\n * The request can delay the computation of the [`detail`](#CompletionItem.detail)\r\n * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`\r\n * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,\r\n * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.\r\n */\r\nvar CompletionRequest;\r\n(function (CompletionRequest) {\r\n    CompletionRequest.method = 'textDocument/completion';\r\n    CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);\r\n    /** @deprecated Use CompletionRequest.type */\r\n    CompletionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));\r\n/**\r\n * Request to resolve additional information for a given completion item.The request's\r\n * parameter is of type [CompletionItem](#CompletionItem) the response\r\n * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.\r\n */\r\nvar CompletionResolveRequest;\r\n(function (CompletionResolveRequest) {\r\n    CompletionResolveRequest.method = 'completionItem/resolve';\r\n    CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);\r\n})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));\r\n/**\r\n * Request to request hover information at a given text document position. The request's\r\n * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of\r\n * type [Hover](#Hover) or a Thenable that resolves to such.\r\n */\r\nvar HoverRequest;\r\n(function (HoverRequest) {\r\n    HoverRequest.method = 'textDocument/hover';\r\n    HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);\r\n})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));\r\n/**\r\n * How a signature help was triggered.\r\n *\r\n * @since 3.15.0\r\n */\r\nvar SignatureHelpTriggerKind;\r\n(function (SignatureHelpTriggerKind) {\r\n    /**\r\n     * Signature help was invoked manually by the user or by a command.\r\n     */\r\n    SignatureHelpTriggerKind.Invoked = 1;\r\n    /**\r\n     * Signature help was triggered by a trigger character.\r\n     */\r\n    SignatureHelpTriggerKind.TriggerCharacter = 2;\r\n    /**\r\n     * Signature help was triggered by the cursor moving or by the document content changing.\r\n     */\r\n    SignatureHelpTriggerKind.ContentChange = 3;\r\n})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));\r\nvar SignatureHelpRequest;\r\n(function (SignatureHelpRequest) {\r\n    SignatureHelpRequest.method = 'textDocument/signatureHelp';\r\n    SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);\r\n})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));\r\n/**\r\n * A request to resolve the definition location of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPosition]\r\n * (#TextDocumentPosition) the response is of either type [Definition](#Definition)\r\n * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves\r\n * to such.\r\n */\r\nvar DefinitionRequest;\r\n(function (DefinitionRequest) {\r\n    DefinitionRequest.method = 'textDocument/definition';\r\n    DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);\r\n    /** @deprecated Use DefinitionRequest.type */\r\n    DefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));\r\n/**\r\n * A request to resolve project-wide references for the symbol denoted\r\n * by the given text document position. The request's parameter is of\r\n * type [ReferenceParams](#ReferenceParams) the response is of type\r\n * [Location[]](#Location) or a Thenable that resolves to such.\r\n */\r\nvar ReferencesRequest;\r\n(function (ReferencesRequest) {\r\n    ReferencesRequest.method = 'textDocument/references';\r\n    ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);\r\n    /** @deprecated Use ReferencesRequest.type */\r\n    ReferencesRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));\r\n/**\r\n * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given\r\n * text document position. The request's parameter is of type [TextDocumentPosition]\r\n * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]\r\n * (#DocumentHighlight) or a Thenable that resolves to such.\r\n */\r\nvar DocumentHighlightRequest;\r\n(function (DocumentHighlightRequest) {\r\n    DocumentHighlightRequest.method = 'textDocument/documentHighlight';\r\n    DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);\r\n    /** @deprecated Use DocumentHighlightRequest.type */\r\n    DocumentHighlightRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));\r\n/**\r\n * A request to list all symbols found in a given text document. The request's\r\n * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the\r\n * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar DocumentSymbolRequest;\r\n(function (DocumentSymbolRequest) {\r\n    DocumentSymbolRequest.method = 'textDocument/documentSymbol';\r\n    DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);\r\n    /** @deprecated Use DocumentSymbolRequest.type */\r\n    DocumentSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));\r\n/**\r\n * A request to provide commands for the given text document and range.\r\n */\r\nvar CodeActionRequest;\r\n(function (CodeActionRequest) {\r\n    CodeActionRequest.method = 'textDocument/codeAction';\r\n    CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);\r\n    /** @deprecated Use CodeActionRequest.type */\r\n    CodeActionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));\r\n/**\r\n * A request to list project-wide symbols matching the query string given\r\n * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is\r\n * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that\r\n * resolves to such.\r\n */\r\nvar WorkspaceSymbolRequest;\r\n(function (WorkspaceSymbolRequest) {\r\n    WorkspaceSymbolRequest.method = 'workspace/symbol';\r\n    WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);\r\n    /** @deprecated Use WorkspaceSymbolRequest.type */\r\n    WorkspaceSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));\r\n/**\r\n * A request to provide code lens for the given text document.\r\n */\r\nvar CodeLensRequest;\r\n(function (CodeLensRequest) {\r\n    CodeLensRequest.type = new messages_1.ProtocolRequestType('textDocument/codeLens');\r\n    /** @deprecated Use CodeLensRequest.type */\r\n    CodeLensRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));\r\n/**\r\n * A request to resolve a command for a given code lens.\r\n */\r\nvar CodeLensResolveRequest;\r\n(function (CodeLensResolveRequest) {\r\n    CodeLensResolveRequest.type = new messages_1.ProtocolRequestType('codeLens/resolve');\r\n})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));\r\n/**\r\n * A request to provide document links\r\n */\r\nvar DocumentLinkRequest;\r\n(function (DocumentLinkRequest) {\r\n    DocumentLinkRequest.method = 'textDocument/documentLink';\r\n    DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);\r\n    /** @deprecated Use DocumentLinkRequest.type */\r\n    DocumentLinkRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));\r\n/**\r\n * Request to resolve additional information for a given document link. The request's\r\n * parameter is of type [DocumentLink](#DocumentLink) the response\r\n * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.\r\n */\r\nvar DocumentLinkResolveRequest;\r\n(function (DocumentLinkResolveRequest) {\r\n    DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType('documentLink/resolve');\r\n})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));\r\n/**\r\n * A request to to format a whole document.\r\n */\r\nvar DocumentFormattingRequest;\r\n(function (DocumentFormattingRequest) {\r\n    DocumentFormattingRequest.method = 'textDocument/formatting';\r\n    DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);\r\n})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));\r\n/**\r\n * A request to to format a range in a document.\r\n */\r\nvar DocumentRangeFormattingRequest;\r\n(function (DocumentRangeFormattingRequest) {\r\n    DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';\r\n    DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);\r\n})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));\r\n/**\r\n * A request to format a document on type.\r\n */\r\nvar DocumentOnTypeFormattingRequest;\r\n(function (DocumentOnTypeFormattingRequest) {\r\n    DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';\r\n    DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);\r\n})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));\r\n/**\r\n * A request to rename a symbol.\r\n */\r\nvar RenameRequest;\r\n(function (RenameRequest) {\r\n    RenameRequest.method = 'textDocument/rename';\r\n    RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);\r\n})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));\r\n/**\r\n * A request to test and perform the setup necessary for a rename.\r\n */\r\nvar PrepareRenameRequest;\r\n(function (PrepareRenameRequest) {\r\n    PrepareRenameRequest.method = 'textDocument/prepareRename';\r\n    PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);\r\n})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));\r\n/**\r\n * A request send from the client to the server to execute a command. The request might return\r\n * a workspace edit which the client will apply to the workspace.\r\n */\r\nvar ExecuteCommandRequest;\r\n(function (ExecuteCommandRequest) {\r\n    ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');\r\n})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));\r\n/**\r\n * A request sent from the server to the client to modified certain resources.\r\n */\r\nvar ApplyWorkspaceEditRequest;\r\n(function (ApplyWorkspaceEditRequest) {\r\n    ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');\r\n})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) TypeFox and others. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A request to result a `CallHierarchyItem` in a document at a given position.\r\n * Can be used as an input to a incoming or outgoing call hierarchy.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar CallHierarchyPrepareRequest;\r\n(function (CallHierarchyPrepareRequest) {\r\n    CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';\r\n    CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);\r\n})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));\r\n/**\r\n * A request to resolve the incoming calls for a given `CallHierarchyItem`.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar CallHierarchyIncomingCallsRequest;\r\n(function (CallHierarchyIncomingCallsRequest) {\r\n    CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';\r\n    CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);\r\n})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));\r\n/**\r\n * A request to resolve the outgoing calls for a given `CallHierarchyItem`.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar CallHierarchyOutgoingCallsRequest;\r\n(function (CallHierarchyOutgoingCallsRequest) {\r\n    CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';\r\n    CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);\r\n})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A set of predefined token types. This set is not fixed\r\n * an clients can specify additional token types via the\r\n * corresponding client capabilities.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokenTypes;\r\n(function (SemanticTokenTypes) {\r\n    SemanticTokenTypes[\"comment\"] = \"comment\";\r\n    SemanticTokenTypes[\"keyword\"] = \"keyword\";\r\n    SemanticTokenTypes[\"string\"] = \"string\";\r\n    SemanticTokenTypes[\"number\"] = \"number\";\r\n    SemanticTokenTypes[\"regexp\"] = \"regexp\";\r\n    SemanticTokenTypes[\"operator\"] = \"operator\";\r\n    SemanticTokenTypes[\"namespace\"] = \"namespace\";\r\n    SemanticTokenTypes[\"type\"] = \"type\";\r\n    SemanticTokenTypes[\"struct\"] = \"struct\";\r\n    SemanticTokenTypes[\"class\"] = \"class\";\r\n    SemanticTokenTypes[\"interface\"] = \"interface\";\r\n    SemanticTokenTypes[\"enum\"] = \"enum\";\r\n    SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\r\n    SemanticTokenTypes[\"function\"] = \"function\";\r\n    SemanticTokenTypes[\"member\"] = \"member\";\r\n    SemanticTokenTypes[\"property\"] = \"property\";\r\n    SemanticTokenTypes[\"macro\"] = \"macro\";\r\n    SemanticTokenTypes[\"variable\"] = \"variable\";\r\n    SemanticTokenTypes[\"parameter\"] = \"parameter\";\r\n    SemanticTokenTypes[\"label\"] = \"label\";\r\n})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));\r\n/**\r\n * A set of predefined token modifiers. This set is not fixed\r\n * an clients can specify additional token types via the\r\n * corresponding client capabilities.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokenModifiers;\r\n(function (SemanticTokenModifiers) {\r\n    SemanticTokenModifiers[\"documentation\"] = \"documentation\";\r\n    SemanticTokenModifiers[\"declaration\"] = \"declaration\";\r\n    SemanticTokenModifiers[\"definition\"] = \"definition\";\r\n    SemanticTokenModifiers[\"reference\"] = \"reference\";\r\n    SemanticTokenModifiers[\"static\"] = \"static\";\r\n    SemanticTokenModifiers[\"abstract\"] = \"abstract\";\r\n    SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\r\n    SemanticTokenModifiers[\"async\"] = \"async\";\r\n    SemanticTokenModifiers[\"volatile\"] = \"volatile\";\r\n    SemanticTokenModifiers[\"readonly\"] = \"readonly\";\r\n})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokens;\r\n(function (SemanticTokens) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\r\n            Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\r\n    }\r\n    SemanticTokens.is = is;\r\n})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokensRequest;\r\n(function (SemanticTokensRequest) {\r\n    SemanticTokensRequest.method = 'textDocument/semanticTokens';\r\n    SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);\r\n})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokensEditsRequest;\r\n(function (SemanticTokensEditsRequest) {\r\n    SemanticTokensEditsRequest.method = 'textDocument/semanticTokens/edits';\r\n    SemanticTokensEditsRequest.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest.method);\r\n})(SemanticTokensEditsRequest = exports.SemanticTokensEditsRequest || (exports.SemanticTokensEditsRequest = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokensRangeRequest;\r\n(function (SemanticTokensRangeRequest) {\r\n    SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';\r\n    SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);\r\n})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nfunction __export(m) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nexports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;\r\nexports.ResponseError = vscode_jsonrpc_1.ResponseError;\r\nexports.CancellationToken = vscode_jsonrpc_1.CancellationToken;\r\nexports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;\r\nexports.Disposable = vscode_jsonrpc_1.Disposable;\r\nexports.Event = vscode_jsonrpc_1.Event;\r\nexports.Emitter = vscode_jsonrpc_1.Emitter;\r\nexports.Trace = vscode_jsonrpc_1.Trace;\r\nexports.TraceFormat = vscode_jsonrpc_1.TraceFormat;\r\nexports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;\r\nexports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;\r\nexports.RequestType = vscode_jsonrpc_1.RequestType;\r\nexports.RequestType0 = vscode_jsonrpc_1.RequestType0;\r\nexports.NotificationType = vscode_jsonrpc_1.NotificationType;\r\nexports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;\r\nexports.MessageReader = vscode_jsonrpc_1.MessageReader;\r\nexports.MessageWriter = vscode_jsonrpc_1.MessageWriter;\r\nexports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;\r\nexports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;\r\nexports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;\r\nexports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;\r\nexports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;\r\nexports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;\r\nexports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;\r\nexports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;\r\nexports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;\r\nexports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;\r\nexports.ProgressType = vscode_jsonrpc_1.ProgressType;\r\n__export(require(\"vscode-languageserver-types\"));\r\n__export(require(\"./protocol\"));\r\nconst callHierarchy = require(\"./protocol.callHierarchy.proposed\");\r\nconst st = require(\"./protocol.sematicTokens.proposed\");\r\nvar Proposed;\r\n(function (Proposed) {\r\n    let CallHierarchyPrepareRequest;\r\n    (function (CallHierarchyPrepareRequest) {\r\n        CallHierarchyPrepareRequest.method = callHierarchy.CallHierarchyPrepareRequest.method;\r\n        CallHierarchyPrepareRequest.type = callHierarchy.CallHierarchyPrepareRequest.type;\r\n    })(CallHierarchyPrepareRequest = Proposed.CallHierarchyPrepareRequest || (Proposed.CallHierarchyPrepareRequest = {}));\r\n    let CallHierarchyIncomingCallsRequest;\r\n    (function (CallHierarchyIncomingCallsRequest) {\r\n        CallHierarchyIncomingCallsRequest.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;\r\n        CallHierarchyIncomingCallsRequest.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;\r\n    })(CallHierarchyIncomingCallsRequest = Proposed.CallHierarchyIncomingCallsRequest || (Proposed.CallHierarchyIncomingCallsRequest = {}));\r\n    let CallHierarchyOutgoingCallsRequest;\r\n    (function (CallHierarchyOutgoingCallsRequest) {\r\n        CallHierarchyOutgoingCallsRequest.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;\r\n        CallHierarchyOutgoingCallsRequest.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;\r\n    })(CallHierarchyOutgoingCallsRequest = Proposed.CallHierarchyOutgoingCallsRequest || (Proposed.CallHierarchyOutgoingCallsRequest = {}));\r\n    Proposed.SemanticTokenTypes = st.SemanticTokenTypes;\r\n    Proposed.SemanticTokenModifiers = st.SemanticTokenModifiers;\r\n    Proposed.SemanticTokens = st.SemanticTokens;\r\n    let SemanticTokensRequest;\r\n    (function (SemanticTokensRequest) {\r\n        SemanticTokensRequest.method = st.SemanticTokensRequest.method;\r\n        SemanticTokensRequest.type = st.SemanticTokensRequest.type;\r\n    })(SemanticTokensRequest = Proposed.SemanticTokensRequest || (Proposed.SemanticTokensRequest = {}));\r\n    let SemanticTokensEditsRequest;\r\n    (function (SemanticTokensEditsRequest) {\r\n        SemanticTokensEditsRequest.method = st.SemanticTokensEditsRequest.method;\r\n        SemanticTokensEditsRequest.type = st.SemanticTokensEditsRequest.type;\r\n    })(SemanticTokensEditsRequest = Proposed.SemanticTokensEditsRequest || (Proposed.SemanticTokensEditsRequest = {}));\r\n    let SemanticTokensRangeRequest;\r\n    (function (SemanticTokensRangeRequest) {\r\n        SemanticTokensRangeRequest.method = st.SemanticTokensRangeRequest.method;\r\n        SemanticTokensRangeRequest.type = st.SemanticTokensRangeRequest.type;\r\n    })(SemanticTokensRangeRequest = Proposed.SemanticTokensRangeRequest || (Proposed.SemanticTokensRangeRequest = {}));\r\n})(Proposed = exports.Proposed || (exports.Proposed = {}));\r\nfunction createProtocolConnection(reader, writer, logger, strategy) {\r\n    return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);\r\n}\r\nexports.createProtocolConnection = createProtocolConnection;\r\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction boolean(value) {\n    return value === true || value === false;\n}\nexports.boolean = boolean;\nfunction string(value) {\n    return typeof value === 'string' || value instanceof String;\n}\nexports.string = string;\nfunction number(value) {\n    return typeof value === 'number' || value instanceof Number;\n}\nexports.number = number;\nfunction error(value) {\n    return value instanceof Error;\n}\nexports.error = error;\nfunction func(value) {\n    return typeof value === 'function';\n}\nexports.func = func;\nfunction array(value) {\n    return Array.isArray(value);\n}\nexports.array = array;\nfunction stringArray(value) {\n    return array(value) && value.every(elem => string(elem));\n}\nexports.stringArray = stringArray;\nfunction typedArray(value, check) {\n    return Array.isArray(value) && value.every(check);\n}\nexports.typedArray = typedArray;\nfunction thenable(value) {\n    return value && func(value.then);\n}\nexports.thenable = thenable;\nfunction asPromise(value) {\n    if (value instanceof Promise) {\n        return value;\n    }\n    else if (thenable(value)) {\n        return new Promise((resolve, reject) => {\n            value.then((resolved) => resolve(resolved), (error) => reject(error));\n        });\n    }\n    else {\n        return Promise.resolve(value);\n    }\n}\nexports.asPromise = asPromise;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nclass ProtocolCompletionItem extends code.CompletionItem {\n    constructor(label) {\n        super(label);\n    }\n}\nexports.default = ProtocolCompletionItem;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nclass ProtocolCodeLens extends code.CodeLens {\n    constructor(range) {\n        super(range);\n    }\n}\nexports.default = ProtocolCodeLens;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nclass ProtocolDocumentLink extends code.DocumentLink {\n    constructor(range, target) {\n        super(range, target);\n    }\n}\nexports.default = ProtocolDocumentLink;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nconst proto = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst protocolCompletionItem_1 = require(\"./protocolCompletionItem\");\nconst protocolCodeLens_1 = require(\"./protocolCodeLens\");\nconst protocolDocumentLink_1 = require(\"./protocolDocumentLink\");\nfunction createConverter(uriConverter) {\n    const nullConverter = (value) => value.toString();\n    const _uriConverter = uriConverter || nullConverter;\n    function asUri(value) {\n        return _uriConverter(value);\n    }\n    function asTextDocumentIdentifier(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri)\n        };\n    }\n    function asVersionedTextDocumentIdentifier(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri),\n            version: textDocument.version\n        };\n    }\n    function asOpenTextDocumentParams(textDocument) {\n        return {\n            textDocument: {\n                uri: _uriConverter(textDocument.uri),\n                languageId: textDocument.languageId,\n                version: textDocument.version,\n                text: textDocument.getText()\n            }\n        };\n    }\n    function isTextDocumentChangeEvent(value) {\n        let candidate = value;\n        return !!candidate.document && !!candidate.contentChanges;\n    }\n    function isTextDocument(value) {\n        let candidate = value;\n        return !!candidate.uri && !!candidate.version;\n    }\n    function asChangeTextDocumentParams(arg) {\n        if (isTextDocument(arg)) {\n            let result = {\n                textDocument: {\n                    uri: _uriConverter(arg.uri),\n                    version: arg.version\n                },\n                contentChanges: [{ text: arg.getText() }]\n            };\n            return result;\n        }\n        else if (isTextDocumentChangeEvent(arg)) {\n            let document = arg.document;\n            let result = {\n                textDocument: {\n                    uri: _uriConverter(document.uri),\n                    version: document.version\n                },\n                contentChanges: arg.contentChanges.map((change) => {\n                    let range = change.range;\n                    return {\n                        range: {\n                            start: { line: range.start.line, character: range.start.character },\n                            end: { line: range.end.line, character: range.end.character }\n                        },\n                        rangeLength: change.rangeLength,\n                        text: change.text\n                    };\n                })\n            };\n            return result;\n        }\n        else {\n            throw Error('Unsupported text document change parameter');\n        }\n    }\n    function asCloseTextDocumentParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asSaveTextDocumentParams(textDocument, includeContent = false) {\n        let result = {\n            textDocument: asVersionedTextDocumentIdentifier(textDocument)\n        };\n        if (includeContent) {\n            result.text = textDocument.getText();\n        }\n        return result;\n    }\n    function asTextDocumentSaveReason(reason) {\n        switch (reason) {\n            case code.TextDocumentSaveReason.Manual:\n                return proto.TextDocumentSaveReason.Manual;\n            case code.TextDocumentSaveReason.AfterDelay:\n                return proto.TextDocumentSaveReason.AfterDelay;\n            case code.TextDocumentSaveReason.FocusOut:\n                return proto.TextDocumentSaveReason.FocusOut;\n        }\n        return proto.TextDocumentSaveReason.Manual;\n    }\n    function asWillSaveTextDocumentParams(event) {\n        return {\n            textDocument: asTextDocumentIdentifier(event.document),\n            reason: asTextDocumentSaveReason(event.reason)\n        };\n    }\n    function asTextDocumentPositionParams(textDocument, position) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position)\n        };\n    }\n    function asCompletionTriggerKind(triggerKind) {\n        switch (triggerKind) {\n            case code.CompletionTriggerKind.TriggerCharacter:\n                return proto.CompletionTriggerKind.TriggerCharacter;\n            case code.CompletionTriggerKind.TriggerForIncompleteCompletions:\n                return proto.CompletionTriggerKind.TriggerForIncompleteCompletions;\n            default:\n                return proto.CompletionTriggerKind.Invoked;\n        }\n    }\n    function asCompletionParams(textDocument, position, context) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: {\n                triggerKind: asCompletionTriggerKind(context.triggerKind),\n                triggerCharacter: context.triggerCharacter\n            }\n        };\n    }\n    function asSignatureHelpTriggerKind(triggerKind) {\n        switch (triggerKind) {\n            case code.SignatureHelpTriggerKind.Invoke:\n                return proto.SignatureHelpTriggerKind.Invoked;\n            case code.SignatureHelpTriggerKind.TriggerCharacter:\n                return proto.SignatureHelpTriggerKind.TriggerCharacter;\n            case code.SignatureHelpTriggerKind.ContentChange:\n                return proto.SignatureHelpTriggerKind.ContentChange;\n        }\n    }\n    function asParameterInformation(value) {\n        // We leave the documentation out on purpose since it usually adds no\n        // value for the server.\n        return {\n            label: value.label\n        };\n    }\n    function asParameterInformations(values) {\n        return values.map(asParameterInformation);\n    }\n    function asSignatureInformation(value) {\n        // We leave the documentation out on purpose since it usually adds no\n        // value for the server.\n        return {\n            label: value.label,\n            parameters: asParameterInformations(value.parameters)\n        };\n    }\n    function asSignatureInformations(values) {\n        return values.map(asSignatureInformation);\n    }\n    function asSignatureHelp(value) {\n        if (value === undefined) {\n            return value;\n        }\n        return {\n            signatures: asSignatureInformations(value.signatures),\n            activeSignature: value.activeSignature,\n            activeParameter: value.activeParameter\n        };\n    }\n    function asSignatureHelpParams(textDocument, position, context) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: {\n                isRetrigger: context.isRetrigger,\n                triggerCharacter: context.triggerCharacter,\n                triggerKind: asSignatureHelpTriggerKind(context.triggerKind),\n                activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp)\n            }\n        };\n    }\n    function asWorkerPosition(position) {\n        return { line: position.line, character: position.character };\n    }\n    function asPosition(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return { line: value.line, character: value.character };\n    }\n    function asPositions(value) {\n        let result = [];\n        for (let elem of value) {\n            result.push(asPosition(elem));\n        }\n        return result;\n    }\n    function isInsertReplace(value) {\n        const candidate = value;\n        return candidate && !!candidate.inserting && !!candidate.replacing;\n    }\n    function asRange(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        // The LSP has no support yet for insert replace. So this can never happen.\n        if (isInsertReplace(value)) {\n            throw new Error(`Receving unknown insert replace range.`);\n        }\n        return { start: asPosition(value.start), end: asPosition(value.end) };\n    }\n    function asLocation(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return proto.Location.create(asUri(value.uri), asRange(value.range));\n    }\n    function asDiagnosticSeverity(value) {\n        switch (value) {\n            case code.DiagnosticSeverity.Error:\n                return proto.DiagnosticSeverity.Error;\n            case code.DiagnosticSeverity.Warning:\n                return proto.DiagnosticSeverity.Warning;\n            case code.DiagnosticSeverity.Information:\n                return proto.DiagnosticSeverity.Information;\n            case code.DiagnosticSeverity.Hint:\n                return proto.DiagnosticSeverity.Hint;\n        }\n    }\n    function asDiagnosticTags(tags) {\n        if (!tags) {\n            return undefined;\n        }\n        let result = [];\n        for (let tag of tags) {\n            let converted = asDiagnosticTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length > 0 ? result : undefined;\n    }\n    function asDiagnosticTag(tag) {\n        switch (tag) {\n            case code.DiagnosticTag.Unnecessary:\n                return proto.DiagnosticTag.Unnecessary;\n            case code.DiagnosticTag.Deprecated:\n                return proto.DiagnosticTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asRelatedInformation(item) {\n        return {\n            message: item.message,\n            location: asLocation(item.location)\n        };\n    }\n    function asRelatedInformations(items) {\n        return items.map(asRelatedInformation);\n    }\n    function asDiagnostic(item) {\n        let result = proto.Diagnostic.create(asRange(item.range), item.message);\n        if (Is.number(item.severity)) {\n            result.severity = asDiagnosticSeverity(item.severity);\n        }\n        if (Is.number(item.code) || Is.string(item.code)) {\n            result.code = item.code;\n        }\n        if (Array.isArray(item.tags)) {\n            result.tags = asDiagnosticTags(item.tags);\n        }\n        if (item.relatedInformation) {\n            result.relatedInformation = asRelatedInformations(item.relatedInformation);\n        }\n        if (item.source) {\n            result.source = item.source;\n        }\n        return result;\n    }\n    function asDiagnostics(items) {\n        if (items === undefined || items === null) {\n            return items;\n        }\n        return items.map(asDiagnostic);\n    }\n    function asDocumentation(format, documentation) {\n        switch (format) {\n            case '$string':\n                return documentation;\n            case proto.MarkupKind.PlainText:\n                return { kind: format, value: documentation };\n            case proto.MarkupKind.Markdown:\n                return { kind: format, value: documentation.value };\n            default:\n                return `Unsupported Markup content received. Kind is: ${format}`;\n        }\n    }\n    function asCompletionItemTag(tag) {\n        switch (tag) {\n            case code.CompletionItemTag.Deprecated:\n                return proto.CompletionItemTag.Deprecated;\n        }\n        return undefined;\n    }\n    function asCompletionItemTags(tags) {\n        if (tags === undefined) {\n            return tags;\n        }\n        const result = [];\n        for (let tag of tags) {\n            const converted = asCompletionItemTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result;\n    }\n    function asCompletionItemKind(value, original) {\n        if (original !== undefined) {\n            return original;\n        }\n        return value + 1;\n    }\n    function asCompletionItem(item) {\n        let result = { label: item.label };\n        let protocolItem = item instanceof protocolCompletionItem_1.default ? item : undefined;\n        if (item.detail) {\n            result.detail = item.detail;\n        }\n        // We only send items back we created. So this can't be something else than\n        // a string right now.\n        if (item.documentation) {\n            if (!protocolItem || protocolItem.documentationFormat === '$string') {\n                result.documentation = item.documentation;\n            }\n            else {\n                result.documentation = asDocumentation(protocolItem.documentationFormat, item.documentation);\n            }\n        }\n        if (item.filterText) {\n            result.filterText = item.filterText;\n        }\n        fillPrimaryInsertText(result, item);\n        if (Is.number(item.kind)) {\n            result.kind = asCompletionItemKind(item.kind, protocolItem && protocolItem.originalItemKind);\n        }\n        if (item.sortText) {\n            result.sortText = item.sortText;\n        }\n        if (item.additionalTextEdits) {\n            result.additionalTextEdits = asTextEdits(item.additionalTextEdits);\n        }\n        if (item.commitCharacters) {\n            result.commitCharacters = item.commitCharacters.slice();\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.preselect === true || item.preselect === false) {\n            result.preselect = item.preselect;\n        }\n        const tags = asCompletionItemTags(item.tags);\n        if (protocolItem) {\n            if (protocolItem.data !== undefined) {\n                result.data = protocolItem.data;\n            }\n            if (protocolItem.deprecated === true || protocolItem.deprecated === false) {\n                if (protocolItem.deprecated === true && tags !== undefined && tags.length > 0) {\n                    const index = tags.indexOf(code.CompletionItemTag.Deprecated);\n                    if (index !== -1) {\n                        tags.splice(index, 1);\n                    }\n                }\n                result.deprecated = protocolItem.deprecated;\n            }\n        }\n        if (tags !== undefined && tags.length > 0) {\n            result.tags = tags;\n        }\n        return result;\n    }\n    function fillPrimaryInsertText(target, source) {\n        let format = proto.InsertTextFormat.PlainText;\n        let text = undefined;\n        let range = undefined;\n        if (source.textEdit) {\n            text = source.textEdit.newText;\n            range = asRange(source.textEdit.range);\n        }\n        else if (source.insertText instanceof code.SnippetString) {\n            format = proto.InsertTextFormat.Snippet;\n            text = source.insertText.value;\n        }\n        else {\n            text = source.insertText;\n        }\n        if (source.range) {\n            range = asRange(source.range);\n        }\n        target.insertTextFormat = format;\n        if (source.fromEdit && text !== undefined && range !== undefined) {\n            target.textEdit = { newText: text, range: range };\n        }\n        else {\n            target.insertText = text;\n        }\n    }\n    function asTextEdit(edit) {\n        return { range: asRange(edit.range), newText: edit.newText };\n    }\n    function asTextEdits(edits) {\n        if (edits === undefined || edits === null) {\n            return edits;\n        }\n        return edits.map(asTextEdit);\n    }\n    function asSymbolKind(item) {\n        if (item <= code.SymbolKind.TypeParameter) {\n            // Symbol kind is one based in the protocol and zero based in code.\n            return (item + 1);\n        }\n        return proto.SymbolKind.Property;\n    }\n    function asSymbolTag(item) {\n        return item;\n    }\n    function asSymbolTags(items) {\n        return items.map(asSymbolTag);\n    }\n    function asReferenceParams(textDocument, position, options) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: { includeDeclaration: options.includeDeclaration }\n        };\n    }\n    function asCodeActionContext(context) {\n        if (context === undefined || context === null) {\n            return context;\n        }\n        let only;\n        if (context.only && Is.string(context.only.value)) {\n            only = [context.only.value];\n        }\n        return proto.CodeActionContext.create(asDiagnostics(context.diagnostics), only);\n    }\n    function asCommand(item) {\n        let result = proto.Command.create(item.title, item.command);\n        if (item.arguments) {\n            result.arguments = item.arguments;\n        }\n        return result;\n    }\n    function asCodeLens(item) {\n        let result = proto.CodeLens.create(asRange(item.range));\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item instanceof protocolCodeLens_1.default) {\n            if (item.data) {\n                result.data = item.data;\n            }\n        }\n        return result;\n    }\n    function asFormattingOptions(item) {\n        return { tabSize: item.tabSize, insertSpaces: item.insertSpaces };\n    }\n    function asDocumentSymbolParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asCodeLensParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asDocumentLink(item) {\n        let result = proto.DocumentLink.create(asRange(item.range));\n        if (item.target) {\n            result.target = asUri(item.target);\n        }\n        if (item.tooltip !== undefined) {\n            result.tooltip = item.tooltip;\n        }\n        let protocolItem = item instanceof protocolDocumentLink_1.default ? item : undefined;\n        if (protocolItem && protocolItem.data) {\n            result.data = protocolItem.data;\n        }\n        return result;\n    }\n    function asDocumentLinkParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    return {\n        asUri,\n        asTextDocumentIdentifier,\n        asVersionedTextDocumentIdentifier,\n        asOpenTextDocumentParams,\n        asChangeTextDocumentParams,\n        asCloseTextDocumentParams,\n        asSaveTextDocumentParams,\n        asWillSaveTextDocumentParams,\n        asTextDocumentPositionParams,\n        asCompletionParams,\n        asSignatureHelpParams,\n        asWorkerPosition,\n        asRange,\n        asPosition,\n        asPositions,\n        asLocation,\n        asDiagnosticSeverity,\n        asDiagnosticTag,\n        asDiagnostic,\n        asDiagnostics,\n        asCompletionItem,\n        asTextEdit,\n        asSymbolKind,\n        asSymbolTag,\n        asSymbolTags,\n        asReferenceParams,\n        asCodeActionContext,\n        asCommand,\n        asCodeLens,\n        asFormattingOptions,\n        asDocumentSymbolParams,\n        asCodeLensParams,\n        asDocumentLink,\n        asDocumentLinkParams\n    };\n}\nexports.createConverter = createConverter;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nconst ls = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst protocolCompletionItem_1 = require(\"./protocolCompletionItem\");\nconst protocolCodeLens_1 = require(\"./protocolCodeLens\");\nconst protocolDocumentLink_1 = require(\"./protocolDocumentLink\");\nvar CodeBlock;\n(function (CodeBlock) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.string(candidate.language) && Is.string(candidate.value);\n    }\n    CodeBlock.is = is;\n})(CodeBlock || (CodeBlock = {}));\nfunction createConverter(uriConverter) {\n    const nullConverter = (value) => code.Uri.parse(value);\n    const _uriConverter = uriConverter || nullConverter;\n    function asUri(value) {\n        return _uriConverter(value);\n    }\n    function asDiagnostics(diagnostics) {\n        return diagnostics.map(asDiagnostic);\n    }\n    function asDiagnostic(diagnostic) {\n        let result = new code.Diagnostic(asRange(diagnostic.range), diagnostic.message, asDiagnosticSeverity(diagnostic.severity));\n        if (Is.number(diagnostic.code) || Is.string(diagnostic.code)) {\n            result.code = diagnostic.code;\n        }\n        if (diagnostic.source) {\n            result.source = diagnostic.source;\n        }\n        if (diagnostic.relatedInformation) {\n            result.relatedInformation = asRelatedInformation(diagnostic.relatedInformation);\n        }\n        if (Array.isArray(diagnostic.tags)) {\n            result.tags = asDiagnosticTags(diagnostic.tags);\n        }\n        return result;\n    }\n    function asRelatedInformation(relatedInformation) {\n        return relatedInformation.map(asDiagnosticRelatedInformation);\n    }\n    function asDiagnosticRelatedInformation(information) {\n        return new code.DiagnosticRelatedInformation(asLocation(information.location), information.message);\n    }\n    function asDiagnosticTags(tags) {\n        if (!tags) {\n            return undefined;\n        }\n        let result = [];\n        for (let tag of tags) {\n            let converted = asDiagnosticTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length > 0 ? result : undefined;\n    }\n    function asDiagnosticTag(tag) {\n        switch (tag) {\n            case ls.DiagnosticTag.Unnecessary:\n                return code.DiagnosticTag.Unnecessary;\n            case ls.DiagnosticTag.Deprecated:\n                return code.DiagnosticTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asPosition(value) {\n        if (!value) {\n            return undefined;\n        }\n        return new code.Position(value.line, value.character);\n    }\n    function asRange(value) {\n        if (!value) {\n            return undefined;\n        }\n        return new code.Range(asPosition(value.start), asPosition(value.end));\n    }\n    function asRanges(value) {\n        return value.map(value => asRange(value));\n    }\n    function asDiagnosticSeverity(value) {\n        if (value === undefined || value === null) {\n            return code.DiagnosticSeverity.Error;\n        }\n        switch (value) {\n            case ls.DiagnosticSeverity.Error:\n                return code.DiagnosticSeverity.Error;\n            case ls.DiagnosticSeverity.Warning:\n                return code.DiagnosticSeverity.Warning;\n            case ls.DiagnosticSeverity.Information:\n                return code.DiagnosticSeverity.Information;\n            case ls.DiagnosticSeverity.Hint:\n                return code.DiagnosticSeverity.Hint;\n        }\n        return code.DiagnosticSeverity.Error;\n    }\n    function asHoverContent(value) {\n        if (Is.string(value)) {\n            return new code.MarkdownString(value);\n        }\n        else if (CodeBlock.is(value)) {\n            let result = new code.MarkdownString();\n            return result.appendCodeblock(value.value, value.language);\n        }\n        else if (Array.isArray(value)) {\n            let result = [];\n            for (let element of value) {\n                let item = new code.MarkdownString();\n                if (CodeBlock.is(element)) {\n                    item.appendCodeblock(element.value, element.language);\n                }\n                else {\n                    item.appendMarkdown(element);\n                }\n                result.push(item);\n            }\n            return result;\n        }\n        else {\n            let result;\n            switch (value.kind) {\n                case ls.MarkupKind.Markdown:\n                    return new code.MarkdownString(value.value);\n                case ls.MarkupKind.PlainText:\n                    result = new code.MarkdownString();\n                    result.appendText(value.value);\n                    return result;\n                default:\n                    result = new code.MarkdownString();\n                    result.appendText(`Unsupported Markup content received. Kind is: ${value.kind}`);\n                    return result;\n            }\n        }\n    }\n    function asDocumentation(value) {\n        if (Is.string(value)) {\n            return value;\n        }\n        else {\n            switch (value.kind) {\n                case ls.MarkupKind.Markdown:\n                    return new code.MarkdownString(value.value);\n                case ls.MarkupKind.PlainText:\n                    return value.value;\n                default:\n                    return `Unsupported Markup content received. Kind is: ${value.kind}`;\n            }\n        }\n    }\n    function asHover(hover) {\n        if (!hover) {\n            return undefined;\n        }\n        return new code.Hover(asHoverContent(hover.contents), asRange(hover.range));\n    }\n    function asCompletionResult(result) {\n        if (!result) {\n            return undefined;\n        }\n        if (Array.isArray(result)) {\n            let items = result;\n            return items.map(asCompletionItem);\n        }\n        let list = result;\n        return new code.CompletionList(list.items.map(asCompletionItem), list.isIncomplete);\n    }\n    function asCompletionItemKind(value) {\n        // Protocol item kind is 1 based, codes item kind is zero based.\n        if (ls.CompletionItemKind.Text <= value && value <= ls.CompletionItemKind.TypeParameter) {\n            return [value - 1, undefined];\n        }\n        return [code.CompletionItemKind.Text, value];\n    }\n    function asCompletionItemTag(tag) {\n        switch (tag) {\n            case ls.CompletionItemTag.Deprecated:\n                return code.CompletionItemTag.Deprecated;\n        }\n        return undefined;\n    }\n    function asCompletionItemTags(tags) {\n        if (tags === undefined || tags === null) {\n            return [];\n        }\n        const result = [];\n        for (let tag of tags) {\n            const converted = asCompletionItemTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result;\n    }\n    function asCompletionItem(item) {\n        let tags = asCompletionItemTags(item.tags);\n        let result = new protocolCompletionItem_1.default(item.label);\n        if (item.detail) {\n            result.detail = item.detail;\n        }\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n            result.documentationFormat = Is.string(item.documentation) ? '$string' : item.documentation.kind;\n        }\n        if (item.filterText) {\n            result.filterText = item.filterText;\n        }\n        let insertText = asCompletionInsertText(item);\n        if (insertText) {\n            result.insertText = insertText.text;\n            result.range = insertText.range;\n            result.fromEdit = insertText.fromEdit;\n        }\n        if (Is.number(item.kind)) {\n            let [itemKind, original] = asCompletionItemKind(item.kind);\n            result.kind = itemKind;\n            if (original) {\n                result.originalItemKind = original;\n            }\n        }\n        if (item.sortText) {\n            result.sortText = item.sortText;\n        }\n        if (item.additionalTextEdits) {\n            result.additionalTextEdits = asTextEdits(item.additionalTextEdits);\n        }\n        if (Is.stringArray(item.commitCharacters)) {\n            result.commitCharacters = item.commitCharacters.slice();\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.deprecated === true || item.deprecated === false) {\n            result.deprecated = item.deprecated;\n            if (item.deprecated === true) {\n                tags.push(code.CompletionItemTag.Deprecated);\n            }\n        }\n        if (item.preselect === true || item.preselect === false) {\n            result.preselect = item.preselect;\n        }\n        if (item.data !== undefined) {\n            result.data = item.data;\n        }\n        if (tags.length > 0) {\n            result.tags = tags;\n        }\n        return result;\n    }\n    function asCompletionInsertText(item) {\n        if (item.textEdit) {\n            if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {\n                return { text: new code.SnippetString(item.textEdit.newText), range: asRange(item.textEdit.range), fromEdit: true };\n            }\n            else {\n                return { text: item.textEdit.newText, range: asRange(item.textEdit.range), fromEdit: true };\n            }\n        }\n        else if (item.insertText) {\n            if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {\n                return { text: new code.SnippetString(item.insertText), fromEdit: false };\n            }\n            else {\n                return { text: item.insertText, fromEdit: false };\n            }\n        }\n        else {\n            return undefined;\n        }\n    }\n    function asTextEdit(edit) {\n        if (!edit) {\n            return undefined;\n        }\n        return new code.TextEdit(asRange(edit.range), edit.newText);\n    }\n    function asTextEdits(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map(asTextEdit);\n    }\n    function asSignatureHelp(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new code.SignatureHelp();\n        if (Is.number(item.activeSignature)) {\n            result.activeSignature = item.activeSignature;\n        }\n        else {\n            // activeSignature was optional in the past\n            result.activeSignature = 0;\n        }\n        if (Is.number(item.activeParameter)) {\n            result.activeParameter = item.activeParameter;\n        }\n        else {\n            // activeParameter was optional in the past\n            result.activeParameter = 0;\n        }\n        if (item.signatures) {\n            result.signatures = asSignatureInformations(item.signatures);\n        }\n        return result;\n    }\n    function asSignatureInformations(items) {\n        return items.map(asSignatureInformation);\n    }\n    function asSignatureInformation(item) {\n        let result = new code.SignatureInformation(item.label);\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n        }\n        if (item.parameters) {\n            result.parameters = asParameterInformations(item.parameters);\n        }\n        return result;\n    }\n    function asParameterInformations(item) {\n        return item.map(asParameterInformation);\n    }\n    function asParameterInformation(item) {\n        let result = new code.ParameterInformation(item.label);\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n        }\n        return result;\n    }\n    function asLocation(item) {\n        if (!item) {\n            return undefined;\n        }\n        return new code.Location(_uriConverter(item.uri), asRange(item.range));\n    }\n    function asDeclarationResult(item) {\n        if (!item) {\n            return undefined;\n        }\n        return asLocationResult(item);\n    }\n    function asDefinitionResult(item) {\n        if (!item) {\n            return undefined;\n        }\n        return asLocationResult(item);\n    }\n    function asLocationLink(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = {\n            targetUri: _uriConverter(item.targetUri),\n            targetRange: asRange(item.targetSelectionRange),\n            originSelectionRange: asRange(item.originSelectionRange),\n            targetSelectionRange: asRange(item.targetSelectionRange)\n        };\n        if (!result.targetSelectionRange) {\n            throw new Error(`targetSelectionRange must not be undefined or null`);\n        }\n        return result;\n    }\n    function asLocationResult(item) {\n        if (!item) {\n            return undefined;\n        }\n        if (Is.array(item)) {\n            if (item.length === 0) {\n                return [];\n            }\n            else if (ls.LocationLink.is(item[0])) {\n                let links = item;\n                return links.map((link) => asLocationLink(link));\n            }\n            else {\n                let locations = item;\n                return locations.map((location) => asLocation(location));\n            }\n        }\n        else if (ls.LocationLink.is(item)) {\n            return [asLocationLink(item)];\n        }\n        else {\n            return asLocation(item);\n        }\n    }\n    function asReferences(values) {\n        if (!values) {\n            return undefined;\n        }\n        return values.map(location => asLocation(location));\n    }\n    function asDocumentHighlights(values) {\n        if (!values) {\n            return undefined;\n        }\n        return values.map(asDocumentHighlight);\n    }\n    function asDocumentHighlight(item) {\n        let result = new code.DocumentHighlight(asRange(item.range));\n        if (Is.number(item.kind)) {\n            result.kind = asDocumentHighlightKind(item.kind);\n        }\n        return result;\n    }\n    function asDocumentHighlightKind(item) {\n        switch (item) {\n            case ls.DocumentHighlightKind.Text:\n                return code.DocumentHighlightKind.Text;\n            case ls.DocumentHighlightKind.Read:\n                return code.DocumentHighlightKind.Read;\n            case ls.DocumentHighlightKind.Write:\n                return code.DocumentHighlightKind.Write;\n        }\n        return code.DocumentHighlightKind.Text;\n    }\n    function asSymbolInformations(values, uri) {\n        if (!values) {\n            return undefined;\n        }\n        return values.map(information => asSymbolInformation(information, uri));\n    }\n    function asSymbolKind(item) {\n        if (item <= ls.SymbolKind.TypeParameter) {\n            // Symbol kind is one based in the protocol and zero based in code.\n            return item - 1;\n        }\n        return code.SymbolKind.Property;\n    }\n    function asSymbolTag(value) {\n        return value;\n    }\n    function asSymbolTags(items) {\n        if (items === undefined || items === null) {\n            return undefined;\n        }\n        return items.map(asSymbolTag);\n    }\n    function asSymbolInformation(item, uri) {\n        // Symbol kind is one based in the protocol and zero based in code.\n        let result = new code.SymbolInformation(item.name, asSymbolKind(item.kind), asRange(item.location.range), item.location.uri ? _uriConverter(item.location.uri) : uri);\n        if (item.containerName) {\n            result.containerName = item.containerName;\n        }\n        return result;\n    }\n    function asDocumentSymbols(values) {\n        if (values === undefined || values === null) {\n            return undefined;\n        }\n        return values.map(asDocumentSymbol);\n    }\n    function asDocumentSymbol(value) {\n        let result = new code.DocumentSymbol(value.name, value.detail || '', asSymbolKind(value.kind), asRange(value.range), asRange(value.selectionRange));\n        if (value.children !== undefined && value.children.length > 0) {\n            let children = [];\n            for (let child of value.children) {\n                children.push(asDocumentSymbol(child));\n            }\n            result.children = children;\n        }\n        return result;\n    }\n    function asCommand(item) {\n        let result = { title: item.title, command: item.command };\n        if (item.arguments) {\n            result.arguments = item.arguments;\n        }\n        return result;\n    }\n    function asCommands(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map(asCommand);\n    }\n    const kindMapping = new Map();\n    kindMapping.set(ls.CodeActionKind.Empty, code.CodeActionKind.Empty);\n    kindMapping.set(ls.CodeActionKind.QuickFix, code.CodeActionKind.QuickFix);\n    kindMapping.set(ls.CodeActionKind.Refactor, code.CodeActionKind.Refactor);\n    kindMapping.set(ls.CodeActionKind.RefactorExtract, code.CodeActionKind.RefactorExtract);\n    kindMapping.set(ls.CodeActionKind.RefactorInline, code.CodeActionKind.RefactorInline);\n    kindMapping.set(ls.CodeActionKind.RefactorRewrite, code.CodeActionKind.RefactorRewrite);\n    kindMapping.set(ls.CodeActionKind.Source, code.CodeActionKind.Source);\n    kindMapping.set(ls.CodeActionKind.SourceOrganizeImports, code.CodeActionKind.SourceOrganizeImports);\n    function asCodeActionKind(item) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        let result = kindMapping.get(item);\n        if (result) {\n            return result;\n        }\n        let parts = item.split('.');\n        result = code.CodeActionKind.Empty;\n        for (let part of parts) {\n            result = result.append(part);\n        }\n        return result;\n    }\n    function asCodeActionKinds(items) {\n        if (items === undefined || items === null) {\n            return undefined;\n        }\n        return items.map(kind => asCodeActionKind(kind));\n    }\n    function asCodeAction(item) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        let result = new code.CodeAction(item.title);\n        if (item.kind !== undefined) {\n            result.kind = asCodeActionKind(item.kind);\n        }\n        if (item.diagnostics) {\n            result.diagnostics = asDiagnostics(item.diagnostics);\n        }\n        if (item.edit) {\n            result.edit = asWorkspaceEdit(item.edit);\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.isPreferred !== undefined) {\n            result.isPreferred = item.isPreferred;\n        }\n        return result;\n    }\n    function asCodeLens(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new protocolCodeLens_1.default(asRange(item.range));\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.data !== undefined && item.data !== null) {\n            result.data = item.data;\n        }\n        return result;\n    }\n    function asCodeLenses(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map((codeLens) => asCodeLens(codeLens));\n    }\n    function asWorkspaceEdit(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new code.WorkspaceEdit();\n        if (item.documentChanges) {\n            item.documentChanges.forEach(change => {\n                if (ls.CreateFile.is(change)) {\n                    result.createFile(_uriConverter(change.uri), change.options);\n                }\n                else if (ls.RenameFile.is(change)) {\n                    result.renameFile(_uriConverter(change.oldUri), _uriConverter(change.newUri), change.options);\n                }\n                else if (ls.DeleteFile.is(change)) {\n                    result.deleteFile(_uriConverter(change.uri), change.options);\n                }\n                else if (ls.TextDocumentEdit.is(change)) {\n                    result.set(_uriConverter(change.textDocument.uri), asTextEdits(change.edits));\n                }\n                else {\n                    console.error(`Unknown workspace edit change received:\\n${JSON.stringify(change, undefined, 4)}`);\n                }\n            });\n        }\n        else if (item.changes) {\n            Object.keys(item.changes).forEach(key => {\n                result.set(_uriConverter(key), asTextEdits(item.changes[key]));\n            });\n        }\n        return result;\n    }\n    function asDocumentLink(item) {\n        let range = asRange(item.range);\n        let target = item.target ? asUri(item.target) : undefined;\n        // target must be optional in DocumentLink\n        let link = new protocolDocumentLink_1.default(range, target);\n        if (item.tooltip !== undefined) {\n            link.tooltip = item.tooltip;\n        }\n        if (item.data !== undefined && item.data !== null) {\n            link.data = item.data;\n        }\n        return link;\n    }\n    function asDocumentLinks(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map(asDocumentLink);\n    }\n    function asColor(color) {\n        return new code.Color(color.red, color.green, color.blue, color.alpha);\n    }\n    function asColorInformation(ci) {\n        return new code.ColorInformation(asRange(ci.range), asColor(ci.color));\n    }\n    function asColorInformations(colorInformation) {\n        if (Array.isArray(colorInformation)) {\n            return colorInformation.map(asColorInformation);\n        }\n        return undefined;\n    }\n    function asColorPresentation(cp) {\n        let presentation = new code.ColorPresentation(cp.label);\n        presentation.additionalTextEdits = asTextEdits(cp.additionalTextEdits);\n        if (cp.textEdit) {\n            presentation.textEdit = asTextEdit(cp.textEdit);\n        }\n        return presentation;\n    }\n    function asColorPresentations(colorPresentations) {\n        if (Array.isArray(colorPresentations)) {\n            return colorPresentations.map(asColorPresentation);\n        }\n        return undefined;\n    }\n    function asFoldingRangeKind(kind) {\n        if (kind) {\n            switch (kind) {\n                case ls.FoldingRangeKind.Comment:\n                    return code.FoldingRangeKind.Comment;\n                case ls.FoldingRangeKind.Imports:\n                    return code.FoldingRangeKind.Imports;\n                case ls.FoldingRangeKind.Region:\n                    return code.FoldingRangeKind.Region;\n            }\n        }\n        return undefined;\n    }\n    function asFoldingRange(r) {\n        return new code.FoldingRange(r.startLine, r.endLine, asFoldingRangeKind(r.kind));\n    }\n    function asFoldingRanges(foldingRanges) {\n        if (Array.isArray(foldingRanges)) {\n            return foldingRanges.map(asFoldingRange);\n        }\n        return undefined;\n    }\n    function asSelectionRange(selectionRange) {\n        return new code.SelectionRange(asRange(selectionRange.range), selectionRange.parent ? asSelectionRange(selectionRange.parent) : undefined);\n    }\n    function asSelectionRanges(selectionRanges) {\n        if (!Array.isArray(selectionRanges)) {\n            return [];\n        }\n        let result = [];\n        for (let range of selectionRanges) {\n            result.push(asSelectionRange(range));\n        }\n        return result;\n    }\n    return {\n        asUri,\n        asDiagnostics,\n        asDiagnostic,\n        asRange,\n        asRanges,\n        asPosition,\n        asDiagnosticSeverity,\n        asDiagnosticTag,\n        asHover,\n        asCompletionResult,\n        asCompletionItem,\n        asTextEdit,\n        asTextEdits,\n        asSignatureHelp,\n        asSignatureInformations,\n        asSignatureInformation,\n        asParameterInformations,\n        asParameterInformation,\n        asDeclarationResult,\n        asDefinitionResult,\n        asLocation,\n        asReferences,\n        asDocumentHighlights,\n        asDocumentHighlight,\n        asDocumentHighlightKind,\n        asSymbolKind,\n        asSymbolTag,\n        asSymbolTags,\n        asSymbolInformations,\n        asSymbolInformation,\n        asDocumentSymbols,\n        asDocumentSymbol,\n        asCommand,\n        asCommands,\n        asCodeAction,\n        asCodeActionKind,\n        asCodeActionKinds,\n        asCodeLens,\n        asCodeLenses,\n        asWorkspaceEdit,\n        asDocumentLink,\n        asDocumentLinks,\n        asFoldingRangeKind,\n        asFoldingRange,\n        asFoldingRanges,\n        asColor,\n        asColorInformation,\n        asColorInformations,\n        asColorPresentation,\n        asColorPresentations,\n        asSelectionRange,\n        asSelectionRanges\n    };\n}\nexports.createConverter = createConverter;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Delayer {\n    constructor(defaultDelay) {\n        this.defaultDelay = defaultDelay;\n        this.timeout = undefined;\n        this.completionPromise = undefined;\n        this.onSuccess = undefined;\n        this.task = undefined;\n    }\n    trigger(task, delay = this.defaultDelay) {\n        this.task = task;\n        if (delay >= 0) {\n            this.cancelTimeout();\n        }\n        if (!this.completionPromise) {\n            this.completionPromise = new Promise((resolve) => {\n                this.onSuccess = resolve;\n            }).then(() => {\n                this.completionPromise = undefined;\n                this.onSuccess = undefined;\n                var result = this.task();\n                this.task = undefined;\n                return result;\n            });\n        }\n        if (delay >= 0 || this.timeout === void 0) {\n            this.timeout = setTimeout(() => {\n                this.timeout = undefined;\n                this.onSuccess(undefined);\n            }, delay >= 0 ? delay : this.defaultDelay);\n        }\n        return this.completionPromise;\n    }\n    forceDelivery() {\n        if (!this.completionPromise) {\n            return undefined;\n        }\n        this.cancelTimeout();\n        let result = this.task();\n        this.completionPromise = undefined;\n        this.onSuccess = undefined;\n        this.task = undefined;\n        return result;\n    }\n    isTriggered() {\n        return this.timeout !== void 0;\n    }\n    cancel() {\n        this.cancelTimeout();\n        this.completionPromise = undefined;\n    }\n    cancelTimeout() {\n        if (this.timeout !== void 0) {\n            clearTimeout(this.timeout);\n            this.timeout = undefined;\n        }\n    }\n}\nexports.Delayer = Delayer;\n", "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValueUUID {\n    constructor(_value) {\n        this._value = _value;\n        // empty\n    }\n    asHex() {\n        return this._value;\n    }\n    equals(other) {\n        return this.asHex() === other.asHex();\n    }\n}\nclass V4UUID extends ValueUUID {\n    constructor() {\n        super([\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            '4',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._oneOf(V4UUID._timeHighBits),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n        ].join(''));\n    }\n    static _oneOf(array) {\n        return array[Math.floor(array.length * Math.random())];\n    }\n    static _randomHex() {\n        return V4UUID._oneOf(V4UUID._chars);\n    }\n}\nV4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\nV4UUID._timeHighBits = ['8', '9', 'a', 'b'];\n/**\n * An empty UUID that contains only zeros.\n */\nexports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');\nfunction v4() {\n    return new V4UUID();\n}\nexports.v4 = v4;\nconst _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nfunction isUUID(value) {\n    return _UUIDPattern.test(value);\n}\nexports.isUUID = isUUID;\n/**\n * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.\n * @param value A uuid string.\n */\nfunction parse(value) {\n    if (!isUUID(value)) {\n        throw new Error('invalid uuid');\n    }\n    return new ValueUUID(value);\n}\nexports.parse = parse;\nfunction generateUuid() {\n    return v4().asHex();\n}\nexports.generateUuid = generateUuid;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nclass ProgressPart {\n    constructor(_client, _token) {\n        this._client = _client;\n        this._token = _token;\n        this._reported = 0;\n        this._disposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {\n            switch (value.kind) {\n                case 'begin':\n                    this.begin(value);\n                    break;\n                case 'report':\n                    this.report(value);\n                    break;\n                case 'end':\n                    this.done();\n                    break;\n            }\n        });\n    }\n    begin(params) {\n        let location = params.cancellable ? vscode_1.ProgressLocation.Notification : vscode_1.ProgressLocation.Window;\n        vscode_1.window.withProgress({ location, cancellable: params.cancellable, title: params.title }, async (progress, cancellationToken) => {\n            this._progress = progress;\n            this._infinite = params.percentage === undefined;\n            this._cancellationToken = cancellationToken;\n            this._cancellationToken.onCancellationRequested(() => {\n                this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, { token: this._token });\n            });\n            this.report(params);\n            return new Promise((resolve, reject) => {\n                this._resolve = resolve;\n                this._reject = reject;\n            });\n        });\n    }\n    report(params) {\n        if (this._infinite && Is.string(params.message)) {\n            this._progress.report({ message: params.message });\n        }\n        else if (Is.number(params.percentage)) {\n            let percentage = Math.max(0, Math.min(params.percentage, 100));\n            let delta = Math.max(0, percentage - this._reported);\n            this._progress.report({ message: params.message, increment: delta });\n            this._reported += delta;\n        }\n    }\n    cancel() {\n        if (this._disposable) {\n            this._disposable.dispose();\n            this._disposable = undefined;\n        }\n        if (this._reject) {\n            this._reject();\n            this._resolve = undefined;\n            this._reject = undefined;\n        }\n    }\n    done() {\n        if (this._disposable) {\n            this._disposable.dispose();\n            this._disposable = undefined;\n        }\n        if (this._resolve) {\n            this._resolve();\n            this._resolve = undefined;\n            this._reject = undefined;\n        }\n    }\n}\nexports.ProgressPart = ProgressPart;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst c2p = require(\"./codeConverter\");\nconst p2c = require(\"./protocolConverter\");\nconst Is = require(\"./utils/is\");\nconst async_1 = require(\"./utils/async\");\nconst UUID = require(\"./utils/uuid\");\nconst progressPart_1 = require(\"./progressPart\");\n__export(require(\"vscode-languageserver-protocol\"));\nclass ConsoleLogger {\n    error(message) {\n        console.error(message);\n    }\n    warn(message) {\n        console.warn(message);\n    }\n    info(message) {\n        console.info(message);\n    }\n    log(message) {\n        console.log(message);\n    }\n}\nfunction createConnection(input, output, errorHandler, closeHandler) {\n    let logger = new ConsoleLogger();\n    let connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger);\n    connection.onError((data) => { errorHandler(data[0], data[1], data[2]); });\n    connection.onClose(closeHandler);\n    let result = {\n        listen: () => connection.listen(),\n        sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),\n        onRequest: (type, handler) => connection.onRequest(Is.string(type) ? type : type.method, handler),\n        sendNotification: (type, params) => connection.sendNotification(Is.string(type) ? type : type.method, params),\n        onNotification: (type, handler) => connection.onNotification(Is.string(type) ? type : type.method, handler),\n        onProgress: connection.onProgress,\n        sendProgress: connection.sendProgress,\n        trace: (value, tracer, sendNotificationOrTraceOptions) => {\n            const defaultTraceOptions = {\n                sendNotification: false,\n                traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text\n            };\n            if (sendNotificationOrTraceOptions === void 0) {\n                connection.trace(value, tracer, defaultTraceOptions);\n            }\n            else if (Is.boolean(sendNotificationOrTraceOptions)) {\n                connection.trace(value, tracer, sendNotificationOrTraceOptions);\n            }\n            else {\n                connection.trace(value, tracer, sendNotificationOrTraceOptions);\n            }\n        },\n        initialize: (params) => connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params),\n        shutdown: () => connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, undefined),\n        exit: () => connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type),\n        onLogMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, handler),\n        onShowMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, handler),\n        onTelemetry: (handler) => connection.onNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, handler),\n        didChangeConfiguration: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, params),\n        didChangeWatchedFiles: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, params),\n        didOpenTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, params),\n        didChangeTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params),\n        didCloseTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, params),\n        didSaveTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, params),\n        onDiagnostics: (handler) => connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, handler),\n        dispose: () => connection.dispose()\n    };\n    return result;\n}\n/**\n * An action to be performed when the connection is producing errors.\n */\nvar ErrorAction;\n(function (ErrorAction) {\n    /**\n     * Continue running the server.\n     */\n    ErrorAction[ErrorAction[\"Continue\"] = 1] = \"Continue\";\n    /**\n     * Shutdown the server.\n     */\n    ErrorAction[ErrorAction[\"Shutdown\"] = 2] = \"Shutdown\";\n})(ErrorAction = exports.ErrorAction || (exports.ErrorAction = {}));\n/**\n * An action to be performed when the connection to a server got closed.\n */\nvar CloseAction;\n(function (CloseAction) {\n    /**\n     * Don't restart the server. The connection stays closed.\n     */\n    CloseAction[CloseAction[\"DoNotRestart\"] = 1] = \"DoNotRestart\";\n    /**\n     * Restart the server.\n     */\n    CloseAction[CloseAction[\"Restart\"] = 2] = \"Restart\";\n})(CloseAction = exports.CloseAction || (exports.CloseAction = {}));\nclass DefaultErrorHandler {\n    constructor(name) {\n        this.name = name;\n        this.restarts = [];\n    }\n    error(_error, _message, count) {\n        if (count && count <= 3) {\n            return ErrorAction.Continue;\n        }\n        return ErrorAction.Shutdown;\n    }\n    closed() {\n        this.restarts.push(Date.now());\n        if (this.restarts.length < 5) {\n            return CloseAction.Restart;\n        }\n        else {\n            let diff = this.restarts[this.restarts.length - 1] - this.restarts[0];\n            if (diff <= 3 * 60 * 1000) {\n                vscode_1.window.showErrorMessage(`The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`);\n                return CloseAction.DoNotRestart;\n            }\n            else {\n                this.restarts.shift();\n                return CloseAction.Restart;\n            }\n        }\n    }\n}\nvar RevealOutputChannelOn;\n(function (RevealOutputChannelOn) {\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Info\"] = 1] = \"Info\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Warn\"] = 2] = \"Warn\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Error\"] = 3] = \"Error\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Never\"] = 4] = \"Never\";\n})(RevealOutputChannelOn = exports.RevealOutputChannelOn || (exports.RevealOutputChannelOn = {}));\nvar State;\n(function (State) {\n    State[State[\"Stopped\"] = 1] = \"Stopped\";\n    State[State[\"Starting\"] = 3] = \"Starting\";\n    State[State[\"Running\"] = 2] = \"Running\";\n})(State = exports.State || (exports.State = {}));\nvar ClientState;\n(function (ClientState) {\n    ClientState[ClientState[\"Initial\"] = 0] = \"Initial\";\n    ClientState[ClientState[\"Starting\"] = 1] = \"Starting\";\n    ClientState[ClientState[\"StartFailed\"] = 2] = \"StartFailed\";\n    ClientState[ClientState[\"Running\"] = 3] = \"Running\";\n    ClientState[ClientState[\"Stopping\"] = 4] = \"Stopping\";\n    ClientState[ClientState[\"Stopped\"] = 5] = \"Stopped\";\n})(ClientState || (ClientState = {}));\nconst SupportedSymbolKinds = [\n    vscode_languageserver_protocol_1.SymbolKind.File,\n    vscode_languageserver_protocol_1.SymbolKind.Module,\n    vscode_languageserver_protocol_1.SymbolKind.Namespace,\n    vscode_languageserver_protocol_1.SymbolKind.Package,\n    vscode_languageserver_protocol_1.SymbolKind.Class,\n    vscode_languageserver_protocol_1.SymbolKind.Method,\n    vscode_languageserver_protocol_1.SymbolKind.Property,\n    vscode_languageserver_protocol_1.SymbolKind.Field,\n    vscode_languageserver_protocol_1.SymbolKind.Constructor,\n    vscode_languageserver_protocol_1.SymbolKind.Enum,\n    vscode_languageserver_protocol_1.SymbolKind.Interface,\n    vscode_languageserver_protocol_1.SymbolKind.Function,\n    vscode_languageserver_protocol_1.SymbolKind.Variable,\n    vscode_languageserver_protocol_1.SymbolKind.Constant,\n    vscode_languageserver_protocol_1.SymbolKind.String,\n    vscode_languageserver_protocol_1.SymbolKind.Number,\n    vscode_languageserver_protocol_1.SymbolKind.Boolean,\n    vscode_languageserver_protocol_1.SymbolKind.Array,\n    vscode_languageserver_protocol_1.SymbolKind.Object,\n    vscode_languageserver_protocol_1.SymbolKind.Key,\n    vscode_languageserver_protocol_1.SymbolKind.Null,\n    vscode_languageserver_protocol_1.SymbolKind.EnumMember,\n    vscode_languageserver_protocol_1.SymbolKind.Struct,\n    vscode_languageserver_protocol_1.SymbolKind.Event,\n    vscode_languageserver_protocol_1.SymbolKind.Operator,\n    vscode_languageserver_protocol_1.SymbolKind.TypeParameter\n];\nconst SupportedCompletionItemKinds = [\n    vscode_languageserver_protocol_1.CompletionItemKind.Text,\n    vscode_languageserver_protocol_1.CompletionItemKind.Method,\n    vscode_languageserver_protocol_1.CompletionItemKind.Function,\n    vscode_languageserver_protocol_1.CompletionItemKind.Constructor,\n    vscode_languageserver_protocol_1.CompletionItemKind.Field,\n    vscode_languageserver_protocol_1.CompletionItemKind.Variable,\n    vscode_languageserver_protocol_1.CompletionItemKind.Class,\n    vscode_languageserver_protocol_1.CompletionItemKind.Interface,\n    vscode_languageserver_protocol_1.CompletionItemKind.Module,\n    vscode_languageserver_protocol_1.CompletionItemKind.Property,\n    vscode_languageserver_protocol_1.CompletionItemKind.Unit,\n    vscode_languageserver_protocol_1.CompletionItemKind.Value,\n    vscode_languageserver_protocol_1.CompletionItemKind.Enum,\n    vscode_languageserver_protocol_1.CompletionItemKind.Keyword,\n    vscode_languageserver_protocol_1.CompletionItemKind.Snippet,\n    vscode_languageserver_protocol_1.CompletionItemKind.Color,\n    vscode_languageserver_protocol_1.CompletionItemKind.File,\n    vscode_languageserver_protocol_1.CompletionItemKind.Reference,\n    vscode_languageserver_protocol_1.CompletionItemKind.Folder,\n    vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,\n    vscode_languageserver_protocol_1.CompletionItemKind.Constant,\n    vscode_languageserver_protocol_1.CompletionItemKind.Struct,\n    vscode_languageserver_protocol_1.CompletionItemKind.Event,\n    vscode_languageserver_protocol_1.CompletionItemKind.Operator,\n    vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter\n];\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar DynamicFeature;\n(function (DynamicFeature) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.func(candidate.register) && Is.func(candidate.unregister) && Is.func(candidate.dispose) && candidate.messages !== void 0;\n    }\n    DynamicFeature.is = is;\n})(DynamicFeature || (DynamicFeature = {}));\nclass DocumentNotifiactions {\n    constructor(_client, _event, _type, _middleware, _createParams, _selectorFilter) {\n        this._client = _client;\n        this._event = _event;\n        this._type = _type;\n        this._middleware = _middleware;\n        this._createParams = _createParams;\n        this._selectorFilter = _selectorFilter;\n        this._selectors = new Map();\n    }\n    static textDocumentFilter(selectors, textDocument) {\n        for (const selector of selectors) {\n            if (vscode_1.languages.match(selector, textDocument)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    register(_message, data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = this._event(this.callback, this);\n        }\n        this._selectors.set(data.id, data.registerOptions.documentSelector);\n    }\n    callback(data) {\n        if (!this._selectorFilter || this._selectorFilter(this._selectors.values(), data)) {\n            if (this._middleware) {\n                this._middleware(data, (data) => this._client.sendNotification(this._type, this._createParams(data)));\n            }\n            else {\n                this._client.sendNotification(this._type, this._createParams(data));\n            }\n            this.notificationSent(data);\n        }\n    }\n    notificationSent(_data) {\n    }\n    unregister(id) {\n        this._selectors.delete(id);\n        if (this._selectors.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    dispose() {\n        this._selectors.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    getProvider(document) {\n        for (const selector of this._selectors.values()) {\n            if (vscode_1.languages.match(selector, document)) {\n                return {\n                    send: (data) => {\n                        this.callback(data);\n                    }\n                };\n            }\n        }\n        throw new Error(`No provider available for the given text document`);\n    }\n}\nclass DidOpenTextDocumentFeature extends DocumentNotifiactions {\n    constructor(client, _syncedDocuments) {\n        super(client, vscode_1.workspace.onDidOpenTextDocument, vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, client.clientOptions.middleware.didOpen, (textDocument) => client.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);\n        this._syncedDocuments = _syncedDocuments;\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {\n            this.register(this.messages, { id: UUID.generateUuid(), registerOptions: { documentSelector: documentSelector } });\n        }\n    }\n    register(message, data) {\n        super.register(message, data);\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        let documentSelector = data.registerOptions.documentSelector;\n        vscode_1.workspace.textDocuments.forEach((textDocument) => {\n            let uri = textDocument.uri.toString();\n            if (this._syncedDocuments.has(uri)) {\n                return;\n            }\n            if (vscode_1.languages.match(documentSelector, textDocument)) {\n                let middleware = this._client.clientOptions.middleware;\n                let didOpen = (textDocument) => {\n                    this._client.sendNotification(this._type, this._createParams(textDocument));\n                };\n                if (middleware.didOpen) {\n                    middleware.didOpen(textDocument, didOpen);\n                }\n                else {\n                    didOpen(textDocument);\n                }\n                this._syncedDocuments.set(uri, textDocument);\n            }\n        });\n    }\n    notificationSent(textDocument) {\n        super.notificationSent(textDocument);\n        this._syncedDocuments.set(textDocument.uri.toString(), textDocument);\n    }\n}\nclass DidCloseTextDocumentFeature extends DocumentNotifiactions {\n    constructor(client, _syncedDocuments) {\n        super(client, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, client.clientOptions.middleware.didClose, (textDocument) => client.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);\n        this._syncedDocuments = _syncedDocuments;\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {\n            this.register(this.messages, { id: UUID.generateUuid(), registerOptions: { documentSelector: documentSelector } });\n        }\n    }\n    notificationSent(textDocument) {\n        super.notificationSent(textDocument);\n        this._syncedDocuments.delete(textDocument.uri.toString());\n    }\n    unregister(id) {\n        let selector = this._selectors.get(id);\n        // The super call removed the selector from the map\n        // of selectors.\n        super.unregister(id);\n        let selectors = this._selectors.values();\n        this._syncedDocuments.forEach((textDocument) => {\n            if (vscode_1.languages.match(selector, textDocument) && !this._selectorFilter(selectors, textDocument)) {\n                let middleware = this._client.clientOptions.middleware;\n                let didClose = (textDocument) => {\n                    this._client.sendNotification(this._type, this._createParams(textDocument));\n                };\n                this._syncedDocuments.delete(textDocument.uri.toString());\n                if (middleware.didClose) {\n                    middleware.didClose(textDocument, didClose);\n                }\n                else {\n                    didClose(textDocument);\n                }\n            }\n        });\n    }\n}\nclass DidChangeTextDocumentFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._changeData = new Map();\n        this._forcingDelivery = false;\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== void 0 && textDocumentSyncOptions.change !== vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: Object.assign({}, { documentSelector: documentSelector }, { syncKind: textDocumentSyncOptions.change })\n            });\n        }\n    }\n    register(_message, data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = vscode_1.workspace.onDidChangeTextDocument(this.callback, this);\n        }\n        this._changeData.set(data.id, {\n            documentSelector: data.registerOptions.documentSelector,\n            syncKind: data.registerOptions.syncKind\n        });\n    }\n    callback(event) {\n        // Text document changes are send for dirty changes as well. We don't\n        // have dirty / undirty events in the LSP so we ignore content changes\n        // with length zero.\n        if (event.contentChanges.length === 0) {\n            return;\n        }\n        for (const changeData of this._changeData.values()) {\n            if (vscode_1.languages.match(changeData.documentSelector, event.document)) {\n                let middleware = this._client.clientOptions.middleware;\n                if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental) {\n                    let params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event);\n                    if (middleware.didChange) {\n                        middleware.didChange(event, () => this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params));\n                    }\n                    else {\n                        this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);\n                    }\n                }\n                else if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {\n                    let didChange = (event) => {\n                        if (this._changeDelayer) {\n                            if (this._changeDelayer.uri !== event.document.uri.toString()) {\n                                // Use this force delivery to track boolean state. Otherwise we might call two times.\n                                this.forceDelivery();\n                                this._changeDelayer.uri = event.document.uri.toString();\n                            }\n                            this._changeDelayer.delayer.trigger(() => {\n                                this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event.document));\n                            });\n                        }\n                        else {\n                            this._changeDelayer = {\n                                uri: event.document.uri.toString(),\n                                delayer: new async_1.Delayer(200)\n                            };\n                            this._changeDelayer.delayer.trigger(() => {\n                                this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event.document));\n                            }, -1);\n                        }\n                    };\n                    if (middleware.didChange) {\n                        middleware.didChange(event, didChange);\n                    }\n                    else {\n                        didChange(event);\n                    }\n                }\n            }\n        }\n    }\n    unregister(id) {\n        this._changeData.delete(id);\n        if (this._changeData.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    dispose() {\n        this._changeDelayer = undefined;\n        this._forcingDelivery = false;\n        this._changeData.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    forceDelivery() {\n        if (this._forcingDelivery || !this._changeDelayer) {\n            return;\n        }\n        try {\n            this._forcingDelivery = true;\n            this._changeDelayer.delayer.forceDelivery();\n        }\n        finally {\n            this._forcingDelivery = false;\n        }\n    }\n    getProvider(document) {\n        for (const changeData of this._changeData.values()) {\n            if (vscode_1.languages.match(changeData.documentSelector, document)) {\n                return {\n                    send: (event) => {\n                        this.callback(event);\n                    }\n                };\n            }\n        }\n        throw new Error(`No provider available for the given text document`);\n    }\n}\nclass WillSaveFeature extends DocumentNotifiactions {\n    constructor(client) {\n        super(client, vscode_1.workspace.onWillSaveTextDocument, vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, client.clientOptions.middleware.willSave, (willSaveEvent) => client.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (selectors, willSaveEvent) => DocumentNotifiactions.textDocumentFilter(selectors, willSaveEvent.document));\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        let value = ensure(ensure(capabilities, 'textDocument'), 'synchronization');\n        value.willSave = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: { documentSelector: documentSelector }\n            });\n        }\n    }\n}\nclass WillSaveWaitUntilFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._selectors = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type;\n    }\n    fillClientCapabilities(capabilities) {\n        let value = ensure(ensure(capabilities, 'textDocument'), 'synchronization');\n        value.willSaveWaitUntil = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: { documentSelector: documentSelector }\n            });\n        }\n    }\n    register(_message, data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = vscode_1.workspace.onWillSaveTextDocument(this.callback, this);\n        }\n        this._selectors.set(data.id, data.registerOptions.documentSelector);\n    }\n    callback(event) {\n        if (DocumentNotifiactions.textDocumentFilter(this._selectors.values(), event.document)) {\n            let middleware = this._client.clientOptions.middleware;\n            let willSaveWaitUntil = (event) => {\n                return this._client.sendRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, this._client.code2ProtocolConverter.asWillSaveTextDocumentParams(event)).then((edits) => {\n                    let vEdits = this._client.protocol2CodeConverter.asTextEdits(edits);\n                    return vEdits === void 0 ? [] : vEdits;\n                });\n            };\n            event.waitUntil(middleware.willSaveWaitUntil\n                ? middleware.willSaveWaitUntil(event, willSaveWaitUntil)\n                : willSaveWaitUntil(event));\n        }\n    }\n    unregister(id) {\n        this._selectors.delete(id);\n        if (this._selectors.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    dispose() {\n        this._selectors.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n}\nclass DidSaveTextDocumentFeature extends DocumentNotifiactions {\n    constructor(client) {\n        super(client, vscode_1.workspace.onDidSaveTextDocument, vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, client.clientOptions.middleware.didSave, (textDocument) => client.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), DocumentNotifiactions.textDocumentFilter);\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').didSave = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: Object.assign({}, { documentSelector: documentSelector }, { includeText: !!textDocumentSyncOptions.save.includeText })\n            });\n        }\n    }\n    register(method, data) {\n        this._includeText = !!data.registerOptions.includeText;\n        super.register(method, data);\n    }\n}\nclass FileSystemWatcherFeature {\n    constructor(_client, _notifyFileEvent) {\n        this._client = _client;\n        this._notifyFileEvent = _notifyFileEvent;\n        this._watchers = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'workspace'), 'didChangeWatchedFiles').dynamicRegistration = true;\n    }\n    initialize(_capabilities, _documentSelector) {\n    }\n    register(_method, data) {\n        if (!Array.isArray(data.registerOptions.watchers)) {\n            return;\n        }\n        let disposeables = [];\n        for (let watcher of data.registerOptions.watchers) {\n            if (!Is.string(watcher.globPattern)) {\n                continue;\n            }\n            let watchCreate = true, watchChange = true, watchDelete = true;\n            if (watcher.kind !== void 0 && watcher.kind !== null) {\n                watchCreate = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Create) !== 0;\n                watchChange = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Change) !== 0;\n                watchDelete = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Delete) !== 0;\n            }\n            let fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher(watcher.globPattern, !watchCreate, !watchChange, !watchDelete);\n            this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete);\n            disposeables.push(fileSystemWatcher);\n        }\n        this._watchers.set(data.id, disposeables);\n    }\n    registerRaw(id, fileSystemWatchers) {\n        let disposeables = [];\n        for (let fileSystemWatcher of fileSystemWatchers) {\n            this.hookListeners(fileSystemWatcher, true, true, true, disposeables);\n        }\n        this._watchers.set(id, disposeables);\n    }\n    hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {\n        if (watchCreate) {\n            fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Created\n            }), null, listeners);\n        }\n        if (watchChange) {\n            fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Changed\n            }), null, listeners);\n        }\n        if (watchDelete) {\n            fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Deleted\n            }), null, listeners);\n        }\n    }\n    unregister(id) {\n        let disposeables = this._watchers.get(id);\n        if (disposeables) {\n            for (let disposable of disposeables) {\n                disposable.dispose();\n            }\n        }\n    }\n    dispose() {\n        this._watchers.forEach((disposeables) => {\n            for (let disposable of disposeables) {\n                disposable.dispose();\n            }\n        });\n        this._watchers.clear();\n    }\n}\nclass TextDocumentFeature {\n    constructor(_client, _message) {\n        this._client = _client;\n        this._message = _message;\n        this._registrations = new Map();\n    }\n    get messages() {\n        return this._message;\n    }\n    register(message, data) {\n        if (message.method !== this.messages.method) {\n            throw new Error(`Register called on wrong feature. Requested ${message.method} but reached feature ${this.messages.method}`);\n        }\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        let registration = this.registerLanguageProvider(data.registerOptions);\n        this._registrations.set(data.id, { disposable: registration[0], data, provider: registration[1] });\n    }\n    unregister(id) {\n        let registration = this._registrations.get(id);\n        if (registration !== undefined) {\n            registration.disposable.dispose();\n        }\n    }\n    dispose() {\n        this._registrations.forEach((value) => {\n            value.disposable.dispose();\n        });\n        this._registrations.clear();\n    }\n    getRegistration(documentSelector, capability) {\n        if (!capability) {\n            return [undefined, undefined];\n        }\n        else if (vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is(capability)) {\n            const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();\n            const selector = capability.documentSelector || documentSelector;\n            if (selector) {\n                return [id, Object.assign({}, capability, { documentSelector: selector })];\n            }\n        }\n        else if (Is.boolean(capability) && capability === true || vscode_languageserver_protocol_1.WorkDoneProgressOptions.is(capability)) {\n            if (!documentSelector) {\n                return [undefined, undefined];\n            }\n            let options = (Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector }));\n            return [UUID.generateUuid(), options];\n        }\n        return [undefined, undefined];\n    }\n    getRegistrationOptions(documentSelector, capability) {\n        if (!documentSelector || !capability) {\n            return undefined;\n        }\n        return (Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector }));\n    }\n    getProvider(textDocument) {\n        for (const registration of this._registrations.values()) {\n            let selector = registration.data.registerOptions.documentSelector;\n            if (selector !== null && vscode_1.languages.match(selector, textDocument)) {\n                return registration.provider;\n            }\n        }\n        throw new Error(`The feature has no registration for the provided text document ${textDocument.uri.toString()}`);\n    }\n}\nexports.TextDocumentFeature = TextDocumentFeature;\nclass WorkspaceFeature {\n    constructor(_client, _message) {\n        this._client = _client;\n        this._message = _message;\n        this._registrations = new Map();\n    }\n    get messages() {\n        return this._message;\n    }\n    register(message, data) {\n        if (message.method !== this.messages.method) {\n            throw new Error(`Register called on wron feature. Requested ${message.method} but reached feature ${this.messages.method}`);\n        }\n        const registration = this.registerLanguageProvider(data.registerOptions);\n        this._registrations.set(data.id, { disposable: registration[0], provider: registration[1] });\n    }\n    unregister(id) {\n        let registration = this._registrations.get(id);\n        if (registration !== undefined) {\n            registration.disposable.dispose();\n        }\n    }\n    dispose() {\n        this._registrations.forEach((registration) => {\n            registration.disposable.dispose();\n        });\n        this._registrations.clear();\n    }\n    getProviders() {\n        const result = [];\n        for (const registration of this._registrations.values()) {\n            result.push(registration.provider);\n        }\n        return result;\n    }\n}\nclass CompletionItemFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CompletionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let completion = ensure(ensure(capabilites, 'textDocument'), 'completion');\n        completion.dynamicRegistration = true;\n        completion.contextSupport = true;\n        completion.completionItem = {\n            snippetSupport: true,\n            commitCharactersSupport: true,\n            documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],\n            deprecatedSupport: true,\n            preselectSupport: true,\n            tagSupport: { valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated] }\n        };\n        completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const triggerCharacters = options.triggerCharacters || [];\n        const provider = {\n            provideCompletionItems: (document, position, token, context) => {\n                const client = this._client;\n                const middleware = this._client.clientOptions.middleware;\n                const provideCompletionItems = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, client.code2ProtocolConverter.asCompletionParams(document, position, context), token).then(client.protocol2CodeConverter.asCompletionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.CompletionRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                return middleware.provideCompletionItem\n                    ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems)\n                    : provideCompletionItems(document, position, context, token);\n            },\n            resolveCompletionItem: options.resolveProvider\n                ? (item, token) => {\n                    const client = this._client;\n                    const middleware = this._client.clientOptions.middleware;\n                    const resolveCompletionItem = (item, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, client.code2ProtocolConverter.asCompletionItem(item), token).then(client.protocol2CodeConverter.asCompletionItem, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, error);\n                            return Promise.resolve(item);\n                        });\n                    };\n                    return middleware.resolveCompletionItem\n                        ? middleware.resolveCompletionItem(item, token, resolveCompletionItem)\n                        : resolveCompletionItem(item, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCompletionItemProvider(options.documentSelector, provider, ...triggerCharacters), provider];\n    }\n}\nclass HoverFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.HoverRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const hoverCapability = (ensure(ensure(capabilites, 'textDocument'), 'hover'));\n        hoverCapability.dynamicRegistration = true;\n        hoverCapability.contentFormat = [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText];\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideHover: (document, position, token) => {\n                const client = this._client;\n                const provideHover = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asHover, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.HoverRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideHover\n                    ? middleware.provideHover(document, position, token, provideHover)\n                    : provideHover(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerHoverProvider(options.documentSelector, provider), provider];\n    }\n}\nclass SignatureHelpFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SignatureHelpRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let config = ensure(ensure(capabilites, 'textDocument'), 'signatureHelp');\n        config.dynamicRegistration = true;\n        config.signatureInformation = { documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText] };\n        config.signatureInformation.parameterInformation = { labelOffsetSupport: true };\n        config.contextSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideSignatureHelp: (document, position, token, context) => {\n                const client = this._client;\n                const providerSignatureHelp = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, client.code2ProtocolConverter.asSignatureHelpParams(document, position, context), token).then(client.protocol2CodeConverter.asSignatureHelp, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideSignatureHelp\n                    ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp)\n                    : providerSignatureHelp(document, position, context, token);\n            }\n        };\n        let disposable;\n        if (options.retriggerCharacters === undefined) {\n            const triggerCharacters = options.triggerCharacters || [];\n            disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, ...triggerCharacters);\n        }\n        else {\n            const metaData = {\n                triggerCharacters: options.triggerCharacters || [],\n                retriggerCharacters: options.retriggerCharacters || []\n            };\n            disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, metaData);\n        }\n        return [disposable, provider];\n    }\n}\nclass DefinitionFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DefinitionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let definitionSupport = ensure(ensure(capabilites, 'textDocument'), 'definition');\n        definitionSupport.dynamicRegistration = true;\n        definitionSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDefinition: (document, position, token) => {\n                const client = this._client;\n                const provideDefinition = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDefinitionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDefinition\n                    ? middleware.provideDefinition(document, position, token, provideDefinition)\n                    : provideDefinition(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDefinitionProvider(options.documentSelector, provider), provider];\n    }\n}\nclass ReferencesFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.ReferencesRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'references').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideReferences: (document, position, options, token) => {\n                const client = this._client;\n                const _providerReferences = (document, position, options, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, client.code2ProtocolConverter.asReferenceParams(document, position, options), token).then(client.protocol2CodeConverter.asReferences, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideReferences\n                    ? middleware.provideReferences(document, position, options, token, _providerReferences)\n                    : _providerReferences(document, position, options, token);\n            }\n        };\n        return [vscode_1.languages.registerReferenceProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentHighlightFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentHighlightRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'documentHighlight').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentHighlights: (document, position, token) => {\n                const client = this._client;\n                const _provideDocumentHighlights = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDocumentHighlights, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentHighlights\n                    ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights)\n                    : _provideDocumentHighlights(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentHighlightProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentSymbolFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentSymbolRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let symbolCapabilities = ensure(ensure(capabilites, 'textDocument'), 'documentSymbol');\n        symbolCapabilities.dynamicRegistration = true;\n        symbolCapabilities.symbolKind = {\n            valueSet: SupportedSymbolKinds\n        };\n        symbolCapabilities.hierarchicalDocumentSymbolSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentSymbols: (document, token) => {\n                const client = this._client;\n                const _provideDocumentSymbols = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document), token).then((data) => {\n                        if (data === null) {\n                            return undefined;\n                        }\n                        if (data.length === 0) {\n                            return [];\n                        }\n                        else {\n                            let element = data[0];\n                            if (vscode_languageserver_protocol_1.DocumentSymbol.is(element)) {\n                                return client.protocol2CodeConverter.asDocumentSymbols(data);\n                            }\n                            else {\n                                return client.protocol2CodeConverter.asSymbolInformations(data);\n                            }\n                        }\n                    }, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentSymbols\n                    ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols)\n                    : _provideDocumentSymbols(document, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentSymbolProvider(options.documentSelector, provider), provider];\n    }\n}\nclass WorkspaceSymbolFeature extends WorkspaceFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let symbolCapabilities = ensure(ensure(capabilites, 'workspace'), 'symbol');\n        symbolCapabilities.dynamicRegistration = true;\n        symbolCapabilities.symbolKind = {\n            valueSet: SupportedSymbolKinds\n        };\n    }\n    initialize(capabilities) {\n        if (!capabilities.workspaceSymbolProvider) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: capabilities.workspaceSymbolProvider === true ? { workDoneProgress: false } : capabilities.workspaceSymbolProvider\n        });\n    }\n    registerLanguageProvider(_options) {\n        const provider = {\n            provideWorkspaceSymbols: (query, token) => {\n                const client = this._client;\n                const provideWorkspaceSymbols = (query, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, { query }, token).then(client.protocol2CodeConverter.asSymbolInformations, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideWorkspaceSymbols\n                    ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols)\n                    : provideWorkspaceSymbols(query, token);\n            }\n        };\n        return [vscode_1.languages.registerWorkspaceSymbolProvider(provider), provider];\n    }\n}\nclass CodeActionFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CodeActionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const cap = ensure(ensure(capabilites, 'textDocument'), 'codeAction');\n        cap.dynamicRegistration = true;\n        cap.isPreferredSupport = true;\n        cap.codeActionLiteralSupport = {\n            codeActionKind: {\n                valueSet: [\n                    vscode_languageserver_protocol_1.CodeActionKind.Empty,\n                    vscode_languageserver_protocol_1.CodeActionKind.QuickFix,\n                    vscode_languageserver_protocol_1.CodeActionKind.Refactor,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorInline,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite,\n                    vscode_languageserver_protocol_1.CodeActionKind.Source,\n                    vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports\n                ]\n            }\n        };\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideCodeActions: (document, range, context, token) => {\n                const client = this._client;\n                const _provideCodeActions = (document, range, context, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(range),\n                        context: client.code2ProtocolConverter.asCodeActionContext(context)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, params, token).then((values) => {\n                        if (values === null) {\n                            return undefined;\n                        }\n                        const result = [];\n                        for (let item of values) {\n                            if (vscode_languageserver_protocol_1.Command.is(item)) {\n                                result.push(client.protocol2CodeConverter.asCommand(item));\n                            }\n                            else {\n                                result.push(client.protocol2CodeConverter.asCodeAction(item));\n                            }\n                        }\n                        return result;\n                    }, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideCodeActions\n                    ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions)\n                    : _provideCodeActions(document, range, context, token);\n            }\n        };\n        return [vscode_1.languages.registerCodeActionsProvider(options.documentSelector, provider, (options.codeActionKinds\n                ? { providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds) }\n                : undefined)), provider];\n    }\n}\nclass CodeLensFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CodeLensRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'codeLens').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideCodeLenses: (document, token) => {\n                const client = this._client;\n                const provideCodeLenses = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, client.code2ProtocolConverter.asCodeLensParams(document), token).then(client.protocol2CodeConverter.asCodeLenses, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideCodeLenses\n                    ? middleware.provideCodeLenses(document, token, provideCodeLenses)\n                    : provideCodeLenses(document, token);\n            },\n            resolveCodeLens: (options.resolveProvider)\n                ? (codeLens, token) => {\n                    const client = this._client;\n                    const resolveCodeLens = (codeLens, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, client.code2ProtocolConverter.asCodeLens(codeLens), token).then(client.protocol2CodeConverter.asCodeLens, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, error);\n                            return codeLens;\n                        });\n                    };\n                    const middleware = client.clientOptions.middleware;\n                    return middleware.resolveCodeLens\n                        ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens)\n                        : resolveCodeLens(codeLens, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCodeLensProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentFormattingFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'formatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentFormattingEdits: (document, options, token) => {\n                const client = this._client;\n                const provideDocumentFormattingEdits = (document, options, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, params, token).then(client.protocol2CodeConverter.asTextEdits, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentFormattingEdits\n                    ? middleware.provideDocumentFormattingEdits(document, options, token, provideDocumentFormattingEdits)\n                    : provideDocumentFormattingEdits(document, options, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentFormattingEditProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentRangeFormattingFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'rangeFormatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentRangeFormattingEdits: (document, range, options, token) => {\n                const client = this._client;\n                const provideDocumentRangeFormattingEdits = (document, range, options, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(range),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, params, token).then(client.protocol2CodeConverter.asTextEdits, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                let middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentRangeFormattingEdits\n                    ? middleware.provideDocumentRangeFormattingEdits(document, range, options, token, provideDocumentRangeFormattingEdits)\n                    : provideDocumentRangeFormattingEdits(document, range, options, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentRangeFormattingEditProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentOnTypeFormattingFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'onTypeFormatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideOnTypeFormattingEdits: (document, position, ch, options, token) => {\n                const client = this._client;\n                const provideOnTypeFormattingEdits = (document, position, ch, options, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        position: client.code2ProtocolConverter.asPosition(position),\n                        ch: ch,\n                        options: client.code2ProtocolConverter.asFormattingOptions(options)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, params, token).then(client.protocol2CodeConverter.asTextEdits, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideOnTypeFormattingEdits\n                    ? middleware.provideOnTypeFormattingEdits(document, position, ch, options, token, provideOnTypeFormattingEdits)\n                    : provideOnTypeFormattingEdits(document, position, ch, options, token);\n            }\n        };\n        const moreTriggerCharacter = options.moreTriggerCharacter || [];\n        return [vscode_1.languages.registerOnTypeFormattingEditProvider(options.documentSelector, provider, options.firstTriggerCharacter, ...moreTriggerCharacter), provider];\n    }\n}\nclass RenameFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.RenameRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let rename = ensure(ensure(capabilites, 'textDocument'), 'rename');\n        rename.dynamicRegistration = true;\n        rename.prepareSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);\n        if (!options) {\n            return;\n        }\n        if (Is.boolean(capabilities.renameProvider)) {\n            options.prepareProvider = false;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideRenameEdits: (document, position, newName, token) => {\n                const client = this._client;\n                const provideRenameEdits = (document, position, newName, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        position: client.code2ProtocolConverter.asPosition(position),\n                        newName: newName\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.RenameRequest.type, params, token).then(client.protocol2CodeConverter.asWorkspaceEdit, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.RenameRequest.type, error);\n                        return Promise.reject(new Error(error.message));\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideRenameEdits\n                    ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits)\n                    : provideRenameEdits(document, position, newName, token);\n            },\n            prepareRename: options.prepareProvider\n                ? (document, position, token) => {\n                    const client = this._client;\n                    const prepareRename = (document, position, token) => {\n                        let params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            position: client.code2ProtocolConverter.asPosition(position),\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, params, token).then((result) => {\n                            if (vscode_languageserver_protocol_1.Range.is(result)) {\n                                return client.protocol2CodeConverter.asRange(result);\n                            }\n                            else if (result && vscode_languageserver_protocol_1.Range.is(result.range)) {\n                                return {\n                                    range: client.protocol2CodeConverter.asRange(result.range),\n                                    placeholder: result.placeholder\n                                };\n                            }\n                            // To cancel the rename vscode API expects a rejected promise.\n                            return Promise.reject(new Error(`The element can't be renamed.`));\n                        }, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, error);\n                            return Promise.reject(new Error(error.message));\n                        });\n                    };\n                    const middleware = client.clientOptions.middleware;\n                    return middleware.prepareRename\n                        ? middleware.prepareRename(document, position, token, prepareRename)\n                        : prepareRename(document, position, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerRenameProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentLinkFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentLinkRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const documentLinkCapabilities = ensure(ensure(capabilites, 'textDocument'), 'documentLink');\n        documentLinkCapabilities.dynamicRegistration = true;\n        documentLinkCapabilities.tooltipSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentLinks: (document, token) => {\n                const client = this._client;\n                const provideDocumentLinks = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, client.code2ProtocolConverter.asDocumentLinkParams(document), token).then(client.protocol2CodeConverter.asDocumentLinks, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentLinks\n                    ? middleware.provideDocumentLinks(document, token, provideDocumentLinks)\n                    : provideDocumentLinks(document, token);\n            },\n            resolveDocumentLink: options.resolveProvider\n                ? (link, token) => {\n                    const client = this._client;\n                    let resolveDocumentLink = (link, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, client.code2ProtocolConverter.asDocumentLink(link), token).then(client.protocol2CodeConverter.asDocumentLink, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, error);\n                            return Promise.resolve(link);\n                        });\n                    };\n                    const middleware = client.clientOptions.middleware;\n                    return middleware.resolveDocumentLink\n                        ? middleware.resolveDocumentLink(link, token, resolveDocumentLink)\n                        : resolveDocumentLink(link, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerDocumentLinkProvider(options.documentSelector, provider), provider];\n    }\n}\nclass ConfigurationFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._listeners = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'workspace'), 'didChangeConfiguration').dynamicRegistration = true;\n    }\n    initialize() {\n        let section = this._client.clientOptions.synchronize.configurationSection;\n        if (section !== void 0) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: {\n                    section: section\n                }\n            });\n        }\n    }\n    register(_message, data) {\n        let disposable = vscode_1.workspace.onDidChangeConfiguration((event) => {\n            this.onDidChangeConfiguration(data.registerOptions.section, event);\n        });\n        this._listeners.set(data.id, disposable);\n        if (data.registerOptions.section !== void 0) {\n            this.onDidChangeConfiguration(data.registerOptions.section, undefined);\n        }\n    }\n    unregister(id) {\n        let disposable = this._listeners.get(id);\n        if (disposable) {\n            this._listeners.delete(id);\n            disposable.dispose();\n        }\n    }\n    dispose() {\n        for (let disposable of this._listeners.values()) {\n            disposable.dispose();\n        }\n        this._listeners.clear();\n    }\n    onDidChangeConfiguration(configurationSection, event) {\n        let sections;\n        if (Is.string(configurationSection)) {\n            sections = [configurationSection];\n        }\n        else {\n            sections = configurationSection;\n        }\n        if (sections !== void 0 && event !== void 0) {\n            let affected = sections.some((section) => event.affectsConfiguration(section));\n            if (!affected) {\n                return;\n            }\n        }\n        let didChangeConfiguration = (sections) => {\n            if (sections === void 0) {\n                this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: null });\n                return;\n            }\n            this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: this.extractSettingsInformation(sections) });\n        };\n        let middleware = this.getMiddleware();\n        middleware\n            ? middleware(sections, didChangeConfiguration)\n            : didChangeConfiguration(sections);\n    }\n    extractSettingsInformation(keys) {\n        function ensurePath(config, path) {\n            let current = config;\n            for (let i = 0; i < path.length - 1; i++) {\n                let obj = current[path[i]];\n                if (!obj) {\n                    obj = Object.create(null);\n                    current[path[i]] = obj;\n                }\n                current = obj;\n            }\n            return current;\n        }\n        let resource = this._client.clientOptions.workspaceFolder\n            ? this._client.clientOptions.workspaceFolder.uri\n            : undefined;\n        let result = Object.create(null);\n        for (let i = 0; i < keys.length; i++) {\n            let key = keys[i];\n            let index = key.indexOf('.');\n            let config = null;\n            if (index >= 0) {\n                config = vscode_1.workspace.getConfiguration(key.substr(0, index), resource).get(key.substr(index + 1));\n            }\n            else {\n                config = vscode_1.workspace.getConfiguration(key, resource);\n            }\n            if (config) {\n                let path = keys[i].split('.');\n                ensurePath(result, path)[path[path.length - 1]] = config;\n            }\n        }\n        return result;\n    }\n    getMiddleware() {\n        let middleware = this._client.clientOptions.middleware;\n        if (middleware.workspace && middleware.workspace.didChangeConfiguration) {\n            return middleware.workspace.didChangeConfiguration;\n        }\n        else {\n            return undefined;\n        }\n    }\n}\nclass ExecuteCommandFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._commands = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.ExecuteCommandRequest.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'workspace'), 'executeCommand').dynamicRegistration = true;\n    }\n    initialize(capabilities) {\n        if (!capabilities.executeCommandProvider) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: Object.assign({}, capabilities.executeCommandProvider)\n        });\n    }\n    register(_message, data) {\n        const client = this._client;\n        const middleware = client.clientOptions.middleware;\n        const executeCommand = (command, args) => {\n            let params = {\n                command,\n                arguments: args\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, params).then(undefined, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, error);\n            });\n        };\n        if (data.registerOptions.commands) {\n            const disposeables = [];\n            for (const command of data.registerOptions.commands) {\n                disposeables.push(vscode_1.commands.registerCommand(command, (...args) => {\n                    return middleware.executeCommand\n                        ? middleware.executeCommand(command, args, executeCommand)\n                        : executeCommand(command, args);\n                }));\n            }\n            this._commands.set(data.id, disposeables);\n        }\n    }\n    unregister(id) {\n        let disposeables = this._commands.get(id);\n        if (disposeables) {\n            disposeables.forEach(disposable => disposable.dispose());\n        }\n    }\n    dispose() {\n        this._commands.forEach((value) => {\n            value.forEach(disposable => disposable.dispose());\n        });\n        this._commands.clear();\n    }\n}\nvar MessageTransports;\n(function (MessageTransports) {\n    function is(value) {\n        let candidate = value;\n        return candidate && vscode_languageserver_protocol_1.MessageReader.is(value.reader) && vscode_languageserver_protocol_1.MessageWriter.is(value.writer);\n    }\n    MessageTransports.is = is;\n})(MessageTransports = exports.MessageTransports || (exports.MessageTransports = {}));\nclass OnReady {\n    constructor(_resolve, _reject) {\n        this._resolve = _resolve;\n        this._reject = _reject;\n        this._used = false;\n    }\n    get isUsed() {\n        return this._used;\n    }\n    resolve() {\n        this._used = true;\n        this._resolve();\n    }\n    reject(error) {\n        this._used = true;\n        this._reject(error);\n    }\n}\nclass BaseLanguageClient {\n    constructor(id, name, clientOptions) {\n        this._traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;\n        this._features = [];\n        this._method2Message = new Map();\n        this._dynamicFeatures = new Map();\n        this._id = id;\n        this._name = name;\n        clientOptions = clientOptions || {};\n        this._clientOptions = {\n            documentSelector: clientOptions.documentSelector || [],\n            synchronize: clientOptions.synchronize || {},\n            diagnosticCollectionName: clientOptions.diagnosticCollectionName,\n            outputChannelName: clientOptions.outputChannelName || this._name,\n            revealOutputChannelOn: clientOptions.revealOutputChannelOn || RevealOutputChannelOn.Error,\n            stdioEncoding: clientOptions.stdioEncoding || 'utf8',\n            initializationOptions: clientOptions.initializationOptions,\n            initializationFailedHandler: clientOptions.initializationFailedHandler,\n            progressOnInitialization: !!clientOptions.progressOnInitialization,\n            errorHandler: clientOptions.errorHandler || new DefaultErrorHandler(this._name),\n            middleware: clientOptions.middleware || {},\n            uriConverters: clientOptions.uriConverters,\n            workspaceFolder: clientOptions.workspaceFolder\n        };\n        this._clientOptions.synchronize = this._clientOptions.synchronize || {};\n        this.state = ClientState.Initial;\n        this._connectionPromise = undefined;\n        this._resolvedConnection = undefined;\n        this._initializeResult = undefined;\n        if (clientOptions.outputChannel) {\n            this._outputChannel = clientOptions.outputChannel;\n            this._disposeOutputChannel = false;\n        }\n        else {\n            this._outputChannel = undefined;\n            this._disposeOutputChannel = true;\n        }\n        this._traceOutputChannel = clientOptions.traceOutputChannel;\n        this._listeners = undefined;\n        this._providers = undefined;\n        this._diagnostics = undefined;\n        this._fileEvents = [];\n        this._fileEventDelayer = new async_1.Delayer(250);\n        this._onReady = new Promise((resolve, reject) => {\n            this._onReadyCallbacks = new OnReady(resolve, reject);\n        });\n        this._onStop = undefined;\n        this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter();\n        this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter();\n        this._tracer = {\n            log: (messageOrDataObject, data) => {\n                if (Is.string(messageOrDataObject)) {\n                    this.logTrace(messageOrDataObject, data);\n                }\n                else {\n                    this.logObjectTrace(messageOrDataObject);\n                }\n            },\n        };\n        this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : undefined);\n        this._p2c = p2c.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : undefined);\n        this._syncedDocuments = new Map();\n        this.registerBuiltinFeatures();\n    }\n    get state() {\n        return this._state;\n    }\n    set state(value) {\n        let oldState = this.getPublicState();\n        this._state = value;\n        let newState = this.getPublicState();\n        if (newState !== oldState) {\n            this._stateChangeEmitter.fire({ oldState, newState });\n        }\n    }\n    getPublicState() {\n        if (this.state === ClientState.Running) {\n            return State.Running;\n        }\n        else if (this.state === ClientState.Starting) {\n            return State.Starting;\n        }\n        else {\n            return State.Stopped;\n        }\n    }\n    get initializeResult() {\n        return this._initializeResult;\n    }\n    sendRequest(type, ...params) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        this.forceDocumentSync();\n        try {\n            return this._resolvedConnection.sendRequest(type, ...params);\n        }\n        catch (error) {\n            this.error(`Sending request ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    onRequest(type, handler) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        try {\n            this._resolvedConnection.onRequest(type, handler);\n        }\n        catch (error) {\n            this.error(`Registering request handler ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    sendNotification(type, params) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        this.forceDocumentSync();\n        try {\n            this._resolvedConnection.sendNotification(type, params);\n        }\n        catch (error) {\n            this.error(`Sending notification ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    onNotification(type, handler) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        try {\n            this._resolvedConnection.onNotification(type, handler);\n        }\n        catch (error) {\n            this.error(`Registering notification handler ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    onProgress(type, token, handler) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        try {\n            return this._resolvedConnection.onProgress(type, token, handler);\n        }\n        catch (error) {\n            this.error(`Registering progress handler for token ${token} failed.`, error);\n            throw error;\n        }\n    }\n    sendProgress(type, token, value) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        this.forceDocumentSync();\n        try {\n            this._resolvedConnection.sendProgress(type, token, value);\n        }\n        catch (error) {\n            this.error(`Sending progress for token ${token} failed.`, error);\n            throw error;\n        }\n    }\n    get clientOptions() {\n        return this._clientOptions;\n    }\n    get protocol2CodeConverter() {\n        return this._p2c;\n    }\n    get code2ProtocolConverter() {\n        return this._c2p;\n    }\n    get onTelemetry() {\n        return this._telemetryEmitter.event;\n    }\n    get onDidChangeState() {\n        return this._stateChangeEmitter.event;\n    }\n    get outputChannel() {\n        if (!this._outputChannel) {\n            this._outputChannel = vscode_1.window.createOutputChannel(this._clientOptions.outputChannelName ? this._clientOptions.outputChannelName : this._name);\n        }\n        return this._outputChannel;\n    }\n    get traceOutputChannel() {\n        if (this._traceOutputChannel) {\n            return this._traceOutputChannel;\n        }\n        return this.outputChannel;\n    }\n    get diagnostics() {\n        return this._diagnostics;\n    }\n    createDefaultErrorHandler() {\n        return new DefaultErrorHandler(this._name);\n    }\n    set trace(value) {\n        this._trace = value;\n        this.onReady().then(() => {\n            this.resolveConnection().then((connection) => {\n                connection.trace(this._trace, this._tracer, {\n                    sendNotification: false,\n                    traceFormat: this._traceFormat\n                });\n            });\n        }, () => {\n        });\n    }\n    data2String(data) {\n        if (data instanceof vscode_languageserver_protocol_1.ResponseError) {\n            const responseError = data;\n            return `  Message: ${responseError.message}\\n  Code: ${responseError.code} ${responseError.data ? '\\n' + responseError.data.toString() : ''}`;\n        }\n        if (data instanceof Error) {\n            if (Is.string(data.stack)) {\n                return data.stack;\n            }\n            return data.message;\n        }\n        if (Is.string(data)) {\n            return data;\n        }\n        return data.toString();\n    }\n    info(message, data, showNotification = true) {\n        this.outputChannel.appendLine(`[Info  - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Info) {\n            this.showNotificationMessage();\n        }\n    }\n    warn(message, data, showNotification = true) {\n        this.outputChannel.appendLine(`[Warn  - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Warn) {\n            this.showNotificationMessage();\n        }\n    }\n    error(message, data, showNotification = true) {\n        this.outputChannel.appendLine(`[Error - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Error) {\n            this.showNotificationMessage();\n        }\n    }\n    showNotificationMessage() {\n        vscode_1.window.showInformationMessage('A request has failed. See the output for more information.', 'Go to output').then(() => {\n            this.outputChannel.show(true);\n        });\n    }\n    logTrace(message, data) {\n        this.traceOutputChannel.appendLine(`[Trace - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.traceOutputChannel.appendLine(this.data2String(data));\n        }\n    }\n    logObjectTrace(data) {\n        if (data.isLSPMessage && data.type) {\n            this.traceOutputChannel.append(`[LSP   - ${(new Date().toLocaleTimeString())}] `);\n        }\n        else {\n            this.traceOutputChannel.append(`[Trace - ${(new Date().toLocaleTimeString())}] `);\n        }\n        if (data) {\n            this.traceOutputChannel.appendLine(`${JSON.stringify(data)}`);\n        }\n    }\n    needsStart() {\n        return this.state === ClientState.Initial || this.state === ClientState.Stopping || this.state === ClientState.Stopped;\n    }\n    needsStop() {\n        return this.state === ClientState.Starting || this.state === ClientState.Running;\n    }\n    onReady() {\n        return this._onReady;\n    }\n    isConnectionActive() {\n        return this.state === ClientState.Running && !!this._resolvedConnection;\n    }\n    start() {\n        if (this._onReadyCallbacks.isUsed) {\n            this._onReady = new Promise((resolve, reject) => {\n                this._onReadyCallbacks = new OnReady(resolve, reject);\n            });\n        }\n        this._listeners = [];\n        this._providers = [];\n        // If we restart then the diagnostics collection is reused.\n        if (!this._diagnostics) {\n            this._diagnostics = this._clientOptions.diagnosticCollectionName\n                ? vscode_1.languages.createDiagnosticCollection(this._clientOptions.diagnosticCollectionName)\n                : vscode_1.languages.createDiagnosticCollection();\n        }\n        this.state = ClientState.Starting;\n        this.resolveConnection().then((connection) => {\n            connection.onLogMessage((message) => {\n                switch (message.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        this.error(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        this.warn(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        this.info(message.message, undefined, false);\n                        break;\n                    default:\n                        this.outputChannel.appendLine(message.message);\n                }\n            });\n            connection.onShowMessage((message) => {\n                switch (message.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        vscode_1.window.showErrorMessage(message.message);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        vscode_1.window.showWarningMessage(message.message);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        vscode_1.window.showInformationMessage(message.message);\n                        break;\n                    default:\n                        vscode_1.window.showInformationMessage(message.message);\n                }\n            });\n            connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, (params) => {\n                let messageFunc;\n                switch (params.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        messageFunc = vscode_1.window.showErrorMessage;\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        messageFunc = vscode_1.window.showWarningMessage;\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        messageFunc = vscode_1.window.showInformationMessage;\n                        break;\n                    default:\n                        messageFunc = vscode_1.window.showInformationMessage;\n                }\n                let actions = params.actions || [];\n                return messageFunc(params.message, ...actions);\n            });\n            connection.onTelemetry((data) => {\n                this._telemetryEmitter.fire(data);\n            });\n            connection.listen();\n            // Error is handled in the initialize call.\n            return this.initialize(connection);\n        }).then(undefined, (error) => {\n            this.state = ClientState.StartFailed;\n            this._onReadyCallbacks.reject(error);\n            this.error('Starting client failed', error);\n            vscode_1.window.showErrorMessage(`Couldn't start client ${this._name}`);\n        });\n        return new vscode_1.Disposable(() => {\n            if (this.needsStop()) {\n                this.stop();\n            }\n        });\n    }\n    resolveConnection() {\n        if (!this._connectionPromise) {\n            this._connectionPromise = this.createConnection();\n        }\n        return this._connectionPromise;\n    }\n    initialize(connection) {\n        this.refreshTrace(connection, false);\n        let initOption = this._clientOptions.initializationOptions;\n        let rootPath = this._clientOptions.workspaceFolder\n            ? this._clientOptions.workspaceFolder.uri.fsPath\n            : this._clientGetRootPath();\n        let initParams = {\n            processId: process.pid,\n            clientInfo: {\n                name: 'vscode',\n                version: vscode_1.version\n            },\n            rootPath: rootPath ? rootPath : null,\n            rootUri: rootPath ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) : null,\n            capabilities: this.computeClientCapabilities(),\n            initializationOptions: Is.func(initOption) ? initOption() : initOption,\n            trace: vscode_languageserver_protocol_1.Trace.toString(this._trace),\n            workspaceFolders: null\n        };\n        this.fillInitializeParams(initParams);\n        if (this._clientOptions.progressOnInitialization) {\n            const token = UUID.generateUuid();\n            const part = new progressPart_1.ProgressPart(connection, token);\n            initParams.workDoneToken = token;\n            return this.doInitialize(connection, initParams).then((result) => {\n                part.done();\n                return result;\n            }, (error) => {\n                part.cancel();\n                throw error;\n            });\n        }\n        else {\n            return this.doInitialize(connection, initParams);\n        }\n    }\n    doInitialize(connection, initParams) {\n        return connection.initialize(initParams).then((result) => {\n            this._resolvedConnection = connection;\n            this._initializeResult = result;\n            this.state = ClientState.Running;\n            let textDocumentSyncOptions = undefined;\n            if (Is.number(result.capabilities.textDocumentSync)) {\n                if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n                    textDocumentSyncOptions = {\n                        openClose: false,\n                        change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,\n                        save: undefined\n                    };\n                }\n                else {\n                    textDocumentSyncOptions = {\n                        openClose: true,\n                        change: result.capabilities.textDocumentSync,\n                        save: {\n                            includeText: false\n                        }\n                    };\n                }\n            }\n            else if (result.capabilities.textDocumentSync !== void 0 && result.capabilities.textDocumentSync !== null) {\n                textDocumentSyncOptions = result.capabilities.textDocumentSync;\n            }\n            this._capabilities = Object.assign({}, result.capabilities, { resolvedTextDocumentSync: textDocumentSyncOptions });\n            connection.onDiagnostics(params => this.handleDiagnostics(params));\n            connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params => this.handleRegistrationRequest(params));\n            // See https://github.com/Microsoft/vscode-languageserver-node/issues/199\n            connection.onRequest('client/registerFeature', params => this.handleRegistrationRequest(params));\n            connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params => this.handleUnregistrationRequest(params));\n            // See https://github.com/Microsoft/vscode-languageserver-node/issues/199\n            connection.onRequest('client/unregisterFeature', params => this.handleUnregistrationRequest(params));\n            connection.onRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params => this.handleApplyWorkspaceEdit(params));\n            connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});\n            this.hookFileEvents(connection);\n            this.hookConfigurationChanged(connection);\n            this.initializeFeatures(connection);\n            this._onReadyCallbacks.resolve();\n            return result;\n        }).then(undefined, (error) => {\n            if (this._clientOptions.initializationFailedHandler) {\n                if (this._clientOptions.initializationFailedHandler(error)) {\n                    this.initialize(connection);\n                }\n                else {\n                    this.stop();\n                    this._onReadyCallbacks.reject(error);\n                }\n            }\n            else if (error instanceof vscode_languageserver_protocol_1.ResponseError && error.data && error.data.retry) {\n                vscode_1.window.showErrorMessage(error.message, { title: 'Retry', id: 'retry' }).then(item => {\n                    if (item && item.id === 'retry') {\n                        this.initialize(connection);\n                    }\n                    else {\n                        this.stop();\n                        this._onReadyCallbacks.reject(error);\n                    }\n                });\n            }\n            else {\n                if (error && error.message) {\n                    vscode_1.window.showErrorMessage(error.message);\n                }\n                this.error('Server initialization failed.', error);\n                this.stop();\n                this._onReadyCallbacks.reject(error);\n            }\n            throw error;\n        });\n    }\n    _clientGetRootPath() {\n        let folders = vscode_1.workspace.workspaceFolders;\n        if (!folders || folders.length === 0) {\n            return undefined;\n        }\n        let folder = folders[0];\n        if (folder.uri.scheme === 'file') {\n            return folder.uri.fsPath;\n        }\n        return undefined;\n    }\n    stop() {\n        this._initializeResult = undefined;\n        if (!this._connectionPromise) {\n            this.state = ClientState.Stopped;\n            return Promise.resolve();\n        }\n        if (this.state === ClientState.Stopping && this._onStop) {\n            return this._onStop;\n        }\n        this.state = ClientState.Stopping;\n        this.cleanUp(false);\n        // unhook listeners\n        return this._onStop = this.resolveConnection().then(connection => {\n            return connection.shutdown().then(() => {\n                connection.exit();\n                connection.dispose();\n                this.state = ClientState.Stopped;\n                this.cleanUpChannel();\n                this._onStop = undefined;\n                this._connectionPromise = undefined;\n                this._resolvedConnection = undefined;\n            });\n        });\n    }\n    cleanUp(channel = true, diagnostics = true) {\n        if (this._listeners) {\n            this._listeners.forEach(listener => listener.dispose());\n            this._listeners = undefined;\n        }\n        if (this._providers) {\n            this._providers.forEach(provider => provider.dispose());\n            this._providers = undefined;\n        }\n        if (this._syncedDocuments) {\n            this._syncedDocuments.clear();\n        }\n        for (let handler of this._dynamicFeatures.values()) {\n            handler.dispose();\n        }\n        if (channel) {\n            this.cleanUpChannel();\n        }\n        if (diagnostics && this._diagnostics) {\n            this._diagnostics.dispose();\n            this._diagnostics = undefined;\n        }\n    }\n    cleanUpChannel() {\n        if (this._outputChannel && this._disposeOutputChannel) {\n            this._outputChannel.dispose();\n            this._outputChannel = undefined;\n        }\n    }\n    notifyFileEvent(event) {\n        var _a, _b;\n        const client = this;\n        function didChangeWatchedFile(event) {\n            client._fileEvents.push(event);\n            client._fileEventDelayer.trigger(() => {\n                client.onReady().then(() => {\n                    client.resolveConnection().then(connection => {\n                        if (client.isConnectionActive()) {\n                            client.forceDocumentSync();\n                            connection.didChangeWatchedFiles({ changes: client._fileEvents });\n                        }\n                        client._fileEvents = [];\n                    });\n                }, (error) => {\n                    client.error(`Notify file events failed.`, error);\n                });\n            });\n        }\n        const workSpaceMiddleware = (_a = this.clientOptions.middleware) === null || _a === void 0 ? void 0 : _a.workspace;\n        ((_b = workSpaceMiddleware) === null || _b === void 0 ? void 0 : _b.didChangeWatchedFile) ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event);\n    }\n    forceDocumentSync() {\n        this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method).forceDelivery();\n    }\n    handleDiagnostics(params) {\n        if (!this._diagnostics) {\n            return;\n        }\n        let uri = this._p2c.asUri(params.uri);\n        let diagnostics = this._p2c.asDiagnostics(params.diagnostics);\n        let middleware = this.clientOptions.middleware;\n        if (middleware.handleDiagnostics) {\n            middleware.handleDiagnostics(uri, diagnostics, (uri, diagnostics) => this.setDiagnostics(uri, diagnostics));\n        }\n        else {\n            this.setDiagnostics(uri, diagnostics);\n        }\n    }\n    setDiagnostics(uri, diagnostics) {\n        if (!this._diagnostics) {\n            return;\n        }\n        this._diagnostics.set(uri, diagnostics);\n    }\n    createConnection() {\n        let errorHandler = (error, message, count) => {\n            this.handleConnectionError(error, message, count);\n        };\n        let closeHandler = () => {\n            this.handleConnectionClosed();\n        };\n        return this.createMessageTransports(this._clientOptions.stdioEncoding || 'utf8').then((transports) => {\n            return createConnection(transports.reader, transports.writer, errorHandler, closeHandler);\n        });\n    }\n    handleConnectionClosed() {\n        // Check whether this is a normal shutdown in progress or the client stopped normally.\n        if (this.state === ClientState.Stopping || this.state === ClientState.Stopped) {\n            return;\n        }\n        try {\n            if (this._resolvedConnection) {\n                this._resolvedConnection.dispose();\n            }\n        }\n        catch (error) {\n            // Disposing a connection could fail if error cases.\n        }\n        let action = CloseAction.DoNotRestart;\n        try {\n            action = this._clientOptions.errorHandler.closed();\n        }\n        catch (error) {\n            // Ignore errors coming from the error handler.\n        }\n        this._connectionPromise = undefined;\n        this._resolvedConnection = undefined;\n        if (action === CloseAction.DoNotRestart) {\n            this.error('Connection to server got closed. Server will not be restarted.');\n            this.state = ClientState.Stopped;\n            this.cleanUp(false, true);\n        }\n        else if (action === CloseAction.Restart) {\n            this.info('Connection to server got closed. Server will restart.');\n            this.cleanUp(false, false);\n            this.state = ClientState.Initial;\n            this.start();\n        }\n    }\n    handleConnectionError(error, message, count) {\n        let action = this._clientOptions.errorHandler.error(error, message, count);\n        if (action === ErrorAction.Shutdown) {\n            this.error('Connection to server is erroring. Shutting down server.');\n            this.stop();\n        }\n    }\n    hookConfigurationChanged(connection) {\n        vscode_1.workspace.onDidChangeConfiguration(() => {\n            this.refreshTrace(connection, true);\n        });\n    }\n    refreshTrace(connection, sendNotification = false) {\n        let config = vscode_1.workspace.getConfiguration(this._id);\n        let trace = vscode_languageserver_protocol_1.Trace.Off;\n        let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;\n        if (config) {\n            const traceConfig = config.get('trace.server', 'off');\n            if (typeof traceConfig === 'string') {\n                trace = vscode_languageserver_protocol_1.Trace.fromString(traceConfig);\n            }\n            else {\n                trace = vscode_languageserver_protocol_1.Trace.fromString(config.get('trace.server.verbosity', 'off'));\n                traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString(config.get('trace.server.format', 'text'));\n            }\n        }\n        this._trace = trace;\n        this._traceFormat = traceFormat;\n        connection.trace(this._trace, this._tracer, {\n            sendNotification,\n            traceFormat: this._traceFormat\n        });\n    }\n    hookFileEvents(_connection) {\n        let fileEvents = this._clientOptions.synchronize.fileEvents;\n        if (!fileEvents) {\n            return;\n        }\n        let watchers;\n        if (Is.array(fileEvents)) {\n            watchers = fileEvents;\n        }\n        else {\n            watchers = [fileEvents];\n        }\n        if (!watchers) {\n            return;\n        }\n        this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type.method).registerRaw(UUID.generateUuid(), watchers);\n    }\n    registerFeatures(features) {\n        for (let feature of features) {\n            this.registerFeature(feature);\n        }\n    }\n    registerFeature(feature) {\n        this._features.push(feature);\n        if (DynamicFeature.is(feature)) {\n            let messages = feature.messages;\n            if (Array.isArray(messages)) {\n                for (let message of messages) {\n                    this._method2Message.set(message.method, message);\n                    this._dynamicFeatures.set(message.method, feature);\n                }\n            }\n            else {\n                this._method2Message.set(messages.method, messages);\n                this._dynamicFeatures.set(messages.method, feature);\n            }\n        }\n    }\n    getFeature(request) {\n        return this._dynamicFeatures.get(request);\n    }\n    registerBuiltinFeatures() {\n        this.registerFeature(new ConfigurationFeature(this));\n        this.registerFeature(new DidOpenTextDocumentFeature(this, this._syncedDocuments));\n        this.registerFeature(new DidChangeTextDocumentFeature(this));\n        this.registerFeature(new WillSaveFeature(this));\n        this.registerFeature(new WillSaveWaitUntilFeature(this));\n        this.registerFeature(new DidSaveTextDocumentFeature(this));\n        this.registerFeature(new DidCloseTextDocumentFeature(this, this._syncedDocuments));\n        this.registerFeature(new FileSystemWatcherFeature(this, (event) => this.notifyFileEvent(event)));\n        this.registerFeature(new CompletionItemFeature(this));\n        this.registerFeature(new HoverFeature(this));\n        this.registerFeature(new SignatureHelpFeature(this));\n        this.registerFeature(new DefinitionFeature(this));\n        this.registerFeature(new ReferencesFeature(this));\n        this.registerFeature(new DocumentHighlightFeature(this));\n        this.registerFeature(new DocumentSymbolFeature(this));\n        this.registerFeature(new WorkspaceSymbolFeature(this));\n        this.registerFeature(new CodeActionFeature(this));\n        this.registerFeature(new CodeLensFeature(this));\n        this.registerFeature(new DocumentFormattingFeature(this));\n        this.registerFeature(new DocumentRangeFormattingFeature(this));\n        this.registerFeature(new DocumentOnTypeFormattingFeature(this));\n        this.registerFeature(new RenameFeature(this));\n        this.registerFeature(new DocumentLinkFeature(this));\n        this.registerFeature(new ExecuteCommandFeature(this));\n    }\n    fillInitializeParams(params) {\n        for (let feature of this._features) {\n            if (Is.func(feature.fillInitializeParams)) {\n                feature.fillInitializeParams(params);\n            }\n        }\n    }\n    computeClientCapabilities() {\n        let result = {};\n        ensure(result, 'workspace').applyEdit = true;\n        let workspaceEdit = ensure(ensure(result, 'workspace'), 'workspaceEdit');\n        workspaceEdit.documentChanges = true;\n        workspaceEdit.resourceOperations = [vscode_languageserver_protocol_1.ResourceOperationKind.Create, vscode_languageserver_protocol_1.ResourceOperationKind.Rename, vscode_languageserver_protocol_1.ResourceOperationKind.Delete];\n        workspaceEdit.failureHandling = vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional;\n        let diagnostics = ensure(ensure(result, 'textDocument'), 'publishDiagnostics');\n        diagnostics.relatedInformation = true;\n        diagnostics.versionSupport = false;\n        diagnostics.tagSupport = { valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated] };\n        for (let feature of this._features) {\n            feature.fillClientCapabilities(result);\n        }\n        return result;\n    }\n    initializeFeatures(_connection) {\n        let documentSelector = this._clientOptions.documentSelector;\n        for (let feature of this._features) {\n            feature.initialize(this._capabilities, documentSelector);\n        }\n    }\n    handleRegistrationRequest(params) {\n        return new Promise((resolve, reject) => {\n            for (let registration of params.registrations) {\n                const feature = this._dynamicFeatures.get(registration.method);\n                if (!feature) {\n                    reject(new Error(`No feature implementation for ${registration.method} found. Registration failed.`));\n                    return;\n                }\n                const options = registration.registerOptions || {};\n                options.documentSelector = options.documentSelector || this._clientOptions.documentSelector;\n                const data = {\n                    id: registration.id,\n                    registerOptions: options\n                };\n                feature.register(this._method2Message.get(registration.method), data);\n            }\n            resolve();\n        });\n    }\n    handleUnregistrationRequest(params) {\n        return new Promise((resolve, reject) => {\n            for (let unregistration of params.unregisterations) {\n                const feature = this._dynamicFeatures.get(unregistration.method);\n                if (!feature) {\n                    reject(new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`));\n                    return;\n                }\n                feature.unregister(unregistration.id);\n            }\n            resolve();\n        });\n    }\n    handleApplyWorkspaceEdit(params) {\n        // This is some sort of workaround since the version check should be done by VS Code in the Workspace.applyEdit.\n        // However doing it here adds some safety since the server can lag more behind then an extension.\n        let workspaceEdit = params.edit;\n        let openTextDocuments = new Map();\n        vscode_1.workspace.textDocuments.forEach((document) => openTextDocuments.set(document.uri.toString(), document));\n        let versionMismatch = false;\n        if (workspaceEdit.documentChanges) {\n            for (const change of workspaceEdit.documentChanges) {\n                if (vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && change.textDocument.version && change.textDocument.version >= 0) {\n                    let textDocument = openTextDocuments.get(change.textDocument.uri);\n                    if (textDocument && textDocument.version !== change.textDocument.version) {\n                        versionMismatch = true;\n                        break;\n                    }\n                }\n            }\n        }\n        if (versionMismatch) {\n            return Promise.resolve({ applied: false });\n        }\n        return Is.asPromise(vscode_1.workspace.applyEdit(this._p2c.asWorkspaceEdit(params.edit)).then((value) => { return { applied: value }; }));\n    }\n    logFailedRequest(type, error) {\n        // If we get a request cancel or a content modified don't log anything.\n        if (error instanceof vscode_languageserver_protocol_1.ResponseError && (error.code === vscode_languageserver_protocol_1.ErrorCodes.RequestCancelled || error.code === vscode_languageserver_protocol_1.ErrorCodes.ContentModified)) {\n            return;\n        }\n        this.error(`Request ${type.method} failed.`, error);\n    }\n}\nexports.BaseLanguageClient = BaseLanguageClient;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass ColorProviderFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentColorRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'colorProvider').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideColorPresentations: (color, context, token) => {\n                const client = this._client;\n                const provideColorPresentations = (color, context, token) => {\n                    const requestParams = {\n                        color,\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(context.document),\n                        range: client.code2ProtocolConverter.asRange(context.range)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, requestParams, token).then(this.asColorPresentations.bind(this), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideColorPresentations\n                    ? middleware.provideColorPresentations(color, context, token, provideColorPresentations)\n                    : provideColorPresentations(color, context, token);\n            },\n            provideDocumentColors: (document, token) => {\n                const client = this._client;\n                const provideDocumentColors = (document, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, requestParams, token).then(this.asColorInformations.bind(this), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentColors\n                    ? middleware.provideDocumentColors(document, token, provideDocumentColors)\n                    : provideDocumentColors(document, token);\n            }\n        };\n        return [vscode_1.languages.registerColorProvider(options.documentSelector, provider), provider];\n    }\n    asColor(color) {\n        return new vscode_1.Color(color.red, color.green, color.blue, color.alpha);\n    }\n    asColorInformations(colorInformation) {\n        if (Array.isArray(colorInformation)) {\n            return colorInformation.map(ci => {\n                return new vscode_1.ColorInformation(this._client.protocol2CodeConverter.asRange(ci.range), this.asColor(ci.color));\n            });\n        }\n        return [];\n    }\n    asColorPresentations(colorPresentations) {\n        if (Array.isArray(colorPresentations)) {\n            return colorPresentations.map(cp => {\n                let presentation = new vscode_1.ColorPresentation(cp.label);\n                presentation.additionalTextEdits = this._client.protocol2CodeConverter.asTextEdits(cp.additionalTextEdits);\n                presentation.textEdit = this._client.protocol2CodeConverter.asTextEdit(cp.textEdit);\n                return presentation;\n            });\n        }\n        return [];\n    }\n}\nexports.ColorProviderFeature = ColorProviderFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nclass ConfigurationFeature {\n    constructor(_client) {\n        this._client = _client;\n    }\n    fillClientCapabilities(capabilities) {\n        capabilities.workspace = capabilities.workspace || {};\n        capabilities.workspace.configuration = true;\n    }\n    initialize() {\n        let client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, (params, token) => {\n            let configuration = (params) => {\n                let result = [];\n                for (let item of params.items) {\n                    let resource = item.scopeUri !== void 0 && item.scopeUri !== null ? this._client.protocol2CodeConverter.asUri(item.scopeUri) : undefined;\n                    result.push(this.getConfiguration(resource, item.section !== null ? item.section : undefined));\n                }\n                return result;\n            };\n            let middleware = client.clientOptions.middleware.workspace;\n            return middleware && middleware.configuration\n                ? middleware.configuration(params, token, configuration)\n                : configuration(params, token);\n        });\n    }\n    getConfiguration(resource, section) {\n        let result = null;\n        if (section) {\n            let index = section.lastIndexOf('.');\n            if (index === -1) {\n                result = vscode_1.workspace.getConfiguration(undefined, resource).get(section);\n            }\n            else {\n                let config = vscode_1.workspace.getConfiguration(section.substr(0, index), resource);\n                if (config) {\n                    result = config.get(section.substr(index + 1));\n                }\n            }\n        }\n        else {\n            let config = vscode_1.workspace.getConfiguration(undefined, resource);\n            result = {};\n            for (let key of Object.keys(config)) {\n                if (config.has(key)) {\n                    result[key] = config.get(key);\n                }\n            }\n        }\n        if (!result) {\n            return null;\n        }\n        return result;\n    }\n}\nexports.ConfigurationFeature = ConfigurationFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass ImplementationFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.ImplementationRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let implementationSupport = ensure(ensure(capabilites, 'textDocument'), 'implementation');\n        implementationSupport.dynamicRegistration = true;\n        implementationSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideImplementation: (document, position, token) => {\n                const client = this._client;\n                const provideImplementation = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDefinitionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideImplementation\n                    ? middleware.provideImplementation(document, position, token, provideImplementation)\n                    : provideImplementation(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerImplementationProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.ImplementationFeature = ImplementationFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass TypeDefinitionFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.TypeDefinitionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'typeDefinition').dynamicRegistration = true;\n        let typeDefinitionSupport = ensure(ensure(capabilites, 'textDocument'), 'typeDefinition');\n        typeDefinitionSupport.dynamicRegistration = true;\n        typeDefinitionSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideTypeDefinition: (document, position, token) => {\n                const client = this._client;\n                const provideTypeDefinition = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDefinitionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideTypeDefinition\n                    ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition)\n                    : provideTypeDefinition(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerTypeDefinitionProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.TypeDefinitionFeature = TypeDefinitionFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst UUID = require(\"./utils/uuid\");\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nfunction access(target, key) {\n    if (target === void 0) {\n        return undefined;\n    }\n    return target[key];\n}\nfunction arrayDiff(left, right) {\n    return left.filter(element => right.indexOf(element) < 0);\n}\nexports.arrayDiff = arrayDiff;\nclass WorkspaceFoldersFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._listeners = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;\n    }\n    fillInitializeParams(params) {\n        let folders = vscode_1.workspace.workspaceFolders;\n        this.initializeWithFolders(folders);\n        if (folders === void 0) {\n            params.workspaceFolders = null;\n        }\n        else {\n            params.workspaceFolders = folders.map(folder => this.asProtocol(folder));\n        }\n    }\n    initializeWithFolders(currentWorkspaceFolders) {\n        this._initialFolders = currentWorkspaceFolders;\n    }\n    fillClientCapabilities(capabilities) {\n        capabilities.workspace = capabilities.workspace || {};\n        capabilities.workspace.workspaceFolders = true;\n    }\n    initialize(capabilities) {\n        let client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {\n            let workspaceFolders = () => {\n                let folders = vscode_1.workspace.workspaceFolders;\n                if (folders === void 0) {\n                    return null;\n                }\n                let result = folders.map((folder) => {\n                    return this.asProtocol(folder);\n                });\n                return result;\n            };\n            let middleware = client.clientOptions.middleware.workspace;\n            return middleware && middleware.workspaceFolders\n                ? middleware.workspaceFolders(token, workspaceFolders)\n                : workspaceFolders(token);\n        });\n        let value = access(access(access(capabilities, 'workspace'), 'workspaceFolders'), 'changeNotifications');\n        let id;\n        if (typeof value === 'string') {\n            id = value;\n        }\n        else if (value === true) {\n            id = UUID.generateUuid();\n        }\n        if (id) {\n            this.register(this.messages, {\n                id: id,\n                registerOptions: undefined\n            });\n        }\n    }\n    sendInitialEvent(currentWorkspaceFolders) {\n        if (this._initialFolders && currentWorkspaceFolders) {\n            const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);\n            const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);\n            if (added.length > 0 || removed.length > 0) {\n                this.doSendEvent(added, removed);\n            }\n        }\n        else if (this._initialFolders) {\n            this.doSendEvent([], this._initialFolders);\n        }\n        else if (currentWorkspaceFolders) {\n            this.doSendEvent(currentWorkspaceFolders, []);\n        }\n    }\n    doSendEvent(addedFolders, removedFolders) {\n        let params = {\n            event: {\n                added: addedFolders.map(folder => this.asProtocol(folder)),\n                removed: removedFolders.map(folder => this.asProtocol(folder))\n            }\n        };\n        this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);\n    }\n    register(_message, data) {\n        let id = data.id;\n        let client = this._client;\n        let disposable = vscode_1.workspace.onDidChangeWorkspaceFolders((event) => {\n            let didChangeWorkspaceFolders = (event) => {\n                this.doSendEvent(event.added, event.removed);\n            };\n            let middleware = client.clientOptions.middleware.workspace;\n            middleware && middleware.didChangeWorkspaceFolders\n                ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders)\n                : didChangeWorkspaceFolders(event);\n        });\n        this._listeners.set(id, disposable);\n        this.sendInitialEvent(vscode_1.workspace.workspaceFolders);\n    }\n    unregister(id) {\n        let disposable = this._listeners.get(id);\n        if (disposable === void 0) {\n            return;\n        }\n        this._listeners.delete(id);\n        disposable.dispose();\n    }\n    dispose() {\n        for (let disposable of this._listeners.values()) {\n            disposable.dispose();\n        }\n        this._listeners.clear();\n    }\n    asProtocol(workspaceFolder) {\n        if (workspaceFolder === void 0) {\n            return null;\n        }\n        return { uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), name: workspaceFolder.name };\n    }\n}\nexports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass FoldingRangeFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.FoldingRangeRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let capability = ensure(ensure(capabilites, 'textDocument'), 'foldingRange');\n        capability.dynamicRegistration = true;\n        capability.rangeLimit = 5000;\n        capability.lineFoldingOnly = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideFoldingRanges: (document, context, token) => {\n                const client = this._client;\n                const provideFoldingRanges = (document, _, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token).then(this.asFoldingRanges.bind(this), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideFoldingRanges\n                    ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges)\n                    : provideFoldingRanges(document, context, token);\n            }\n        };\n        return [vscode_1.languages.registerFoldingRangeProvider(options.documentSelector, provider), provider];\n    }\n    asFoldingRangeKind(kind) {\n        if (kind) {\n            switch (kind) {\n                case vscode_languageserver_protocol_1.FoldingRangeKind.Comment:\n                    return vscode_1.FoldingRangeKind.Comment;\n                case vscode_languageserver_protocol_1.FoldingRangeKind.Imports:\n                    return vscode_1.FoldingRangeKind.Imports;\n                case vscode_languageserver_protocol_1.FoldingRangeKind.Region:\n                    return vscode_1.FoldingRangeKind.Region;\n            }\n        }\n        return void 0;\n    }\n    asFoldingRanges(foldingRanges) {\n        if (Array.isArray(foldingRanges)) {\n            return foldingRanges.map(r => {\n                return new vscode_1.FoldingRange(r.startLine, r.endLine, this.asFoldingRangeKind(r.kind));\n            });\n        }\n        return [];\n    }\n}\nexports.FoldingRangeFeature = FoldingRangeFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass DeclarationFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DeclarationRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const declarationSupport = ensure(ensure(capabilites, 'textDocument'), 'declaration');\n        declarationSupport.dynamicRegistration = true;\n        declarationSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDeclaration: (document, position, token) => {\n                const client = this._client;\n                const provideDeclaration = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDeclarationResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDeclaration\n                    ? middleware.provideDeclaration(document, position, token, provideDeclaration)\n                    : provideDeclaration(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDeclarationProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.DeclarationFeature = DeclarationFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = Object.create(null);\n    }\n    return target[key];\n}\nclass SelectionRangeFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SelectionRangeRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let capability = ensure(ensure(capabilites, 'textDocument'), 'selectionRange');\n        capability.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideSelectionRanges: (document, positions, token) => {\n                const client = this._client;\n                const provideSelectionRanges = (document, positions, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        positions: client.code2ProtocolConverter.asPositions(positions)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, requestParams, token).then((ranges) => client.protocol2CodeConverter.asSelectionRanges(ranges), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideSelectionRanges\n                    ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges)\n                    : provideSelectionRanges(document, positions, token);\n            }\n        };\n        return [vscode_1.languages.registerSelectionRangeProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.SelectionRangeFeature = SelectionRangeFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst progressPart_1 = require(\"./progressPart\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = Object.create(null);\n    }\n    return target[key];\n}\nclass ProgressFeature {\n    constructor(_client) {\n        this._client = _client;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(capabilities, 'window').workDoneProgress = true;\n    }\n    initialize() {\n        let client = this._client;\n        let createHandler = (params) => {\n            new progressPart_1.ProgressPart(this._client, params.token);\n        };\n        client.onRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, createHandler);\n    }\n}\nexports.ProgressFeature = ProgressFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar protocol2code;\n(function (protocol2code) {\n    function asCallHierarchyItem(converter, item) {\n        if (item === null) {\n            return undefined;\n        }\n        let result = new vscode_1.CallHierarchyItem(converter.asSymbolKind(item.kind), item.name, item.detail || '', converter.asUri(item.uri), converter.asRange(item.range), converter.asRange(item.selectionRange));\n        if (item.tags !== undefined) {\n            result.tags = converter.asSymbolTags(item.tags);\n        }\n        return result;\n    }\n    protocol2code.asCallHierarchyItem = asCallHierarchyItem;\n    function asCallHierarchyItems(converter, items) {\n        if (items === null) {\n            return undefined;\n        }\n        let result = items.map(item => asCallHierarchyItem(converter, item));\n        return result[0];\n    }\n    protocol2code.asCallHierarchyItems = asCallHierarchyItems;\n    function asCallHierarchyIncomingCall(converter, item) {\n        return new vscode_1.CallHierarchyIncomingCall(asCallHierarchyItem(converter, item.from), converter.asRanges(item.fromRanges));\n    }\n    protocol2code.asCallHierarchyIncomingCall = asCallHierarchyIncomingCall;\n    function asCallHierarchyIncomingCalls(converter, items) {\n        if (items === null) {\n            return undefined;\n        }\n        return items.map(item => asCallHierarchyIncomingCall(converter, item));\n    }\n    protocol2code.asCallHierarchyIncomingCalls = asCallHierarchyIncomingCalls;\n    function asCallHierarchyOutgoingCall(converter, item) {\n        return new vscode_1.CallHierarchyOutgoingCall(asCallHierarchyItem(converter, item.to), converter.asRanges(item.fromRanges));\n    }\n    protocol2code.asCallHierarchyOutgoingCall = asCallHierarchyOutgoingCall;\n    function asCallHierarchyOutgoingCalls(converter, items) {\n        if (items === null) {\n            return undefined;\n        }\n        return items.map(item => asCallHierarchyOutgoingCall(converter, item));\n    }\n    protocol2code.asCallHierarchyOutgoingCalls = asCallHierarchyOutgoingCalls;\n})(protocol2code || (protocol2code = {}));\nvar code2protocol;\n(function (code2protocol) {\n    function asCallHierarchyItem(converter, value) {\n        const result = {\n            name: value.name,\n            kind: converter.asSymbolKind(value.kind),\n            uri: converter.asUri(value.uri),\n            range: converter.asRange(value.range),\n            selectionRange: converter.asRange(value.selectionRange)\n        };\n        if (value.detail !== undefined && value.detail.length > 0) {\n            result.detail = value.detail;\n        }\n        if (value.tags !== undefined) {\n            result.tags = converter.asSymbolTags(value.tags);\n        }\n        return result;\n    }\n    code2protocol.asCallHierarchyItem = asCallHierarchyItem;\n})(code2protocol || (code2protocol = {}));\nclass CallHierarchyProvider {\n    constructor(client) {\n        this.client = client;\n        this.middleware = client.clientOptions.middleware;\n    }\n    prepareCallHierarchy(document, position, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const prepareCallHierarchy = (document, position, token) => {\n            const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);\n            return client.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, params, token).then((result) => {\n                return protocol2code.asCallHierarchyItems(this.client.protocol2CodeConverter, result);\n            }, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, error);\n                return Promise.resolve(null);\n            });\n        };\n        return middleware.prepareCallHierarchy\n            ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy)\n            : prepareCallHierarchy(document, position, token);\n    }\n    provideCallHierarchyIncomingCalls(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideCallHierarchyIncomingCalls = (item, token) => {\n            const params = {\n                item: code2protocol.asCallHierarchyItem(client.code2ProtocolConverter, item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, params, token).then((result) => {\n                return protocol2code.asCallHierarchyIncomingCalls(client.protocol2CodeConverter, result);\n            }, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, error);\n                return Promise.resolve(null);\n            });\n        };\n        return middleware.provideCallHierarchyIncomingCalls\n            ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls)\n            : provideCallHierarchyIncomingCalls(item, token);\n    }\n    provideCallHierarchyOutgoingCalls(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideCallHierarchyOutgoingCalls = (item, token) => {\n            const params = {\n                item: code2protocol.asCallHierarchyItem(client.code2ProtocolConverter, item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, params, token).then((result) => {\n                return protocol2code.asCallHierarchyOutgoingCalls(client.protocol2CodeConverter, result);\n            }, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, error);\n                return Promise.resolve(null);\n            });\n        };\n        return middleware.provideCallHierarchyOutgingCalls\n            ? middleware.provideCallHierarchyOutgingCalls(item, token, provideCallHierarchyOutgoingCalls)\n            : provideCallHierarchyOutgoingCalls(item, token);\n    }\n}\nclass CallHierarchyFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type);\n    }\n    fillClientCapabilities(cap) {\n        const capabilites = cap;\n        const capability = ensure(ensure(capabilites, 'textDocument'), 'callHierarchy');\n        capability.dynamicRegistration = true;\n    }\n    initialize(cap, documentSelector) {\n        const capabilities = cap;\n        const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const client = this._client;\n        const provider = new CallHierarchyProvider(client);\n        return [vscode_1.languages.registerCallHierarchyProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.CallHierarchyFeature = CallHierarchyFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode = require(\"vscode\");\nconst client_1 = require(\"./client\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar protocol2code;\n(function (protocol2code) {\n    function asSemanticTokens(value) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        return new vscode.SemanticTokens(new Uint32Array(value.data), value.resultId);\n    }\n    protocol2code.asSemanticTokens = asSemanticTokens;\n    function asSemanticTokensEdit(value) {\n        return new vscode.SemanticTokensEdit(value.start, value.deleteCount, value.data !== undefined ? new Uint32Array(value.data) : undefined);\n    }\n    protocol2code.asSemanticTokensEdit = asSemanticTokensEdit;\n    function asSemanticTokensEdits(value) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        return new vscode.SemanticTokensEdits(value.edits.map(asSemanticTokensEdit), value.resultId);\n    }\n    protocol2code.asSemanticTokensEdits = asSemanticTokensEdits;\n    function asLegend(value) {\n        return value;\n    }\n    protocol2code.asLegend = asLegend;\n})(protocol2code || (protocol2code = {}));\nclass SemanticTokensFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type);\n    }\n    fillClientCapabilities(cap) {\n        const capabilites = cap;\n        let capability = ensure(ensure(capabilites, 'textDocument'), 'semanticTokens');\n        capability.dynamicRegistration = true;\n        capability.tokenTypes = [\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.comment,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.keyword,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.number,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.regexp,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.operator,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.namespace,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.type,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.struct,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.class,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.interface,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.enum,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.typeParameter,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.function,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.member,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.macro,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.variable,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.parameter,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.property,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.label\n        ];\n        capability.tokenModifiers = [\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.declaration,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.documentation,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.static,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.abstract,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.deprecated,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.async,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.readonly\n        ];\n    }\n    initialize(cap, documentSelector) {\n        const capabilities = cap;\n        let [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const hasEditProvider = options.documentProvider !== undefined && typeof options.documentProvider !== 'boolean' && options.documentProvider.edits === true;\n        const documentProvider = {\n            provideDocumentSemanticTokens: (document, token) => {\n                const client = this._client;\n                const middleware = client.clientOptions.middleware;\n                const provideDocumentSemanticTokens = (document, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, params, token).then((result) => {\n                        return protocol2code.asSemanticTokens(result);\n                    }, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, error);\n                        return undefined;\n                    });\n                };\n                return middleware.provideDocumentSemanticTokens\n                    ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens)\n                    : provideDocumentSemanticTokens(document, token);\n            },\n            provideDocumentSemanticTokensEdits: hasEditProvider\n                ? (document, previousResultId, token) => {\n                    const client = this._client;\n                    const middleware = client.clientOptions.middleware;\n                    const provideDocumentSemanticTokensEdits = (document, previousResultId, token) => {\n                        const params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            previousResultId\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, params, token).then((result) => {\n                            if (vscode_languageserver_protocol_1.Proposed.SemanticTokens.is(result)) {\n                                return protocol2code.asSemanticTokens(result);\n                            }\n                            else {\n                                return protocol2code.asSemanticTokensEdits(result);\n                            }\n                        }, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, error);\n                            return undefined;\n                        });\n                    };\n                    return middleware.provideDocumentSemanticTokensEdits\n                        ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits)\n                        : provideDocumentSemanticTokensEdits(document, previousResultId, token);\n                }\n                : undefined\n        };\n        const hasRangeProvider = options.rangeProvider === true;\n        const rangeProvider = hasRangeProvider\n            ? {\n                provideDocumentRangeSemanticTokens: (document, range, token) => {\n                    const client = this._client;\n                    const middleware = client.clientOptions.middleware;\n                    const provideDocumentRangeSemanticTokens = (document, range, token) => {\n                        const params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            range: client.code2ProtocolConverter.asRange(range)\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, params, token).then((result) => {\n                            return protocol2code.asSemanticTokens(result);\n                        }, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, error);\n                            return undefined;\n                        });\n                    };\n                    return middleware.provideDocumentRangeSemanticTokens\n                        ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens)\n                        : provideDocumentRangeSemanticTokens(document, range, token);\n                }\n            }\n            : undefined;\n        const disposables = [];\n        const legend = protocol2code.asLegend(options.legend);\n        disposables.push(vscode.languages.registerDocumentSemanticTokensProvider(options.documentSelector, documentProvider, legend));\n        if (rangeProvider !== undefined) {\n            disposables.push(vscode.languages.registerDocumentRangeSemanticTokensProvider(options.documentSelector, rangeProvider, legend));\n        }\n        return [new vscode.Disposable(() => disposables.forEach(item => item.dispose())), { document: documentProvider, range: rangeProvider }];\n    }\n}\nexports.SemanticTokensFeature = SemanticTokensFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cp = require(\"child_process\");\nconst path_1 = require(\"path\");\nconst isWindows = (process.platform === 'win32');\nconst isMacintosh = (process.platform === 'darwin');\nconst isLinux = (process.platform === 'linux');\nfunction terminate(process, cwd) {\n    if (isWindows) {\n        try {\n            // This we run in Atom execFileSync is available.\n            // Ignore stderr since this is otherwise piped to parent.stderr\n            // which might be already closed.\n            let options = {\n                stdio: ['pipe', 'pipe', 'ignore']\n            };\n            if (cwd) {\n                options.cwd = cwd;\n            }\n            cp.execFileSync('taskkill', ['/T', '/F', '/PID', process.pid.toString()], options);\n            return true;\n        }\n        catch (err) {\n            return false;\n        }\n    }\n    else if (isLinux || isMacintosh) {\n        try {\n            var cmd = path_1.join(__dirname, 'terminateProcess.sh');\n            var result = cp.spawnSync(cmd, [process.pid.toString()]);\n            return result.error ? false : true;\n        }\n        catch (err) {\n            return false;\n        }\n    }\n    else {\n        process.kill('SIGKILL');\n        return true;\n    }\n}\nexports.terminate = terminate;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cp = require(\"child_process\");\nconst fs = require(\"fs\");\nconst SemVer = require(\"semver\");\nconst client_1 = require(\"./client\");\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst colorProvider_1 = require(\"./colorProvider\");\nconst configuration_1 = require(\"./configuration\");\nconst implementation_1 = require(\"./implementation\");\nconst typeDefinition_1 = require(\"./typeDefinition\");\nconst workspaceFolders_1 = require(\"./workspaceFolders\");\nconst foldingRange_1 = require(\"./foldingRange\");\nconst declaration_1 = require(\"./declaration\");\nconst selectionRange_1 = require(\"./selectionRange\");\nconst progress_1 = require(\"./progress\");\nconst callHierarchy_proposed_1 = require(\"./callHierarchy.proposed\");\nconst semanticTokens_proposed_1 = require(\"./semanticTokens.proposed\");\nconst Is = require(\"./utils/is\");\nconst processes_1 = require(\"./utils/processes\");\n__export(require(\"./client\"));\nconst REQUIRED_VSCODE_VERSION = '^1.41.0'; // do not change format, updated by `updateVSCode` script\nvar Executable;\n(function (Executable) {\n    function is(value) {\n        return Is.string(value.command);\n    }\n    Executable.is = is;\n})(Executable || (Executable = {}));\nvar TransportKind;\n(function (TransportKind) {\n    TransportKind[TransportKind[\"stdio\"] = 0] = \"stdio\";\n    TransportKind[TransportKind[\"ipc\"] = 1] = \"ipc\";\n    TransportKind[TransportKind[\"pipe\"] = 2] = \"pipe\";\n    TransportKind[TransportKind[\"socket\"] = 3] = \"socket\";\n})(TransportKind = exports.TransportKind || (exports.TransportKind = {}));\nvar Transport;\n(function (Transport) {\n    function isSocket(value) {\n        let candidate = value;\n        return candidate && candidate.kind === TransportKind.socket && Is.number(candidate.port);\n    }\n    Transport.isSocket = isSocket;\n})(Transport || (Transport = {}));\nvar NodeModule;\n(function (NodeModule) {\n    function is(value) {\n        return Is.string(value.module);\n    }\n    NodeModule.is = is;\n})(NodeModule || (NodeModule = {}));\nvar StreamInfo;\n(function (StreamInfo) {\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.writer !== void 0 && candidate.reader !== void 0;\n    }\n    StreamInfo.is = is;\n})(StreamInfo || (StreamInfo = {}));\nvar ChildProcessInfo;\n(function (ChildProcessInfo) {\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.process !== void 0 && typeof candidate.detached === 'boolean';\n    }\n    ChildProcessInfo.is = is;\n})(ChildProcessInfo || (ChildProcessInfo = {}));\nclass LanguageClient extends client_1.BaseLanguageClient {\n    constructor(arg1, arg2, arg3, arg4, arg5) {\n        let id;\n        let name;\n        let serverOptions;\n        let clientOptions;\n        let forceDebug;\n        if (Is.string(arg2)) {\n            id = arg1;\n            name = arg2;\n            serverOptions = arg3;\n            clientOptions = arg4;\n            forceDebug = !!arg5;\n        }\n        else {\n            id = arg1.toLowerCase();\n            name = arg1;\n            serverOptions = arg2;\n            clientOptions = arg3;\n            forceDebug = arg4;\n        }\n        if (forceDebug === void 0) {\n            forceDebug = false;\n        }\n        super(id, name, clientOptions);\n        this._serverOptions = serverOptions;\n        this._forceDebug = forceDebug;\n        try {\n            this.checkVersion();\n        }\n        catch (error) {\n            if (Is.string(error.message)) {\n                this.outputChannel.appendLine(error.message);\n            }\n            throw error;\n        }\n    }\n    checkVersion() {\n        let codeVersion = SemVer.parse(vscode_1.version);\n        if (!codeVersion) {\n            throw new Error(`No valid VS Code version detected. Version string is: ${vscode_1.version}`);\n        }\n        // Remove the insider pre-release since we stay API compatible.\n        if (codeVersion.prerelease && codeVersion.prerelease.length > 0) {\n            codeVersion.prerelease = [];\n        }\n        if (!SemVer.satisfies(codeVersion, REQUIRED_VSCODE_VERSION)) {\n            throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${vscode_1.version}`);\n        }\n    }\n    stop() {\n        return super.stop().then(() => {\n            if (this._serverProcess) {\n                let toCheck = this._serverProcess;\n                this._serverProcess = undefined;\n                if (this._isDetached === void 0 || !this._isDetached) {\n                    this.checkProcessDied(toCheck);\n                }\n                this._isDetached = undefined;\n            }\n        });\n    }\n    checkProcessDied(childProcess) {\n        if (!childProcess) {\n            return;\n        }\n        setTimeout(() => {\n            // Test if the process is still alive. Throws an exception if not\n            try {\n                process.kill(childProcess.pid, 0);\n                processes_1.terminate(childProcess);\n            }\n            catch (error) {\n                // All is fine.\n            }\n        }, 2000);\n    }\n    handleConnectionClosed() {\n        this._serverProcess = undefined;\n        super.handleConnectionClosed();\n    }\n    createMessageTransports(encoding) {\n        function getEnvironment(env, fork) {\n            if (!env && !fork) {\n                return undefined;\n            }\n            let result = Object.create(null);\n            Object.keys(process.env).forEach(key => result[key] = process.env[key]);\n            if (fork) {\n                result['ELECTRON_RUN_AS_NODE'] = '1';\n                result['ELECTRON_NO_ASAR'] = '1';\n            }\n            if (env) {\n                Object.keys(env).forEach(key => result[key] = env[key]);\n            }\n            return result;\n        }\n        const debugStartWith = ['--debug=', '--debug-brk=', '--inspect=', '--inspect-brk='];\n        const debugEquals = ['--debug', '--debug-brk', '--inspect', '--inspect-brk'];\n        function startedInDebugMode() {\n            let args = process.execArgv;\n            if (args) {\n                return args.some((arg) => {\n                    return debugStartWith.some(value => arg.startsWith(value)) ||\n                        debugEquals.some(value => arg === value);\n                });\n            }\n            return false;\n        }\n        function assertStdio(process) {\n            if (process.stdin === null || process.stdout === null || process.stderr === null) {\n                throw new Error('Process created without stdio streams');\n            }\n        }\n        let server = this._serverOptions;\n        // We got a function.\n        if (Is.func(server)) {\n            return server().then((result) => {\n                if (client_1.MessageTransports.is(result)) {\n                    this._isDetached = !!result.detached;\n                    return result;\n                }\n                else if (StreamInfo.is(result)) {\n                    this._isDetached = !!result.detached;\n                    return { reader: new vscode_languageserver_protocol_1.StreamMessageReader(result.reader), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(result.writer) };\n                }\n                else {\n                    let cp;\n                    if (ChildProcessInfo.is(result)) {\n                        cp = result.process;\n                        this._isDetached = result.detached;\n                    }\n                    else {\n                        cp = result;\n                        this._isDetached = false;\n                    }\n                    cp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                    return { reader: new vscode_languageserver_protocol_1.StreamMessageReader(cp.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(cp.stdin) };\n                }\n            });\n        }\n        let json;\n        let runDebug = server;\n        if (runDebug.run || runDebug.debug) {\n            if (this._forceDebug || startedInDebugMode()) {\n                json = runDebug.debug;\n            }\n            else {\n                json = runDebug.run;\n            }\n        }\n        else {\n            json = server;\n        }\n        return this._getServerWorkingDir(json.options).then(serverWorkingDir => {\n            if (NodeModule.is(json) && json.module) {\n                let node = json;\n                let transport = node.transport || TransportKind.stdio;\n                if (node.runtime) {\n                    let args = [];\n                    let options = node.options || Object.create(null);\n                    if (options.execArgv) {\n                        options.execArgv.forEach(element => args.push(element));\n                    }\n                    args.push(node.module);\n                    if (node.args) {\n                        node.args.forEach(element => args.push(element));\n                    }\n                    let execOptions = Object.create(null);\n                    execOptions.cwd = serverWorkingDir;\n                    execOptions.env = getEnvironment(options.env, false);\n                    let pipeName = undefined;\n                    if (transport === TransportKind.ipc) {\n                        // exec options not correctly typed in lib\n                        execOptions.stdio = [null, null, null, 'ipc'];\n                        args.push('--node-ipc');\n                    }\n                    else if (transport === TransportKind.stdio) {\n                        args.push('--stdio');\n                    }\n                    else if (transport === TransportKind.pipe) {\n                        pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();\n                        args.push(`--pipe=${pipeName}`);\n                    }\n                    else if (Transport.isSocket(transport)) {\n                        args.push(`--socket=${transport.port}`);\n                    }\n                    args.push(`--clientProcessId=${process.pid.toString()}`);\n                    if (transport === TransportKind.ipc || transport === TransportKind.stdio) {\n                        let serverProcess = cp.spawn(node.runtime, args, execOptions);\n                        if (!serverProcess || !serverProcess.pid) {\n                            return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);\n                        }\n                        this._serverProcess = serverProcess;\n                        serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        if (transport === TransportKind.ipc) {\n                            serverProcess.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return Promise.resolve({ reader: new vscode_languageserver_protocol_1.IPCMessageReader(serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(serverProcess) });\n                        }\n                        else {\n                            return Promise.resolve({ reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin) });\n                        }\n                    }\n                    else if (transport === TransportKind.pipe) {\n                        return vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport) => {\n                            let process = cp.spawn(node.runtime, args, execOptions);\n                            if (!process || !process.pid) {\n                                return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);\n                            }\n                            this._serverProcess = process;\n                            process.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            process.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return transport.onConnected().then((protocol) => {\n                                return { reader: protocol[0], writer: protocol[1] };\n                            });\n                        });\n                    }\n                    else if (Transport.isSocket(transport)) {\n                        return vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport) => {\n                            let process = cp.spawn(node.runtime, args, execOptions);\n                            if (!process || !process.pid) {\n                                return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);\n                            }\n                            this._serverProcess = process;\n                            process.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            process.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return transport.onConnected().then((protocol) => {\n                                return { reader: protocol[0], writer: protocol[1] };\n                            });\n                        });\n                    }\n                }\n                else {\n                    let pipeName = undefined;\n                    return new Promise((resolve, _reject) => {\n                        let args = node.args && node.args.slice() || [];\n                        if (transport === TransportKind.ipc) {\n                            args.push('--node-ipc');\n                        }\n                        else if (transport === TransportKind.stdio) {\n                            args.push('--stdio');\n                        }\n                        else if (transport === TransportKind.pipe) {\n                            pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();\n                            args.push(`--pipe=${pipeName}`);\n                        }\n                        else if (Transport.isSocket(transport)) {\n                            args.push(`--socket=${transport.port}`);\n                        }\n                        args.push(`--clientProcessId=${process.pid.toString()}`);\n                        let options = node.options || Object.create(null);\n                        options.env = getEnvironment(options.env, true);\n                        options.execArgv = options.execArgv || [];\n                        options.cwd = serverWorkingDir;\n                        options.silent = true;\n                        if (transport === TransportKind.ipc || transport === TransportKind.stdio) {\n                            let sp = cp.fork(node.module, args || [], options);\n                            assertStdio(sp);\n                            this._serverProcess = sp;\n                            sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            if (transport === TransportKind.ipc) {\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                resolve({ reader: new vscode_languageserver_protocol_1.IPCMessageReader(this._serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(this._serverProcess) });\n                            }\n                            else {\n                                resolve({ reader: new vscode_languageserver_protocol_1.StreamMessageReader(sp.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(sp.stdin) });\n                            }\n                        }\n                        else if (transport === TransportKind.pipe) {\n                            vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport) => {\n                                let sp = cp.fork(node.module, args || [], options);\n                                assertStdio(sp);\n                                this._serverProcess = sp;\n                                sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                transport.onConnected().then((protocol) => {\n                                    resolve({ reader: protocol[0], writer: protocol[1] });\n                                });\n                            });\n                        }\n                        else if (Transport.isSocket(transport)) {\n                            vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport) => {\n                                let sp = cp.fork(node.module, args || [], options);\n                                assertStdio(sp);\n                                this._serverProcess = sp;\n                                sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                transport.onConnected().then((protocol) => {\n                                    resolve({ reader: protocol[0], writer: protocol[1] });\n                                });\n                            });\n                        }\n                    });\n                }\n            }\n            else if (Executable.is(json) && json.command) {\n                let command = json;\n                let args = command.args || [];\n                let options = Object.assign({}, command.options);\n                options.cwd = options.cwd || serverWorkingDir;\n                let serverProcess = cp.spawn(command.command, args, options);\n                if (!serverProcess || !serverProcess.pid) {\n                    return Promise.reject(`Launching server using command ${command.command} failed.`);\n                }\n                serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                this._serverProcess = serverProcess;\n                this._isDetached = !!options.detached;\n                return Promise.resolve({ reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin) });\n            }\n            return Promise.reject(new Error(`Unsupported server configuration ` + JSON.stringify(server, null, 4)));\n        });\n    }\n    registerProposedFeatures() {\n        this.registerFeatures(ProposedFeatures.createAll(this));\n    }\n    registerBuiltinFeatures() {\n        super.registerBuiltinFeatures();\n        this.registerFeature(new configuration_1.ConfigurationFeature(this));\n        this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this));\n        this.registerFeature(new implementation_1.ImplementationFeature(this));\n        this.registerFeature(new colorProvider_1.ColorProviderFeature(this));\n        this.registerFeature(new workspaceFolders_1.WorkspaceFoldersFeature(this));\n        this.registerFeature(new foldingRange_1.FoldingRangeFeature(this));\n        this.registerFeature(new declaration_1.DeclarationFeature(this));\n        this.registerFeature(new selectionRange_1.SelectionRangeFeature(this));\n        this.registerFeature(new progress_1.ProgressFeature(this));\n    }\n    _mainGetRootPath() {\n        let folders = vscode_1.workspace.workspaceFolders;\n        if (!folders || folders.length === 0) {\n            return undefined;\n        }\n        let folder = folders[0];\n        if (folder.uri.scheme === 'file') {\n            return folder.uri.fsPath;\n        }\n        return undefined;\n    }\n    _getServerWorkingDir(options) {\n        let cwd = options && options.cwd;\n        if (!cwd) {\n            cwd = this.clientOptions.workspaceFolder\n                ? this.clientOptions.workspaceFolder.uri.fsPath\n                : this._mainGetRootPath();\n        }\n        if (cwd) {\n            // make sure the folder exists otherwise creating the process will fail\n            return new Promise(s => {\n                fs.lstat(cwd, (err, stats) => {\n                    s(!err && stats.isDirectory() ? cwd : undefined);\n                });\n            });\n        }\n        return Promise.resolve(undefined);\n    }\n}\nexports.LanguageClient = LanguageClient;\nclass SettingMonitor {\n    constructor(_client, _setting) {\n        this._client = _client;\n        this._setting = _setting;\n        this._listeners = [];\n    }\n    start() {\n        vscode_1.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this._listeners);\n        this.onDidChangeConfiguration();\n        return new vscode_1.Disposable(() => {\n            if (this._client.needsStop()) {\n                this._client.stop();\n            }\n        });\n    }\n    onDidChangeConfiguration() {\n        let index = this._setting.indexOf('.');\n        let primary = index >= 0 ? this._setting.substr(0, index) : this._setting;\n        let rest = index >= 0 ? this._setting.substr(index + 1) : undefined;\n        let enabled = rest ? vscode_1.workspace.getConfiguration(primary).get(rest, false) : vscode_1.workspace.getConfiguration(primary);\n        if (enabled && this._client.needsStart()) {\n            this._client.start();\n        }\n        else if (!enabled && this._client.needsStop()) {\n            this._client.stop();\n        }\n    }\n}\nexports.SettingMonitor = SettingMonitor;\n// Exporting proposed protocol.\nvar ProposedFeatures;\n(function (ProposedFeatures) {\n    function createAll(client) {\n        let result = [\n            new callHierarchy_proposed_1.CallHierarchyFeature(client),\n            new semanticTokens_proposed_1.SemanticTokensFeature(client)\n        ];\n        return result;\n    }\n    ProposedFeatures.createAll = createAll;\n})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n\r\nimport * as vscode from 'vscode';\r\nimport { workspace, ExtensionContext, commands, window, Selection } from 'vscode';\r\nimport {\r\n\tLanguageClient,\r\n\tLanguageClientOptions,\r\n\tServerOptions\r\n} from 'vscode-languageclient';\r\nimport * as requirements from './requirements';\r\nimport * as net from 'net';\r\nimport * as child_process from 'child_process';\r\nimport * as lc from 'vscode-languageclient';\r\nimport { activateDebug } from './activateDebug'\r\nimport { DebugAdapterFactory } from './debugFactory'\r\nimport { MoosebookContentProvider } from './moosebookProvider';\r\n\r\nexport let client: LanguageClient;\r\nlet socket: net.Socket;\r\n\r\nexport async function activate(context: ExtensionContext) {\r\n\t// Testing Pharo can be used\r\n\tconsole.info('Start Pharo Language extension');\r\n\treturn requirements.resolveRequirements().catch(error => {\r\n\t\twindow.showErrorMessage(error.message, error.label).then((selection) => {\r\n\t\t\tif (error.label && error.label === selection && error.command) {\r\n\t\t\t\tcommands.executeCommand(error.command, error.commandParam);\r\n\t\t\t}\r\n\t\t});\r\n\t}).then (\r\n\t\tasync (requirements : requirements.RequirementsData) => {\r\n\t\t\r\n\t\t// Create the pharo language server client\r\n\t\tclient = createPharoLanguageServer(requirements, context);\r\n\t\t\r\n\t\t// Start the client. This will also launch the server\r\n\t\tcontext.subscriptions.push(client.start());\r\n\t\twindow.showInformationMessage('Client started');\r\n\t\r\n\t\t// Create new command\r\n\t\tcreateCommands(context);\r\n\r\n\t\t// Create debugguer\r\n\t\tlet factory = new DebugAdapterFactory();\r\n\t\tactivateDebug(context, factory);\r\n\r\n\t\t// Create Moosebook\r\n\t\tconsole.info('Start moosebook');\r\n\t\tconst moosebookContentProvider = new MoosebookContentProvider();\r\n\t\tcontext.subscriptions.push(vscode.notebook.registerNotebookContentProvider('moosebook', moosebookContentProvider));\r\n\t})\r\n\r\n}\r\n\r\nfunction createCommands(context: ExtensionContext) {\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.extensionVersion', commandPharoExtensionVersion));\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.printIt', commandPharoPrintIt));\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.showIt', commandPharoShowIt));\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.save', commandPharoSave));\r\n}\r\n\r\n\r\n\r\nexport function deactivate() {\r\n}\r\n\r\n/*\r\n * Section with extension commands\r\n */\r\n\r\nfunction commandPharoExtensionVersion() {\r\n\tclient.sendRequest(\"command:version\").then((result: string) => {\r\n\t\tconsole.log(result);\r\n\t\twindow.showInformationMessage(result);\r\n\t});\r\n}\r\n\r\nfunction commandPharoPrintIt() {\r\n\tlet editor = vscode.window.activeTextEditor;\r\n\tlet selection = editor.selection;\r\n\tclient.sendRequest('command:printIt', {\"line\": editor.document.getText(selection)}).then( (result: string) => {\r\n\t\teditor.edit(editBuilder => {\r\n\t\t\teditBuilder.replace( new vscode.Selection(selection.end, selection.end), ' \"' + result + '\" ');\r\n\t\t})\r\n\t}).catch((error) => window.showErrorMessage(error));\r\n}\r\n\r\nfunction commandPharoShowIt() {\r\n\tlet editor = vscode.window.activeTextEditor;\r\n\tclient.sendRequest('command:printIt', {\"line\": editor.document.getText(editor.selection)}).then( (result: string) => {\r\n\t\twindow.showInformationMessage(result);\r\n\t}).catch((error) => window.showErrorMessage(error));\r\n}\r\n\r\nfunction commandPharoSave() {\r\n\tclient.sendRequest('command:save').then( (result: string) => {\r\n\t\twindow.showInformationMessage(result);\r\n\t}).catch((error) => window.showErrorMessage(error));\r\n}\r\n\r\n/*\r\n * Section with function for Pharo Language Server\r\n */\r\n\r\nfunction createPharoLanguageServer(requirements: requirements.RequirementsData, context: ExtensionContext) {\r\n\tlet serverOptions: ServerOptions = () => createServerWithSocket(requirements.pathToVM, requirements.pathToImage, context);\r\n\r\n\t// Options to control the language client\r\n\tlet clientOptions: LanguageClientOptions = {\r\n\t\t// Register the server for plain text documents\r\n\t\tdocumentSelector: [{ scheme: 'file', language: 'pharo' }],\r\n\t\tsynchronize: {\r\n\t\t\t// Notify the server about file changes to '.clientrc files contained in the workspace\r\n\t\t\tfileEvents: workspace.createFileSystemWatcher('**/.clientrc')\r\n\t\t}\r\n\t};\r\n\r\n\t// Create the language client and start the client.\r\n\treturn new LanguageClient(\r\n\t\t'pharoLanguageServer',\r\n\t\t'Pharo Language Server',\r\n\t\tserverOptions,\r\n\t\tclientOptions\r\n\t);\r\n}\r\n\r\nasync function createServerWithSocket(pharoPath: string, pathToImage: string, context: ExtensionContext) {\r\n    let dls: child_process.ChildProcess;\r\n\tdls = child_process.spawn(pharoPath.trim(), [\r\n\t\tpathToImage, 'st', context.asAbsolutePath('/res/run-server.st')\r\n\t]);\r\n\r\n\tawait sleep(8000); // Wait that the Pharo server start\r\n\r\n\tsocket = net.connect({ port: 4000, host: '127.0.0.1' }, () => {\r\n\t\t// 'connect' listener.\r\n\t\tconsole.log('connected to server!');\r\n\t});\r\n\r\n\tlet result: lc.StreamInfo = {\r\n\t\twriter: socket,\r\n\t\treader: socket\r\n\t};\r\n\treturn Promise.resolve(result);\r\n}\r\n\r\nasync function sleep(ms: number) {\r\n\treturn new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n", "import * as vscode from 'vscode';\r\n\r\nexport interface RequirementsData {\r\n    pathToVM: string;\r\n    pathToImage: string;\r\n}\r\n\r\ninterface ErrorData {\r\n    message: string;\r\n    label: string;\r\n    command: string;\r\n    commandParam: any;\r\n}\r\n\r\nexport async function resolveRequirements(): Promise<RequirementsData> {\r\n    const pathToVM = await checkPathToVM();\r\n\tconst pathToImage = await checkPathToImage();\r\n    return Promise.resolve({ pathToVM: pathToVM, pathToImage: pathToImage });\r\n}\r\n\r\nasync function checkPathToVM(): Promise<string> {\r\n\treturn new Promise(async (resolve, reject) => {\r\n\t\tif (vscode.workspace.getConfiguration('pharo').get('pathToVM') === '') {\r\n\t\t\treject({\r\n\t\t\t\tmessage: 'Path to VM not set',\r\n\t\t\t\tlabel: 'Open settings',\r\n\t\t\t\tcommand: 'workbench.action.openSettingsJson'\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn resolve(vscode.workspace.getConfiguration('pharo').get('pathToVM'));\r\n\r\n\t});\r\n}\r\n\r\nasync function checkPathToImage(): Promise<string> {\r\n\treturn new Promise(async (resolve, reject) => {\r\n\t\tif (vscode.workspace.getConfiguration('pharo').get('pathToImage') === '') {\r\n\t\t\treject({\r\n\t\t\t\tmessage: 'Path to Image not set',\r\n\t\t\t\tlabel: 'Open settings',\r\n\t\t\t\tcommand: 'workbench.action.openSettingsJson'\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn resolve(vscode.workspace.getConfiguration('pharo').get('pathToImage'));\r\n\t});\r\n}", "import * as vscode from 'vscode';\r\n\r\nexport function activateDebug(context: vscode.ExtensionContext, factory: vscode.DebugAdapterDescriptorFactory) {\r\n\tcontext.subscriptions.push(\r\n\t\tvscode.commands.registerCommand('extension.pharo-debug.debugEditorContents', (resource: vscode.Uri) => {\r\n\t\t\tlet targetResource = resource;\r\n\t\t\tif (!targetResource && vscode.window.activeTextEditor) {\r\n\t\t\t\ttargetResource = vscode.window.activeTextEditor.document.uri;\r\n\t\t\t}\r\n\t\t\tif (targetResource) {\r\n\t\t\t\tvscode.debug.startDebugging(undefined, {\r\n\t\t\t\t\ttype: 'pharodb',\r\n\t\t\t\t\tname: 'Debug File',\r\n\t\t\t\t\trequest: 'launch',\r\n\t\t\t\t\tprogram: targetResource.fsPath\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t})\r\n\t);\r\n\r\n\r\n\tcontext.subscriptions.push(vscode.debug.registerDebugAdapterDescriptorFactory('pharodb', factory));\r\n\r\n}", "import * as vscode from 'vscode';\r\nimport { client } from './extension';\r\n\r\nexport class DebugAdapterFactory implements vscode.DebugAdapterDescriptorFactory {\r\n\r\n\tasync createDebugAdapterDescriptor(session: vscode.DebugSession, executable: vscode.DebugAdapterExecutable): Promise<vscode.ProviderResult<vscode.DebugAdapterDescriptor>> {\r\n\r\n\t\tconst port : Promise<number> = client.sendRequest('dap:startServer', { }).then((result: number) => {\r\n\t\t\treturn result;\r\n\t\t})\r\n\r\n\t\t// make VS Code connect to debug server\r\n\t\treturn new vscode.DebugAdapterServer(await port, 'localhost');\r\n\t}\r\n\r\n}", "import * as vscode from 'vscode';\r\nimport { Moosebook } from './moosebook';\r\n\r\ninterface RawNotebookCell {\r\n\tlanguage: string;\r\n\tvalue: string;\r\n\tkind: vscode.NotebookCellKind;\r\n\teditable?: boolean;\r\n}\r\n\r\ninterface ProjectAssociation {\r\n\t(key: string): boolean;\r\n}\r\n\r\n\r\nexport class MoosebookContentProvider implements  vscode.NotebookContentProvider, vscode.NotebookKernel {\r\n\treadonly id = 'moosebookKernel';\r\n\tpublic label = 'Moosebook Kernel';\r\n\r\n\tprivate readonly _associations = new Map<string, [ProjectAssociation, Moosebook]>();\r\n\tprivate _localDisposables: vscode.Disposable[] = [];\r\n\tsupportedLanguages?: string[] = ['pharo'];\r\n\tprivate _executionOrder = 0;\r\n\r\n\tconstructor() {\r\n\t\tthis._localDisposables.push(\r\n\t\t\tvscode.notebook.onDidOpenNotebookDocument(document => {\r\n\t\t\t\tconst docKey = document.uri.toString();\r\n\t\t\t\tif (!this.lookupMoosebook(docKey)) {\r\n\t\t\t\t\tconst project = new Moosebook(document);\r\n\t\t\t\t\tthis.register(\r\n\t\t\t\t\t\tdocKey,\r\n\t\t\t\t\t\tproject,\r\n\t\t\t\t\t\tkey => document.cells.some(cell => cell.index.toString() === key) || (key === docKey),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tvscode.notebook.onDidCloseNotebookDocument(document => {\r\n\t\t\t\tconst project = this.unregister(document.uri.toString());\r\n\t\t\t\tif (project) {\r\n\t\t\t\t\tproject.dispose();\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t);\r\n\t\tvscode.notebook.registerNotebookKernelProvider({\r\n\t\t\tviewType: 'moosebook',\r\n\t\t}, {\r\n\t\t\tprovideKernels: () => {\r\n\t\t\t\treturn [this];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinterrupt?(document: vscode.NotebookDocument): void {\r\n\t\tthrow new Error('Method not implemented.');\r\n\t}\r\n\r\n\tasync executeCellsRequest(document: vscode.NotebookDocument, ranges: vscode.NotebookCellRange[]) {\r\n\t\tconst cells: vscode.NotebookCell[] = [];\r\n\t\tfor (let range of ranges) {\r\n\t\t\tfor (let i = range.start; i < range.end; i++) {\r\n\t\t\t\tcells.push(document.cells[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._executeCells(cells);\r\n\t}\r\n\r\n\tprivate async _executeCells(cells: vscode.NotebookCell[]): Promise<void> {\r\n\t\tfor (const cell of cells) {\r\n\t\t\tconst execution = vscode.notebook.createNotebookCellExecutionTask(cell.notebook.uri, cell.index, this.id)!;\r\n\t\t\tawait this._doExecuteCell(execution);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async _doExecuteCell(execution: vscode.NotebookCellExecutionTask): Promise<void> {\r\n\r\n\t\texecution.executionOrder = ++this._executionOrder;\r\n\t\texecution.start({ startTime: Date.now() });\r\n\r\n\t\tlet output = {mimetype: 'text/html', content: 'error... '};\r\n\t\tlet error: Error | undefined;\r\n\t\tconst moosebook = this.lookupMoosebook(execution.cell.index);\r\n\t\ttry {\r\n\t\t\toutput = await moosebook.eval(execution.cell);\r\n\t\t} catch(err) {\r\n\t\t\texecution.replaceOutput([new vscode.NotebookCellOutput([\r\n\t\t\t\tnew vscode.NotebookCellOutputItem('application/x.notebook.error-traceback', {\r\n\t\t\t\t\tename: err instanceof Error && err.name || 'error',\r\n\t\t\t\t\tevalue: err instanceof Error && err.message || JSON.stringify(err, undefined, 4),\r\n\t\t\t\t\ttraceback: []\r\n\t\t\t\t})\r\n\t\t\t])]);\r\n\t\t\texecution.end({ success: false });\r\n\t\t\treturn;\r\n\t\t}\r\n\t\r\n\r\n\t\texecution.replaceOutput([new vscode.NotebookCellOutput([\r\n\t\t\tnew vscode.NotebookCellOutputItem(output.mimetype, output.content)])]);\r\n\t\texecution.end({ success: true });\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic lookupMoosebook(keyOrUri: string | number | vscode.Uri | undefined): Moosebook | undefined {\r\n\t\tif (keyOrUri) {\r\n\t\t\tlet key: string;\r\n\t\t\tif (typeof keyOrUri === 'string') {\r\n\t\t\t\tkey = keyOrUri;\r\n\t\t\t} else {\r\n\t\t\t\tkey = keyOrUri.toString();\r\n\t\t\t}\r\n\t\t\tfor (let [association, value] of this._associations.values()) {\r\n\t\t\t\tif (association(key)) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tasync openNotebook(uri: vscode.Uri): Promise<vscode.NotebookData> {\r\n\t\tlet contents = '';\r\n\t\ttry {\r\n\t\t\tcontents = Buffer.from(await vscode.workspace.fs.readFile(uri)).toString('utf8');\r\n\t\t} catch {\r\n\t\t}\r\n\r\n\t\tlet raw: RawNotebookCell[];\r\n\t\ttry {\r\n\t\t\traw = <RawNotebookCell[]>JSON.parse(contents);\r\n\t\t} catch {\r\n\t\t\traw = [];\r\n\t\t}\r\n\r\n\t\tconst notebookData: vscode.NotebookData = {\r\n\t\t\tmetadata: new vscode.NotebookDocumentMetadata().with({ editable: true }),\r\n\t\t\tcells: raw.map(item => ({\r\n\t\t\t\tkind: item.kind,\r\n\t\t\t\tsource: item.value,\r\n\t\t\t\tlanguage: item.language,\r\n\t\t\t\toutputs: [],\r\n\t\t\t\tmetadata: new vscode.NotebookCellMetadata().with({\r\n\t\t\t\t\teditable: true,\r\n\t\t\t\t\tbreakpointMargin: false\r\n\t\t\t\t })\r\n\t\t\t}))\r\n\t\t};\r\n\t\treturn notebookData;\r\n\t}\r\n\r\n\tpublic saveNotebook(document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise<void> {\r\n\t\treturn this._save(document, document.uri);\r\n\t}\r\n\r\n\tpublic saveNotebookAs(targetResource: vscode.Uri, document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise<void> {\r\n\t\treturn this._save(document, targetResource);\r\n\t}\r\n\r\n\tasync resolveNotebook(_document: vscode.NotebookDocument, _webview: vscode.NotebookCommunication): Promise<void> {\r\n\t\t// nothing\r\n\t}\r\n\r\n\tasync backupNotebook(document: vscode.NotebookDocument, context: vscode.NotebookDocumentBackupContext, _cancellation: vscode.CancellationToken): Promise<vscode.NotebookDocumentBackup> {\r\n\t\treturn { id: '', delete: () => {} };\r\n\t}\r\n\r\n\tpublic dispose() {\r\n\t}\r\n\r\n\t// ---- private ----\r\n\r\n\tprivate async _save(document: vscode.NotebookDocument, targetResource: vscode.Uri): Promise<void> {\r\n\t\tlet contents: RawNotebookCell[] = [];\r\n\t\tfor (let cell of document.cells) {\r\n\t\t\tcontents.push({\r\n\t\t\t\tkind: cell.kind,\r\n\t\t\t\tlanguage: cell.document.languageId,\r\n\t\t\t\tvalue: cell.document.getText(),\r\n\t\t\t});\r\n\t\t}\r\n\t\tawait vscode.workspace.fs.writeFile(targetResource, Buffer.from(JSON.stringify(contents)));\r\n\t}\r\n\r\n\tprivate register(key: string, project: Moosebook, association: ProjectAssociation) {\r\n\t\tthis._associations.set(key, [association, project]);\r\n\t}\r\n\r\n\tprivate unregister(key: string): Moosebook | undefined {\r\n\t\tconst project = this.lookupMoosebook(key);\r\n\t\tif (project) {\r\n\t\t\tthis._associations.delete(key);\r\n\t\t}\r\n\t\treturn project;\r\n\t}\r\n}", "/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as vscode from 'vscode';\r\nimport { client } from './extension';\r\n\r\ninterface PharoResponse {\r\n\tmimetype: string,\r\n\tcontent: string\r\n}\r\n\r\n\r\nexport class Moosebook implements vscode.Disposable {\r\n\r\n\r\n\tconstructor(doc: vscode.NotebookDocument) {\r\n\t\t\r\n\t}\r\n\r\n\tasync dispose() {\r\n\t\t\r\n\t}\r\n\r\n\tpublic async restartKernel() {\r\n\r\n\t}\r\n\r\n\tpublic async toggleDebugging(document: vscode.NotebookDocument) {\r\n\r\n\t}\r\n\r\n\tpublic async eval(cell: vscode.NotebookCell): Promise<PharoResponse> {\r\n\t\t// Eval\r\n\t\treturn client.sendRequest('command:notebookPrintIt', {\"line\": cell.document.getText()}).then( (result: PharoResponse) => {\r\n\t\t\tif (result.mimetype == 'error')\r\n\t\t\tthrow new Error(result.content);\r\n\t\t\treturn result;\r\n\t\t}).catch((error) => { throw new Error(error);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic addDebugSession(session: vscode.DebugSession) {\r\n\r\n\t}\r\n\r\n\tpublic removeDebugSession(session: vscode.DebugSession) {\r\n\r\n\t}\r\n\r\n}\r\n"],
+  "mappings": "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",
+  "names": []
+}
diff --git a/esbuild.js b/esbuild.js
new file mode 100644
index 0000000..d86b7fc
--- /dev/null
+++ b/esbuild.js
@@ -0,0 +1,37 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+// @ts-check
+
+const esbuild = require('esbuild');
+const fs = require('fs');
+const path = require('path');
+
+const incremental = process.argv.includes('--watch');
+
+(async function () {
+
+	// extension
+	const buildExtension = await esbuild.build({
+		incremental,
+		bundle: true,
+		entryPoints: ['src/extension.ts'],
+		tsconfig: 'src/tsconfig.json',
+		outfile: 'dist/extension.js',
+		external: ['vscode'],
+		format: 'cjs',
+		platform: 'node',
+		target: ['node12.18'],
+		sourcemap: true,
+		minify: false // AbortSignal-module has issues...
+	});
+
+
+	if (incremental) {
+		fs.watch(path.join(__dirname, 'src'), { recursive: true }, async function () {
+			await buildExtension.rebuild().catch(err => console.error(err));
+		});
+	}
+})();
diff --git a/package-lock.json b/package-lock.json
index 590b513..876e6f8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,18 +15,19 @@
 				"vscode-languageserver-protocol": "3.15.3"
 			},
 			"devDependencies": {
-				"@types/mocha": "^8.0.3",
-				"@types/node": "^12.12.0",
-				"@types/vscode": "1.49.0",
-				"@typescript-eslint/parser": "^2.3.0",
-				"eslint": "^6.4.0",
+				"@types/glob": "^7.1.1",
+				"@types/mocha": "^7.0.1",
+				"@types/node": "^12.11.7",
+				"@typescript-eslint/eslint-plugin": "^2.18.0",
+				"@typescript-eslint/parser": "^2.18.0",
+				"esbuild": "^0.8.34",
+				"eslint": "^6.8.0",
+				"glob": "^7.1.6",
+				"husky": "^4.2.3",
 				"mocha": "^8.1.1",
-				"ts-loader": "^8.0.12",
-				"typescript": "^4.0.2",
-				"vscode-debugadapter-testsupport": "^1.43.0",
-				"vscode-test": "^1.3.0",
-				"webpack": "^5.11.1",
-				"webpack-cli": "^4.3.0"
+				"preact": "^10.4.6",
+				"typescript": "^3.8.3",
+				"vscode-test": "^1.3.0"
 			},
 			"engines": {
 				"vscode": "^1.49.0"
@@ -58,15 +59,6 @@
 				"js-tokens": "^4.0.0"
 			}
 		},
-		"node_modules/@discoveryjs/json-ext": {
-			"version": "0.5.2",
-			"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
-			"integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
-			"dev": true,
-			"engines": {
-				"node": ">=10.0.0"
-			}
-		},
 		"node_modules/@tootallnate/once": {
 			"version": "1.1.2",
 			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -76,37 +68,21 @@
 				"node": ">= 6"
 			}
 		},
-		"node_modules/@types/eslint": {
-			"version": "7.2.7",
-			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz",
-			"integrity": "sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q==",
-			"dev": true,
-			"dependencies": {
-				"@types/estree": "*",
-				"@types/json-schema": "*"
-			}
-		},
-		"node_modules/@types/eslint-scope": {
-			"version": "3.7.0",
-			"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
-			"integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
-			"dev": true,
-			"dependencies": {
-				"@types/eslint": "*",
-				"@types/estree": "*"
-			}
-		},
 		"node_modules/@types/eslint-visitor-keys": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
 			"integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
 			"dev": true
 		},
-		"node_modules/@types/estree": {
-			"version": "0.0.46",
-			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
-			"integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
-			"dev": true
+		"node_modules/@types/glob": {
+			"version": "7.1.3",
+			"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+			"integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
+			"dev": true,
+			"dependencies": {
+				"@types/minimatch": "*",
+				"@types/node": "*"
+			}
 		},
 		"node_modules/@types/json-schema": {
 			"version": "7.0.7",
@@ -114,10 +90,16 @@
 			"integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
 			"dev": true
 		},
+		"node_modules/@types/minimatch": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz",
+			"integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==",
+			"dev": true
+		},
 		"node_modules/@types/mocha": {
-			"version": "8.2.2",
-			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
-			"integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
+			"version": "7.0.2",
+			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz",
+			"integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==",
 			"dev": true
 		},
 		"node_modules/@types/node": {
@@ -126,12 +108,40 @@
 			"integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==",
 			"dev": true
 		},
-		"node_modules/@types/vscode": {
-			"version": "1.49.0",
-			"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.49.0.tgz",
-			"integrity": "sha512-wfNQmLmm1VdMBr6iuNdprWmC1YdrgZ9dQzadv+l2eSjJlElOdJw8OTm4RU4oGTBcfvG6RZI2jOcppkdSS18mZw==",
+		"node_modules/@types/parse-json": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+			"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
 			"dev": true
 		},
+		"node_modules/@typescript-eslint/eslint-plugin": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
+			"integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
+			"dev": true,
+			"dependencies": {
+				"@typescript-eslint/experimental-utils": "2.34.0",
+				"functional-red-black-tree": "^1.0.1",
+				"regexpp": "^3.0.0",
+				"tsutils": "^3.17.1"
+			},
+			"engines": {
+				"node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/typescript-eslint"
+			},
+			"peerDependencies": {
+				"@typescript-eslint/parser": "^2.0.0",
+				"eslint": "^5.0.0 || ^6.0.0"
+			},
+			"peerDependenciesMeta": {
+				"typescript": {
+					"optional": true
+				}
+			}
+		},
 		"node_modules/@typescript-eslint/experimental-utils": {
 			"version": "2.34.0",
 			"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
@@ -214,200 +224,6 @@
 			"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
 			"dev": true
 		},
-		"node_modules/@webassemblyjs/ast": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
-			"integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/helper-numbers": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0"
-			}
-		},
-		"node_modules/@webassemblyjs/floating-point-hex-parser": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
-			"integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
-			"dev": true
-		},
-		"node_modules/@webassemblyjs/helper-api-error": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
-			"integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
-			"dev": true
-		},
-		"node_modules/@webassemblyjs/helper-buffer": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
-			"integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
-			"dev": true
-		},
-		"node_modules/@webassemblyjs/helper-numbers": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
-			"integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/floating-point-hex-parser": "1.11.0",
-				"@webassemblyjs/helper-api-error": "1.11.0",
-				"@xtuc/long": "4.2.2"
-			}
-		},
-		"node_modules/@webassemblyjs/helper-wasm-bytecode": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
-			"integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
-			"dev": true
-		},
-		"node_modules/@webassemblyjs/helper-wasm-section": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
-			"integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-buffer": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/wasm-gen": "1.11.0"
-			}
-		},
-		"node_modules/@webassemblyjs/ieee754": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
-			"integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
-			"dev": true,
-			"dependencies": {
-				"@xtuc/ieee754": "^1.2.0"
-			}
-		},
-		"node_modules/@webassemblyjs/leb128": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
-			"integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
-			"dev": true,
-			"dependencies": {
-				"@xtuc/long": "4.2.2"
-			}
-		},
-		"node_modules/@webassemblyjs/utf8": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
-			"integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
-			"dev": true
-		},
-		"node_modules/@webassemblyjs/wasm-edit": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
-			"integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-buffer": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/helper-wasm-section": "1.11.0",
-				"@webassemblyjs/wasm-gen": "1.11.0",
-				"@webassemblyjs/wasm-opt": "1.11.0",
-				"@webassemblyjs/wasm-parser": "1.11.0",
-				"@webassemblyjs/wast-printer": "1.11.0"
-			}
-		},
-		"node_modules/@webassemblyjs/wasm-gen": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
-			"integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/ieee754": "1.11.0",
-				"@webassemblyjs/leb128": "1.11.0",
-				"@webassemblyjs/utf8": "1.11.0"
-			}
-		},
-		"node_modules/@webassemblyjs/wasm-opt": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
-			"integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-buffer": "1.11.0",
-				"@webassemblyjs/wasm-gen": "1.11.0",
-				"@webassemblyjs/wasm-parser": "1.11.0"
-			}
-		},
-		"node_modules/@webassemblyjs/wasm-parser": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
-			"integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-api-error": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/ieee754": "1.11.0",
-				"@webassemblyjs/leb128": "1.11.0",
-				"@webassemblyjs/utf8": "1.11.0"
-			}
-		},
-		"node_modules/@webassemblyjs/wast-printer": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
-			"integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
-			"dev": true,
-			"dependencies": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@xtuc/long": "4.2.2"
-			}
-		},
-		"node_modules/@webpack-cli/configtest": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
-			"integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
-			"dev": true,
-			"peerDependencies": {
-				"webpack": "4.x.x || 5.x.x",
-				"webpack-cli": "4.x.x"
-			}
-		},
-		"node_modules/@webpack-cli/info": {
-			"version": "1.2.3",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz",
-			"integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==",
-			"dev": true,
-			"dependencies": {
-				"envinfo": "^7.7.3"
-			},
-			"peerDependencies": {
-				"webpack-cli": "4.x.x"
-			}
-		},
-		"node_modules/@webpack-cli/serve": {
-			"version": "1.3.1",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
-			"integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
-			"dev": true,
-			"peerDependencies": {
-				"webpack-cli": "4.x.x"
-			},
-			"peerDependenciesMeta": {
-				"webpack-dev-server": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/@xtuc/ieee754": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-			"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-			"dev": true
-		},
-		"node_modules/@xtuc/long": {
-			"version": "4.2.2",
-			"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-			"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-			"dev": true
-		},
 		"node_modules/acorn": {
 			"version": "7.4.1",
 			"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
@@ -457,15 +273,6 @@
 				"url": "https://github.com/sponsors/epoberezkin"
 			}
 		},
-		"node_modules/ajv-keywords": {
-			"version": "3.5.2",
-			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-			"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-			"dev": true,
-			"peerDependencies": {
-				"ajv": "^6.9.1"
-			}
-		},
 		"node_modules/ansi-colors": {
 			"version": "4.1.1",
 			"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
@@ -568,15 +375,6 @@
 				"node": ">=0.6"
 			}
 		},
-		"node_modules/big.js": {
-			"version": "5.2.2",
-			"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-			"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-			"dev": true,
-			"engines": {
-				"node": "*"
-			}
-		},
 		"node_modules/binary": {
 			"version": "0.3.0",
 			"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
@@ -629,35 +427,6 @@
 			"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
 			"dev": true
 		},
-		"node_modules/browserslist": {
-			"version": "4.16.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
-			"integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
-			"dev": true,
-			"dependencies": {
-				"caniuse-lite": "^1.0.30001181",
-				"colorette": "^1.2.1",
-				"electron-to-chromium": "^1.3.649",
-				"escalade": "^3.1.1",
-				"node-releases": "^1.1.70"
-			},
-			"bin": {
-				"browserslist": "cli.js"
-			},
-			"engines": {
-				"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/browserslist"
-			}
-		},
-		"node_modules/buffer-from": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-			"dev": true
-		},
 		"node_modules/buffer-indexof-polyfill": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
@@ -697,12 +466,6 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/caniuse-lite": {
-			"version": "1.0.30001204",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz",
-			"integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==",
-			"dev": true
-		},
 		"node_modules/chainsaw": {
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
@@ -753,17 +516,11 @@
 				"fsevents": "~2.3.1"
 			}
 		},
-		"node_modules/chrome-trace-event": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
-			"integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
-			"dev": true,
-			"dependencies": {
-				"tslib": "^1.9.0"
-			},
-			"engines": {
-				"node": ">=6.0"
-			}
+		"node_modules/ci-info": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+			"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+			"dev": true
 		},
 		"node_modules/cli-cursor": {
 			"version": "3.1.0",
@@ -818,20 +575,6 @@
 				"node": ">=8"
 			}
 		},
-		"node_modules/clone-deep": {
-			"version": "4.0.1",
-			"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
-			"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
-			"dev": true,
-			"dependencies": {
-				"is-plain-object": "^2.0.4",
-				"kind-of": "^6.0.2",
-				"shallow-clone": "^3.0.0"
-			},
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/color-convert": {
 			"version": "1.9.3",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -847,16 +590,10 @@
 			"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
 			"dev": true
 		},
-		"node_modules/colorette": {
-			"version": "1.2.2",
-			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
-			"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
-			"dev": true
-		},
-		"node_modules/commander": {
-			"version": "2.20.3",
-			"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-			"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+		"node_modules/compare-versions": {
+			"version": "3.6.0",
+			"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
+			"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
 			"dev": true
 		},
 		"node_modules/concat-map": {
@@ -870,6 +607,22 @@
 			"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
 			"dev": true
 		},
+		"node_modules/cosmiconfig": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+			"integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+			"dev": true,
+			"dependencies": {
+				"@types/parse-json": "^4.0.0",
+				"import-fresh": "^3.2.1",
+				"parse-json": "^5.0.0",
+				"path-type": "^4.0.0",
+				"yaml": "^1.10.0"
+			},
+			"engines": {
+				"node": ">=10"
+			}
+		},
 		"node_modules/cross-spawn": {
 			"version": "6.0.5",
 			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -960,83 +713,31 @@
 				"readable-stream": "^2.0.2"
 			}
 		},
-		"node_modules/electron-to-chromium": {
-			"version": "1.3.701",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz",
-			"integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==",
-			"dev": true
-		},
 		"node_modules/emoji-regex": {
 			"version": "8.0.0",
 			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
 			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
 			"dev": true
 		},
-		"node_modules/emojis-list": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-			"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-			"dev": true,
-			"engines": {
-				"node": ">= 4"
-			}
-		},
-		"node_modules/enhanced-resolve": {
-			"version": "4.5.0",
-			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
-			"integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
-			"dev": true,
-			"dependencies": {
-				"graceful-fs": "^4.1.2",
-				"memory-fs": "^0.5.0",
-				"tapable": "^1.0.0"
-			},
-			"engines": {
-				"node": ">=6.9.0"
-			}
-		},
-		"node_modules/enquirer": {
-			"version": "2.3.6",
-			"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
-			"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+		"node_modules/error-ex": {
+			"version": "1.3.2",
+			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+			"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
 			"dev": true,
 			"dependencies": {
-				"ansi-colors": "^4.1.1"
-			},
-			"engines": {
-				"node": ">=8.6"
-			}
-		},
-		"node_modules/envinfo": {
-			"version": "7.7.4",
-			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
-			"integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
-			"dev": true,
-			"bin": {
-				"envinfo": "dist/cli.js"
-			},
-			"engines": {
-				"node": ">=4"
+				"is-arrayish": "^0.2.1"
 			}
 		},
-		"node_modules/errno": {
-			"version": "0.1.8",
-			"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
-			"integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
+		"node_modules/esbuild": {
+			"version": "0.8.57",
+			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz",
+			"integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==",
 			"dev": true,
-			"dependencies": {
-				"prr": "~1.0.1"
-			},
+			"hasInstallScript": true,
 			"bin": {
-				"errno": "cli.js"
+				"esbuild": "bin/esbuild"
 			}
 		},
-		"node_modules/es-module-lexer": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
-			"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
-			"dev": true
-		},
 		"node_modules/escalade": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -1158,6 +859,15 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/eslint/node_modules/regexpp": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+			"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+			"dev": true,
+			"engines": {
+				"node": ">=6.5.0"
+			}
+		},
 		"node_modules/eslint/node_modules/semver": {
 			"version": "6.3.0",
 			"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -1254,148 +964,51 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/events": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-			"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+		"node_modules/external-editor": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+			"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
 			"dev": true,
+			"dependencies": {
+				"chardet": "^0.7.0",
+				"iconv-lite": "^0.4.24",
+				"tmp": "^0.0.33"
+			},
 			"engines": {
-				"node": ">=0.8.x"
+				"node": ">=4"
 			}
 		},
-		"node_modules/execa": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
-			"integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
+		"node_modules/fast-deep-equal": {
+			"version": "3.1.3",
+			"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+			"dev": true
+		},
+		"node_modules/fast-json-stable-stringify": {
+			"version": "2.1.0",
+			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+			"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+			"dev": true
+		},
+		"node_modules/fast-levenshtein": {
+			"version": "2.0.6",
+			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+			"dev": true
+		},
+		"node_modules/figures": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+			"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
 			"dev": true,
 			"dependencies": {
-				"cross-spawn": "^7.0.3",
-				"get-stream": "^6.0.0",
-				"human-signals": "^2.1.0",
-				"is-stream": "^2.0.0",
-				"merge-stream": "^2.0.0",
-				"npm-run-path": "^4.0.1",
-				"onetime": "^5.1.2",
-				"signal-exit": "^3.0.3",
-				"strip-final-newline": "^2.0.0"
+				"escape-string-regexp": "^1.0.5"
 			},
 			"engines": {
-				"node": ">=10"
+				"node": ">=8"
 			},
 			"funding": {
-				"url": "https://github.com/sindresorhus/execa?sponsor=1"
-			}
-		},
-		"node_modules/execa/node_modules/cross-spawn": {
-			"version": "7.0.3",
-			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-			"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-			"dev": true,
-			"dependencies": {
-				"path-key": "^3.1.0",
-				"shebang-command": "^2.0.0",
-				"which": "^2.0.1"
-			},
-			"engines": {
-				"node": ">= 8"
-			}
-		},
-		"node_modules/execa/node_modules/path-key": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-			"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-			"dev": true,
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/execa/node_modules/shebang-command": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-			"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-			"dev": true,
-			"dependencies": {
-				"shebang-regex": "^3.0.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/execa/node_modules/shebang-regex": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-			"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-			"dev": true,
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/execa/node_modules/which": {
-			"version": "2.0.2",
-			"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-			"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-			"dev": true,
-			"dependencies": {
-				"isexe": "^2.0.0"
-			},
-			"bin": {
-				"node-which": "bin/node-which"
-			},
-			"engines": {
-				"node": ">= 8"
-			}
-		},
-		"node_modules/external-editor": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-			"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
-			"dev": true,
-			"dependencies": {
-				"chardet": "^0.7.0",
-				"iconv-lite": "^0.4.24",
-				"tmp": "^0.0.33"
-			},
-			"engines": {
-				"node": ">=4"
-			}
-		},
-		"node_modules/fast-deep-equal": {
-			"version": "3.1.3",
-			"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-			"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-			"dev": true
-		},
-		"node_modules/fast-json-stable-stringify": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-			"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-			"dev": true
-		},
-		"node_modules/fast-levenshtein": {
-			"version": "2.0.6",
-			"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
-			"dev": true
-		},
-		"node_modules/fastest-levenshtein": {
-			"version": "1.0.12",
-			"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
-			"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
-			"dev": true
-		},
-		"node_modules/figures": {
-			"version": "3.2.0",
-			"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-			"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-			"dev": true,
-			"dependencies": {
-				"escape-string-regexp": "^1.0.5"
-			},
-			"engines": {
-				"node": ">=8"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
+				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
 		"node_modules/file-entry-cache": {
@@ -1438,6 +1051,21 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/find-versions": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz",
+			"integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==",
+			"dev": true,
+			"dependencies": {
+				"semver-regex": "^3.1.2"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/flat": {
 			"version": "5.0.2",
 			"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
@@ -1501,12 +1129,6 @@
 				"node": ">=0.6"
 			}
 		},
-		"node_modules/function-bind": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-			"dev": true
-		},
 		"node_modules/functional-red-black-tree": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -1522,18 +1144,6 @@
 				"node": "6.* || 8.* || >= 10.*"
 			}
 		},
-		"node_modules/get-stream": {
-			"version": "6.0.0",
-			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
-			"integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
-			"dev": true,
-			"engines": {
-				"node": ">=10"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
-			}
-		},
 		"node_modules/glob": {
 			"version": "7.1.6",
 			"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -1565,12 +1175,6 @@
 				"node": ">= 6"
 			}
 		},
-		"node_modules/glob-to-regexp": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-			"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-			"dev": true
-		},
 		"node_modules/globals": {
 			"version": "12.4.0",
 			"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
@@ -1601,18 +1205,6 @@
 				"node": ">=4.x"
 			}
 		},
-		"node_modules/has": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-			"dev": true,
-			"dependencies": {
-				"function-bind": "^1.1.1"
-			},
-			"engines": {
-				"node": ">= 0.4.0"
-			}
-		},
 		"node_modules/has-flag": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -1658,13 +1250,104 @@
 				"node": ">= 6"
 			}
 		},
-		"node_modules/human-signals": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-			"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+		"node_modules/husky": {
+			"version": "4.3.8",
+			"resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz",
+			"integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==",
+			"dev": true,
+			"hasInstallScript": true,
+			"dependencies": {
+				"chalk": "^4.0.0",
+				"ci-info": "^2.0.0",
+				"compare-versions": "^3.6.0",
+				"cosmiconfig": "^7.0.0",
+				"find-versions": "^4.0.0",
+				"opencollective-postinstall": "^2.0.2",
+				"pkg-dir": "^5.0.0",
+				"please-upgrade-node": "^3.2.0",
+				"slash": "^3.0.0",
+				"which-pm-runs": "^1.0.0"
+			},
+			"bin": {
+				"husky-run": "bin/run.js",
+				"husky-upgrade": "lib/upgrader/bin.js"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/husky"
+			}
+		},
+		"node_modules/husky/node_modules/ansi-styles": {
+			"version": "4.3.0",
+			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+			"dev": true,
+			"dependencies": {
+				"color-convert": "^2.0.1"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
+			}
+		},
+		"node_modules/husky/node_modules/chalk": {
+			"version": "4.1.0",
+			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+			"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+			"dev": true,
+			"dependencies": {
+				"ansi-styles": "^4.1.0",
+				"supports-color": "^7.1.0"
+			},
+			"engines": {
+				"node": ">=10"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/chalk?sponsor=1"
+			}
+		},
+		"node_modules/husky/node_modules/color-convert": {
+			"version": "2.0.1",
+			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+			"dev": true,
+			"dependencies": {
+				"color-name": "~1.1.4"
+			},
+			"engines": {
+				"node": ">=7.0.0"
+			}
+		},
+		"node_modules/husky/node_modules/color-name": {
+			"version": "1.1.4",
+			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+			"dev": true
+		},
+		"node_modules/husky/node_modules/has-flag": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
+		"node_modules/husky/node_modules/supports-color": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 			"dev": true,
+			"dependencies": {
+				"has-flag": "^4.0.0"
+			},
 			"engines": {
-				"node": ">=10.17.0"
+				"node": ">=8"
 			}
 		},
 		"node_modules/iconv-lite": {
@@ -1704,22 +1387,6 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/import-local": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
-			"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
-			"dev": true,
-			"dependencies": {
-				"pkg-dir": "^4.2.0",
-				"resolve-cwd": "^3.0.0"
-			},
-			"bin": {
-				"import-local-fixture": "fixtures/cli.js"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/imurmurhash": {
 			"version": "0.1.4",
 			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -1858,14 +1525,11 @@
 				"node": ">=8"
 			}
 		},
-		"node_modules/interpret": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
-			"integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
-			"dev": true,
-			"engines": {
-				"node": ">= 0.10"
-			}
+		"node_modules/is-arrayish": {
+			"version": "0.2.1",
+			"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+			"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+			"dev": true
 		},
 		"node_modules/is-binary-path": {
 			"version": "2.1.0",
@@ -1879,18 +1543,6 @@
 				"node": ">=8"
 			}
 		},
-		"node_modules/is-core-module": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
-			"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
-			"dev": true,
-			"dependencies": {
-				"has": "^1.0.3"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/ljharb"
-			}
-		},
 		"node_modules/is-extglob": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -1939,27 +1591,6 @@
 				"node": ">=8"
 			}
 		},
-		"node_modules/is-plain-object": {
-			"version": "2.0.4",
-			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-			"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-			"dev": true,
-			"dependencies": {
-				"isobject": "^3.0.1"
-			},
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/is-stream": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
-			"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
-			"dev": true,
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/isarray": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -1972,73 +1603,29 @@
 			"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
 			"dev": true
 		},
-		"node_modules/isobject": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-			"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-			"dev": true,
-			"engines": {
-				"node": ">=0.10.0"
-			}
+		"node_modules/js-tokens": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+			"dev": true
 		},
-		"node_modules/jest-worker": {
-			"version": "26.6.2",
-			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
-			"integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+		"node_modules/js-yaml": {
+			"version": "3.14.1",
+			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+			"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
 			"dev": true,
 			"dependencies": {
-				"@types/node": "*",
-				"merge-stream": "^2.0.0",
-				"supports-color": "^7.0.0"
+				"argparse": "^1.0.7",
+				"esprima": "^4.0.0"
 			},
-			"engines": {
-				"node": ">= 10.13.0"
+			"bin": {
+				"js-yaml": "bin/js-yaml.js"
 			}
 		},
-		"node_modules/jest-worker/node_modules/has-flag": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-			"dev": true,
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/jest-worker/node_modules/supports-color": {
-			"version": "7.2.0",
-			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-			"dev": true,
-			"dependencies": {
-				"has-flag": "^4.0.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/js-tokens": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
-			"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
-			"dev": true
-		},
-		"node_modules/js-yaml": {
-			"version": "3.14.1",
-			"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-			"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
-			"dev": true,
-			"dependencies": {
-				"argparse": "^1.0.7",
-				"esprima": "^4.0.0"
-			},
-			"bin": {
-				"js-yaml": "bin/js-yaml.js"
-			}
-		},
-		"node_modules/json-parse-better-errors": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-			"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+		"node_modules/json-parse-even-better-errors": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+			"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
 			"dev": true
 		},
 		"node_modules/json-schema-traverse": {
@@ -2053,30 +1640,6 @@
 			"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
 			"dev": true
 		},
-		"node_modules/json5": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
-			"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
-			"dev": true,
-			"dependencies": {
-				"minimist": "^1.2.5"
-			},
-			"bin": {
-				"json5": "lib/cli.js"
-			},
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/kind-of": {
-			"version": "6.0.3",
-			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-			"dev": true,
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
 		"node_modules/kleur": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -2098,35 +1661,18 @@
 				"node": ">= 0.8.0"
 			}
 		},
+		"node_modules/lines-and-columns": {
+			"version": "1.1.6",
+			"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+			"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+			"dev": true
+		},
 		"node_modules/listenercount": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
 			"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=",
 			"dev": true
 		},
-		"node_modules/loader-runner": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
-			"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
-			"dev": true,
-			"engines": {
-				"node": ">=6.11.5"
-			}
-		},
-		"node_modules/loader-utils": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-			"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-			"dev": true,
-			"dependencies": {
-				"big.js": "^5.2.2",
-				"emojis-list": "^3.0.0",
-				"json5": "^2.1.2"
-			},
-			"engines": {
-				"node": ">=8.9.0"
-			}
-		},
 		"node_modules/locate-path": {
 			"version": "6.0.0",
 			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2242,59 +1788,6 @@
 				"node": ">=10"
 			}
 		},
-		"node_modules/memory-fs": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
-			"integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
-			"dev": true,
-			"dependencies": {
-				"errno": "^0.1.3",
-				"readable-stream": "^2.0.1"
-			},
-			"engines": {
-				"node": ">=4.3.0 <5.0.0 || >=5.10"
-			}
-		},
-		"node_modules/merge-stream": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-			"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-			"dev": true
-		},
-		"node_modules/micromatch": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-			"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-			"dev": true,
-			"dependencies": {
-				"braces": "^3.0.1",
-				"picomatch": "^2.0.5"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/mime-db": {
-			"version": "1.46.0",
-			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
-			"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
-			"dev": true,
-			"engines": {
-				"node": ">= 0.6"
-			}
-		},
-		"node_modules/mime-types": {
-			"version": "2.1.29",
-			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
-			"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
-			"dev": true,
-			"dependencies": {
-				"mime-db": "1.46.0"
-			},
-			"engines": {
-				"node": ">= 0.6"
-			}
-		},
 		"node_modules/mimic-fn": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
@@ -2480,24 +1973,12 @@
 			"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
 			"dev": true
 		},
-		"node_modules/neo-async": {
-			"version": "2.6.2",
-			"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-			"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-			"dev": true
-		},
 		"node_modules/nice-try": {
 			"version": "1.0.5",
 			"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
 			"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
 			"dev": true
 		},
-		"node_modules/node-releases": {
-			"version": "1.1.71",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
-			"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
-			"dev": true
-		},
 		"node_modules/normalize-path": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -2507,27 +1988,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/npm-run-path": {
-			"version": "4.0.1",
-			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-			"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-			"dev": true,
-			"dependencies": {
-				"path-key": "^3.0.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/npm-run-path/node_modules/path-key": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-			"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-			"dev": true,
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/once": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -2551,6 +2011,15 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/opencollective-postinstall": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+			"integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
+			"dev": true,
+			"bin": {
+				"opencollective-postinstall": "index.js"
+			}
+		},
 		"node_modules/optionator": {
 			"version": "0.8.3",
 			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
@@ -2607,15 +2076,6 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
-		"node_modules/p-try": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-			"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-			"dev": true,
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/parent-module": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -2628,6 +2088,24 @@
 				"node": ">=6"
 			}
 		},
+		"node_modules/parse-json": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+			"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+			"dev": true,
+			"dependencies": {
+				"@babel/code-frame": "^7.0.0",
+				"error-ex": "^1.3.1",
+				"json-parse-even-better-errors": "^2.3.0",
+				"lines-and-columns": "^1.1.6"
+			},
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/path-exists": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -2654,11 +2132,14 @@
 				"node": ">=4"
 			}
 		},
-		"node_modules/path-parse": {
-			"version": "1.0.6",
-			"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-			"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-			"dev": true
+		"node_modules/path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
 		},
 		"node_modules/picomatch": {
 			"version": "2.2.2",
@@ -2673,67 +2154,34 @@
 			}
 		},
 		"node_modules/pkg-dir": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-			"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
-			"dev": true,
-			"dependencies": {
-				"find-up": "^4.0.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/pkg-dir/node_modules/find-up": {
-			"version": "4.1.0",
-			"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-			"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-			"dev": true,
-			"dependencies": {
-				"locate-path": "^5.0.0",
-				"path-exists": "^4.0.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/pkg-dir/node_modules/locate-path": {
 			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-			"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
+			"integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
 			"dev": true,
 			"dependencies": {
-				"p-locate": "^4.1.0"
+				"find-up": "^5.0.0"
 			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=10"
 			}
 		},
-		"node_modules/pkg-dir/node_modules/p-limit": {
-			"version": "2.3.0",
-			"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-			"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+		"node_modules/please-upgrade-node": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+			"integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
 			"dev": true,
 			"dependencies": {
-				"p-try": "^2.0.0"
-			},
-			"engines": {
-				"node": ">=6"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/sindresorhus"
+				"semver-compare": "^1.0.0"
 			}
 		},
-		"node_modules/pkg-dir/node_modules/p-locate": {
-			"version": "4.1.0",
-			"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-			"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+		"node_modules/preact": {
+			"version": "10.5.13",
+			"resolved": "https://registry.npmjs.org/preact/-/preact-10.5.13.tgz",
+			"integrity": "sha512-q/vlKIGNwzTLu+jCcvywgGrt+H/1P/oIRSD6mV4ln3hmlC+Aa34C7yfPI4+5bzW8pONyVXYS7SvXosy2dKKtWQ==",
 			"dev": true,
-			"dependencies": {
-				"p-limit": "^2.2.0"
-			},
-			"engines": {
-				"node": ">=8"
+			"funding": {
+				"type": "opencollective",
+				"url": "https://opencollective.com/preact"
 			}
 		},
 		"node_modules/prelude-ls": {
@@ -2772,12 +2220,6 @@
 				"node": ">= 6"
 			}
 		},
-		"node_modules/prr": {
-			"version": "1.0.1",
-			"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-			"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
-			"dev": true
-		},
 		"node_modules/punycode": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -2829,25 +2271,16 @@
 				"node": ">=8.10.0"
 			}
 		},
-		"node_modules/rechoir": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
-			"integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
-			"dev": true,
-			"dependencies": {
-				"resolve": "^1.9.0"
-			},
-			"engines": {
-				"node": ">= 0.10"
-			}
-		},
 		"node_modules/regexpp": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-			"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+			"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
 			"dev": true,
 			"engines": {
-				"node": ">=6.5.0"
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/mysticatea"
 			}
 		},
 		"node_modules/require-directory": {
@@ -2859,40 +2292,6 @@
 				"node": ">=0.10.0"
 			}
 		},
-		"node_modules/resolve": {
-			"version": "1.20.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-			"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
-			"dev": true,
-			"dependencies": {
-				"is-core-module": "^2.2.0",
-				"path-parse": "^1.0.6"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/ljharb"
-			}
-		},
-		"node_modules/resolve-cwd": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-			"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-			"dev": true,
-			"dependencies": {
-				"resolve-from": "^5.0.0"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
-		"node_modules/resolve-cwd/node_modules/resolve-from": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-			"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-			"dev": true,
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/resolve-from": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -2974,24 +2373,6 @@
 			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
 			"dev": true
 		},
-		"node_modules/schema-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
-			"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
-			"dev": true,
-			"dependencies": {
-				"@types/json-schema": "^7.0.6",
-				"ajv": "^6.12.5",
-				"ajv-keywords": "^3.5.2"
-			},
-			"engines": {
-				"node": ">= 10.13.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/webpack"
-			}
-		},
 		"node_modules/semver": {
 			"version": "7.3.5",
 			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -3007,6 +2388,24 @@
 				"node": ">=10"
 			}
 		},
+		"node_modules/semver-compare": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+			"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+			"dev": true
+		},
+		"node_modules/semver-regex": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz",
+			"integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/serialize-javascript": {
 			"version": "5.0.1",
 			"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
@@ -3022,18 +2421,6 @@
 			"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
 			"dev": true
 		},
-		"node_modules/shallow-clone": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
-			"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
-			"dev": true,
-			"dependencies": {
-				"kind-of": "^6.0.2"
-			},
-			"engines": {
-				"node": ">=8"
-			}
-		},
 		"node_modules/shebang-command": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -3066,6 +2453,15 @@
 			"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
 			"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
 		},
+		"node_modules/slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true,
+			"engines": {
+				"node": ">=8"
+			}
+		},
 		"node_modules/slice-ansi": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
@@ -3089,31 +2485,6 @@
 				"node": ">=4"
 			}
 		},
-		"node_modules/source-list-map": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-			"integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
-			"dev": true
-		},
-		"node_modules/source-map": {
-			"version": "0.6.1",
-			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-			"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-			"dev": true,
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/source-map-support": {
-			"version": "0.5.19",
-			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-			"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-			"dev": true,
-			"dependencies": {
-				"buffer-from": "^1.0.0",
-				"source-map": "^0.6.0"
-			}
-		},
 		"node_modules/sprintf-js": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -3182,15 +2553,6 @@
 				"node": ">=6"
 			}
 		},
-		"node_modules/strip-final-newline": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-			"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-			"dev": true,
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/strip-json-comments": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -3239,217 +2601,68 @@
 		"node_modules/table/node_modules/is-fullwidth-code-point": {
 			"version": "2.0.0",
 			"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-			"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
-			"dev": true,
-			"engines": {
-				"node": ">=4"
-			}
-		},
-		"node_modules/table/node_modules/string-width": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-			"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-			"dev": true,
-			"dependencies": {
-				"emoji-regex": "^7.0.1",
-				"is-fullwidth-code-point": "^2.0.0",
-				"strip-ansi": "^5.1.0"
-			},
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/tapable": {
-			"version": "1.1.3",
-			"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-			"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
-			"dev": true,
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/terser": {
-			"version": "5.6.1",
-			"resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz",
-			"integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==",
-			"dev": true,
-			"dependencies": {
-				"commander": "^2.20.0",
-				"source-map": "~0.7.2",
-				"source-map-support": "~0.5.19"
-			},
-			"bin": {
-				"terser": "bin/terser"
-			},
-			"engines": {
-				"node": ">=10"
-			}
-		},
-		"node_modules/terser-webpack-plugin": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
-			"integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
-			"dev": true,
-			"dependencies": {
-				"jest-worker": "^26.6.2",
-				"p-limit": "^3.1.0",
-				"schema-utils": "^3.0.0",
-				"serialize-javascript": "^5.0.1",
-				"source-map": "^0.6.1",
-				"terser": "^5.5.1"
-			},
-			"engines": {
-				"node": ">= 10.13.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/webpack"
-			},
-			"peerDependencies": {
-				"webpack": "^5.1.0"
-			}
-		},
-		"node_modules/terser/node_modules/source-map": {
-			"version": "0.7.3",
-			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-			"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
-			"dev": true,
-			"engines": {
-				"node": ">= 8"
-			}
-		},
-		"node_modules/text-table": {
-			"version": "0.2.0",
-			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-			"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
-			"dev": true
-		},
-		"node_modules/through": {
-			"version": "2.3.8",
-			"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-			"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
-			"dev": true
-		},
-		"node_modules/tmp": {
-			"version": "0.0.33",
-			"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-			"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
-			"dev": true,
-			"dependencies": {
-				"os-tmpdir": "~1.0.2"
-			},
-			"engines": {
-				"node": ">=0.6.0"
-			}
-		},
-		"node_modules/to-regex-range": {
-			"version": "5.0.1",
-			"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-			"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
-			"dev": true,
-			"dependencies": {
-				"is-number": "^7.0.0"
-			},
-			"engines": {
-				"node": ">=8.0"
-			}
-		},
-		"node_modules/traverse": {
-			"version": "0.3.9",
-			"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
-			"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
-			"dev": true
-		},
-		"node_modules/ts-loader": {
-			"version": "8.1.0",
-			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz",
-			"integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==",
-			"dev": true,
-			"dependencies": {
-				"chalk": "^4.1.0",
-				"enhanced-resolve": "^4.0.0",
-				"loader-utils": "^2.0.0",
-				"micromatch": "^4.0.0",
-				"semver": "^7.3.4"
-			},
-			"engines": {
-				"node": ">=10.0.0"
-			},
-			"peerDependencies": {
-				"typescript": "*",
-				"webpack": "*"
-			}
-		},
-		"node_modules/ts-loader/node_modules/ansi-styles": {
-			"version": "4.3.0",
-			"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-			"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-			"dev": true,
-			"dependencies": {
-				"color-convert": "^2.0.1"
-			},
-			"engines": {
-				"node": ">=8"
-			},
-			"funding": {
-				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
-			}
-		},
-		"node_modules/ts-loader/node_modules/chalk": {
-			"version": "4.1.0",
-			"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-			"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+			"integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
 			"dev": true,
-			"dependencies": {
-				"ansi-styles": "^4.1.0",
-				"supports-color": "^7.1.0"
-			},
 			"engines": {
-				"node": ">=10"
-			},
-			"funding": {
-				"url": "https://github.com/chalk/chalk?sponsor=1"
+				"node": ">=4"
 			}
 		},
-		"node_modules/ts-loader/node_modules/color-convert": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-			"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+		"node_modules/table/node_modules/string-width": {
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+			"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
 			"dev": true,
 			"dependencies": {
-				"color-name": "~1.1.4"
+				"emoji-regex": "^7.0.1",
+				"is-fullwidth-code-point": "^2.0.0",
+				"strip-ansi": "^5.1.0"
 			},
 			"engines": {
-				"node": ">=7.0.0"
+				"node": ">=6"
 			}
 		},
-		"node_modules/ts-loader/node_modules/color-name": {
-			"version": "1.1.4",
-			"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-			"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+		"node_modules/text-table": {
+			"version": "0.2.0",
+			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+			"integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
 			"dev": true
 		},
-		"node_modules/ts-loader/node_modules/has-flag": {
-			"version": "4.0.0",
-			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-			"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+		"node_modules/through": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+			"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+			"dev": true
+		},
+		"node_modules/tmp": {
+			"version": "0.0.33",
+			"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+			"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
 			"dev": true,
+			"dependencies": {
+				"os-tmpdir": "~1.0.2"
+			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=0.6.0"
 			}
 		},
-		"node_modules/ts-loader/node_modules/supports-color": {
-			"version": "7.2.0",
-			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-			"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+		"node_modules/to-regex-range": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+			"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
 			"dev": true,
 			"dependencies": {
-				"has-flag": "^4.0.0"
+				"is-number": "^7.0.0"
 			},
 			"engines": {
-				"node": ">=8"
+				"node": ">=8.0"
 			}
 		},
+		"node_modules/traverse": {
+			"version": "0.3.9",
+			"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
+			"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
+			"dev": true
+		},
 		"node_modules/tslib": {
 			"version": "1.14.1",
 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
@@ -3493,9 +2706,9 @@
 			}
 		},
 		"node_modules/typescript": {
-			"version": "4.2.3",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
-			"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
+			"version": "3.9.9",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
+			"integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
 			"dev": true,
 			"bin": {
 				"tsc": "bin/tsc",
@@ -3553,15 +2766,6 @@
 				"vscode-debugprotocol": "1.46.0"
 			}
 		},
-		"node_modules/vscode-debugadapter-testsupport": {
-			"version": "1.46.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.46.0.tgz",
-			"integrity": "sha512-6n+uu4+Q5sZvN2FgFLNJkyaE6AECYzFh+Hfv+IeJoVKA7KNiQ1SNd3yTsvSFxkS00LmVU6V00XGaqZRlwM15Jg==",
-			"dev": true,
-			"dependencies": {
-				"vscode-debugprotocol": "^1.46.0"
-			}
-		},
 		"node_modules/vscode-debugprotocol": {
 			"version": "1.46.0",
 			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.46.0.tgz",
@@ -3666,179 +2870,6 @@
 				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
-		"node_modules/watchpack": {
-			"version": "2.1.1",
-			"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
-			"integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
-			"dev": true,
-			"dependencies": {
-				"glob-to-regexp": "^0.4.1",
-				"graceful-fs": "^4.1.2"
-			},
-			"engines": {
-				"node": ">=10.13.0"
-			}
-		},
-		"node_modules/webpack": {
-			"version": "5.28.0",
-			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz",
-			"integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==",
-			"dev": true,
-			"dependencies": {
-				"@types/eslint-scope": "^3.7.0",
-				"@types/estree": "^0.0.46",
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/wasm-edit": "1.11.0",
-				"@webassemblyjs/wasm-parser": "1.11.0",
-				"acorn": "^8.0.4",
-				"browserslist": "^4.14.5",
-				"chrome-trace-event": "^1.0.2",
-				"enhanced-resolve": "^5.7.0",
-				"es-module-lexer": "^0.4.0",
-				"eslint-scope": "^5.1.1",
-				"events": "^3.2.0",
-				"glob-to-regexp": "^0.4.1",
-				"graceful-fs": "^4.2.4",
-				"json-parse-better-errors": "^1.0.2",
-				"loader-runner": "^4.2.0",
-				"mime-types": "^2.1.27",
-				"neo-async": "^2.6.2",
-				"schema-utils": "^3.0.0",
-				"tapable": "^2.1.1",
-				"terser-webpack-plugin": "^5.1.1",
-				"watchpack": "^2.0.0",
-				"webpack-sources": "^2.1.1"
-			},
-			"bin": {
-				"webpack": "bin/webpack.js"
-			},
-			"engines": {
-				"node": ">=10.13.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/webpack"
-			},
-			"peerDependenciesMeta": {
-				"webpack-cli": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/webpack-cli": {
-			"version": "4.6.0",
-			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz",
-			"integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==",
-			"dev": true,
-			"dependencies": {
-				"@discoveryjs/json-ext": "^0.5.0",
-				"@webpack-cli/configtest": "^1.0.2",
-				"@webpack-cli/info": "^1.2.3",
-				"@webpack-cli/serve": "^1.3.1",
-				"colorette": "^1.2.1",
-				"commander": "^7.0.0",
-				"enquirer": "^2.3.6",
-				"execa": "^5.0.0",
-				"fastest-levenshtein": "^1.0.12",
-				"import-local": "^3.0.2",
-				"interpret": "^2.2.0",
-				"rechoir": "^0.7.0",
-				"v8-compile-cache": "^2.2.0",
-				"webpack-merge": "^5.7.3"
-			},
-			"bin": {
-				"webpack-cli": "bin/cli.js"
-			},
-			"engines": {
-				"node": ">=10.13.0"
-			},
-			"peerDependencies": {
-				"webpack": "4.x.x || 5.x.x"
-			},
-			"peerDependenciesMeta": {
-				"@webpack-cli/generators": {
-					"optional": true
-				},
-				"@webpack-cli/migrate": {
-					"optional": true
-				},
-				"webpack-bundle-analyzer": {
-					"optional": true
-				},
-				"webpack-dev-server": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/webpack-cli/node_modules/commander": {
-			"version": "7.2.0",
-			"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-			"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-			"dev": true,
-			"engines": {
-				"node": ">= 10"
-			}
-		},
-		"node_modules/webpack-merge": {
-			"version": "5.7.3",
-			"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
-			"integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
-			"dev": true,
-			"dependencies": {
-				"clone-deep": "^4.0.1",
-				"wildcard": "^2.0.0"
-			},
-			"engines": {
-				"node": ">=10.0.0"
-			}
-		},
-		"node_modules/webpack-sources": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
-			"integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
-			"dev": true,
-			"dependencies": {
-				"source-list-map": "^2.0.1",
-				"source-map": "^0.6.1"
-			},
-			"engines": {
-				"node": ">=10.13.0"
-			}
-		},
-		"node_modules/webpack/node_modules/acorn": {
-			"version": "8.1.0",
-			"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
-			"integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
-			"dev": true,
-			"bin": {
-				"acorn": "bin/acorn"
-			},
-			"engines": {
-				"node": ">=0.4.0"
-			}
-		},
-		"node_modules/webpack/node_modules/enhanced-resolve": {
-			"version": "5.7.0",
-			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
-			"integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
-			"dev": true,
-			"dependencies": {
-				"graceful-fs": "^4.2.4",
-				"tapable": "^2.2.0"
-			},
-			"engines": {
-				"node": ">=10.13.0"
-			}
-		},
-		"node_modules/webpack/node_modules/tapable": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
-			"integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
-			"dev": true,
-			"engines": {
-				"node": ">=6"
-			}
-		},
 		"node_modules/which": {
 			"version": "1.3.1",
 			"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -3851,6 +2882,12 @@
 				"which": "bin/which"
 			}
 		},
+		"node_modules/which-pm-runs": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
+			"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
+			"dev": true
+		},
 		"node_modules/wide-align": {
 			"version": "1.1.3",
 			"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@@ -3903,12 +2940,6 @@
 				"node": ">=4"
 			}
 		},
-		"node_modules/wildcard": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
-			"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
-			"dev": true
-		},
 		"node_modules/word-wrap": {
 			"version": "1.2.3",
 			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -4027,6 +3058,15 @@
 			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 			"dev": true
 		},
+		"node_modules/yaml": {
+			"version": "1.10.2",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 6"
+			}
+		},
 		"node_modules/yargs": {
 			"version": "16.2.0",
 			"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
@@ -4109,49 +3149,27 @@
 				"js-tokens": "^4.0.0"
 			}
 		},
-		"@discoveryjs/json-ext": {
-			"version": "0.5.2",
-			"resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz",
-			"integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==",
-			"dev": true
-		},
 		"@tootallnate/once": {
 			"version": "1.1.2",
 			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
 			"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
 			"dev": true
 		},
-		"@types/eslint": {
-			"version": "7.2.7",
-			"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.7.tgz",
-			"integrity": "sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q==",
-			"dev": true,
-			"requires": {
-				"@types/estree": "*",
-				"@types/json-schema": "*"
-			}
-		},
-		"@types/eslint-scope": {
-			"version": "3.7.0",
-			"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz",
-			"integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==",
-			"dev": true,
-			"requires": {
-				"@types/eslint": "*",
-				"@types/estree": "*"
-			}
-		},
 		"@types/eslint-visitor-keys": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
 			"integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
 			"dev": true
 		},
-		"@types/estree": {
-			"version": "0.0.46",
-			"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz",
-			"integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==",
-			"dev": true
+		"@types/glob": {
+			"version": "7.1.3",
+			"resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+			"integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
+			"dev": true,
+			"requires": {
+				"@types/minimatch": "*",
+				"@types/node": "*"
+			}
 		},
 		"@types/json-schema": {
 			"version": "7.0.7",
@@ -4159,10 +3177,16 @@
 			"integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==",
 			"dev": true
 		},
+		"@types/minimatch": {
+			"version": "3.0.4",
+			"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz",
+			"integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==",
+			"dev": true
+		},
 		"@types/mocha": {
-			"version": "8.2.2",
-			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.2.2.tgz",
-			"integrity": "sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw==",
+			"version": "7.0.2",
+			"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz",
+			"integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==",
 			"dev": true
 		},
 		"@types/node": {
@@ -4171,236 +3195,67 @@
 			"integrity": "sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA==",
 			"dev": true
 		},
-		"@types/vscode": {
-			"version": "1.49.0",
-			"resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.49.0.tgz",
-			"integrity": "sha512-wfNQmLmm1VdMBr6iuNdprWmC1YdrgZ9dQzadv+l2eSjJlElOdJw8OTm4RU4oGTBcfvG6RZI2jOcppkdSS18mZw==",
+		"@types/parse-json": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+			"integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
 			"dev": true
 		},
-		"@typescript-eslint/experimental-utils": {
-			"version": "2.34.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
-			"integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==",
-			"dev": true,
-			"requires": {
-				"@types/json-schema": "^7.0.3",
-				"@typescript-eslint/typescript-estree": "2.34.0",
-				"eslint-scope": "^5.0.0",
-				"eslint-utils": "^2.0.0"
-			}
-		},
-		"@typescript-eslint/parser": {
+		"@typescript-eslint/eslint-plugin": {
 			"version": "2.34.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
-			"integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz",
+			"integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==",
 			"dev": true,
 			"requires": {
-				"@types/eslint-visitor-keys": "^1.0.0",
 				"@typescript-eslint/experimental-utils": "2.34.0",
-				"@typescript-eslint/typescript-estree": "2.34.0",
-				"eslint-visitor-keys": "^1.1.0"
-			}
-		},
-		"@typescript-eslint/typescript-estree": {
-			"version": "2.34.0",
-			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz",
-			"integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==",
-			"dev": true,
-			"requires": {
-				"debug": "^4.1.1",
-				"eslint-visitor-keys": "^1.1.0",
-				"glob": "^7.1.6",
-				"is-glob": "^4.0.1",
-				"lodash": "^4.17.15",
-				"semver": "^7.3.2",
+				"functional-red-black-tree": "^1.0.1",
+				"regexpp": "^3.0.0",
 				"tsutils": "^3.17.1"
 			}
 		},
-		"@ungap/promise-all-settled": {
-			"version": "1.1.2",
-			"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
-			"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
-			"dev": true
-		},
-		"@webassemblyjs/ast": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
-			"integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/helper-numbers": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0"
-			}
-		},
-		"@webassemblyjs/floating-point-hex-parser": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz",
-			"integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==",
-			"dev": true
-		},
-		"@webassemblyjs/helper-api-error": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz",
-			"integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==",
-			"dev": true
-		},
-		"@webassemblyjs/helper-buffer": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz",
-			"integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==",
-			"dev": true
-		},
-		"@webassemblyjs/helper-numbers": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz",
-			"integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/floating-point-hex-parser": "1.11.0",
-				"@webassemblyjs/helper-api-error": "1.11.0",
-				"@xtuc/long": "4.2.2"
-			}
-		},
-		"@webassemblyjs/helper-wasm-bytecode": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz",
-			"integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==",
-			"dev": true
-		},
-		"@webassemblyjs/helper-wasm-section": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz",
-			"integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-buffer": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/wasm-gen": "1.11.0"
-			}
-		},
-		"@webassemblyjs/ieee754": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz",
-			"integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==",
-			"dev": true,
-			"requires": {
-				"@xtuc/ieee754": "^1.2.0"
-			}
-		},
-		"@webassemblyjs/leb128": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz",
-			"integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==",
-			"dev": true,
-			"requires": {
-				"@xtuc/long": "4.2.2"
-			}
-		},
-		"@webassemblyjs/utf8": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz",
-			"integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==",
-			"dev": true
-		},
-		"@webassemblyjs/wasm-edit": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz",
-			"integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-buffer": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/helper-wasm-section": "1.11.0",
-				"@webassemblyjs/wasm-gen": "1.11.0",
-				"@webassemblyjs/wasm-opt": "1.11.0",
-				"@webassemblyjs/wasm-parser": "1.11.0",
-				"@webassemblyjs/wast-printer": "1.11.0"
-			}
-		},
-		"@webassemblyjs/wasm-gen": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz",
-			"integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/ieee754": "1.11.0",
-				"@webassemblyjs/leb128": "1.11.0",
-				"@webassemblyjs/utf8": "1.11.0"
-			}
-		},
-		"@webassemblyjs/wasm-opt": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz",
-			"integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==",
-			"dev": true,
-			"requires": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-buffer": "1.11.0",
-				"@webassemblyjs/wasm-gen": "1.11.0",
-				"@webassemblyjs/wasm-parser": "1.11.0"
-			}
-		},
-		"@webassemblyjs/wasm-parser": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz",
-			"integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==",
+		"@typescript-eslint/experimental-utils": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz",
+			"integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/helper-api-error": "1.11.0",
-				"@webassemblyjs/helper-wasm-bytecode": "1.11.0",
-				"@webassemblyjs/ieee754": "1.11.0",
-				"@webassemblyjs/leb128": "1.11.0",
-				"@webassemblyjs/utf8": "1.11.0"
+				"@types/json-schema": "^7.0.3",
+				"@typescript-eslint/typescript-estree": "2.34.0",
+				"eslint-scope": "^5.0.0",
+				"eslint-utils": "^2.0.0"
 			}
 		},
-		"@webassemblyjs/wast-printer": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz",
-			"integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==",
+		"@typescript-eslint/parser": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz",
+			"integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==",
 			"dev": true,
 			"requires": {
-				"@webassemblyjs/ast": "1.11.0",
-				"@xtuc/long": "4.2.2"
+				"@types/eslint-visitor-keys": "^1.0.0",
+				"@typescript-eslint/experimental-utils": "2.34.0",
+				"@typescript-eslint/typescript-estree": "2.34.0",
+				"eslint-visitor-keys": "^1.1.0"
 			}
 		},
-		"@webpack-cli/configtest": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz",
-			"integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==",
-			"dev": true,
-			"requires": {}
-		},
-		"@webpack-cli/info": {
-			"version": "1.2.3",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz",
-			"integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==",
+		"@typescript-eslint/typescript-estree": {
+			"version": "2.34.0",
+			"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz",
+			"integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==",
 			"dev": true,
 			"requires": {
-				"envinfo": "^7.7.3"
+				"debug": "^4.1.1",
+				"eslint-visitor-keys": "^1.1.0",
+				"glob": "^7.1.6",
+				"is-glob": "^4.0.1",
+				"lodash": "^4.17.15",
+				"semver": "^7.3.2",
+				"tsutils": "^3.17.1"
 			}
 		},
-		"@webpack-cli/serve": {
-			"version": "1.3.1",
-			"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz",
-			"integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==",
-			"dev": true,
-			"requires": {}
-		},
-		"@xtuc/ieee754": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-			"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-			"dev": true
-		},
-		"@xtuc/long": {
-			"version": "4.2.2",
-			"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-			"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+		"@ungap/promise-all-settled": {
+			"version": "1.1.2",
+			"resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+			"integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
 			"dev": true
 		},
 		"acorn": {
@@ -4437,13 +3292,6 @@
 				"uri-js": "^4.2.2"
 			}
 		},
-		"ajv-keywords": {
-			"version": "3.5.2",
-			"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-			"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-			"dev": true,
-			"requires": {}
-		},
 		"ansi-colors": {
 			"version": "4.1.1",
 			"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
@@ -4518,12 +3366,6 @@
 			"integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==",
 			"dev": true
 		},
-		"big.js": {
-			"version": "5.2.2",
-			"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
-			"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
-			"dev": true
-		},
 		"binary": {
 			"version": "0.3.0",
 			"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
@@ -4570,25 +3412,6 @@
 			"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
 			"dev": true
 		},
-		"browserslist": {
-			"version": "4.16.3",
-			"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz",
-			"integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==",
-			"dev": true,
-			"requires": {
-				"caniuse-lite": "^1.0.30001181",
-				"colorette": "^1.2.1",
-				"electron-to-chromium": "^1.3.649",
-				"escalade": "^3.1.1",
-				"node-releases": "^1.1.70"
-			}
-		},
-		"buffer-from": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
-			"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
-			"dev": true
-		},
 		"buffer-indexof-polyfill": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
@@ -4613,12 +3436,6 @@
 			"integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
 			"dev": true
 		},
-		"caniuse-lite": {
-			"version": "1.0.30001204",
-			"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz",
-			"integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==",
-			"dev": true
-		},
 		"chainsaw": {
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
@@ -4661,14 +3478,11 @@
 				"readdirp": "~3.5.0"
 			}
 		},
-		"chrome-trace-event": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
-			"integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
-			"dev": true,
-			"requires": {
-				"tslib": "^1.9.0"
-			}
+		"ci-info": {
+			"version": "2.0.0",
+			"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+			"integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+			"dev": true
 		},
 		"cli-cursor": {
 			"version": "3.1.0",
@@ -4713,17 +3527,6 @@
 				}
 			}
 		},
-		"clone-deep": {
-			"version": "4.0.1",
-			"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
-			"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
-			"dev": true,
-			"requires": {
-				"is-plain-object": "^2.0.4",
-				"kind-of": "^6.0.2",
-				"shallow-clone": "^3.0.0"
-			}
-		},
 		"color-convert": {
 			"version": "1.9.3",
 			"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -4739,16 +3542,10 @@
 			"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
 			"dev": true
 		},
-		"colorette": {
-			"version": "1.2.2",
-			"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
-			"integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
-			"dev": true
-		},
-		"commander": {
-			"version": "2.20.3",
-			"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-			"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+		"compare-versions": {
+			"version": "3.6.0",
+			"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz",
+			"integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==",
 			"dev": true
 		},
 		"concat-map": {
@@ -4762,6 +3559,19 @@
 			"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
 			"dev": true
 		},
+		"cosmiconfig": {
+			"version": "7.0.0",
+			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
+			"integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==",
+			"dev": true,
+			"requires": {
+				"@types/parse-json": "^4.0.0",
+				"import-fresh": "^3.2.1",
+				"parse-json": "^5.0.0",
+				"path-type": "^4.0.0",
+				"yaml": "^1.10.0"
+			}
+		},
 		"cross-spawn": {
 			"version": "6.0.5",
 			"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -4828,63 +3638,25 @@
 				"readable-stream": "^2.0.2"
 			}
 		},
-		"electron-to-chromium": {
-			"version": "1.3.701",
-			"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.701.tgz",
-			"integrity": "sha512-Zd9ofdIMYHYhG1gvnejQDvC/kqSeXQvtXF0yRURGxgwGqDZm9F9Fm3dYFnm5gyuA7xpXfBlzVLN1sz0FjxpKfw==",
-			"dev": true
-		},
 		"emoji-regex": {
 			"version": "8.0.0",
 			"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
 			"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
 			"dev": true
 		},
-		"emojis-list": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-			"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-			"dev": true
-		},
-		"enhanced-resolve": {
-			"version": "4.5.0",
-			"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
-			"integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+		"error-ex": {
+			"version": "1.3.2",
+			"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+			"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
 			"dev": true,
 			"requires": {
-				"graceful-fs": "^4.1.2",
-				"memory-fs": "^0.5.0",
-				"tapable": "^1.0.0"
-			}
-		},
-		"enquirer": {
-			"version": "2.3.6",
-			"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
-			"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
-			"dev": true,
-			"requires": {
-				"ansi-colors": "^4.1.1"
-			}
-		},
-		"envinfo": {
-			"version": "7.7.4",
-			"resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz",
-			"integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==",
-			"dev": true
-		},
-		"errno": {
-			"version": "0.1.8",
-			"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz",
-			"integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==",
-			"dev": true,
-			"requires": {
-				"prr": "~1.0.1"
+				"is-arrayish": "^0.2.1"
 			}
 		},
-		"es-module-lexer": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz",
-			"integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==",
+		"esbuild": {
+			"version": "0.8.57",
+			"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.8.57.tgz",
+			"integrity": "sha512-j02SFrUwFTRUqiY0Kjplwjm1psuzO1d6AjaXKuOR9hrY0HuPsT6sV42B6myW34h1q4CRy+Y3g4RU/cGJeI/nNA==",
 			"dev": true
 		},
 		"escalade": {
@@ -4953,6 +3725,12 @@
 						"eslint-visitor-keys": "^1.1.0"
 					}
 				},
+				"regexpp": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+					"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+					"dev": true
+				},
 				"semver": {
 					"version": "6.3.0",
 					"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -5049,72 +3827,6 @@
 			"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
 			"dev": true
 		},
-		"events": {
-			"version": "3.3.0",
-			"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-			"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-			"dev": true
-		},
-		"execa": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
-			"integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
-			"dev": true,
-			"requires": {
-				"cross-spawn": "^7.0.3",
-				"get-stream": "^6.0.0",
-				"human-signals": "^2.1.0",
-				"is-stream": "^2.0.0",
-				"merge-stream": "^2.0.0",
-				"npm-run-path": "^4.0.1",
-				"onetime": "^5.1.2",
-				"signal-exit": "^3.0.3",
-				"strip-final-newline": "^2.0.0"
-			},
-			"dependencies": {
-				"cross-spawn": {
-					"version": "7.0.3",
-					"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-					"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-					"dev": true,
-					"requires": {
-						"path-key": "^3.1.0",
-						"shebang-command": "^2.0.0",
-						"which": "^2.0.1"
-					}
-				},
-				"path-key": {
-					"version": "3.1.1",
-					"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-					"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-					"dev": true
-				},
-				"shebang-command": {
-					"version": "2.0.0",
-					"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-					"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-					"dev": true,
-					"requires": {
-						"shebang-regex": "^3.0.0"
-					}
-				},
-				"shebang-regex": {
-					"version": "3.0.0",
-					"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-					"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-					"dev": true
-				},
-				"which": {
-					"version": "2.0.2",
-					"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-					"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-					"dev": true,
-					"requires": {
-						"isexe": "^2.0.0"
-					}
-				}
-			}
-		},
 		"external-editor": {
 			"version": "3.1.0",
 			"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
@@ -5144,12 +3856,6 @@
 			"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
 			"dev": true
 		},
-		"fastest-levenshtein": {
-			"version": "1.0.12",
-			"resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
-			"integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
-			"dev": true
-		},
 		"figures": {
 			"version": "3.2.0",
 			"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
@@ -5187,6 +3893,15 @@
 				"path-exists": "^4.0.0"
 			}
 		},
+		"find-versions": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz",
+			"integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==",
+			"dev": true,
+			"requires": {
+				"semver-regex": "^3.1.2"
+			}
+		},
 		"flat": {
 			"version": "5.0.2",
 			"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
@@ -5234,12 +3949,6 @@
 				"rimraf": "2"
 			}
 		},
-		"function-bind": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-			"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-			"dev": true
-		},
 		"functional-red-black-tree": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -5252,12 +3961,6 @@
 			"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
 			"dev": true
 		},
-		"get-stream": {
-			"version": "6.0.0",
-			"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
-			"integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==",
-			"dev": true
-		},
 		"glob": {
 			"version": "7.1.6",
 			"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -5280,12 +3983,6 @@
 				"is-glob": "^4.0.1"
 			}
 		},
-		"glob-to-regexp": {
-			"version": "0.4.1",
-			"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-			"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
-			"dev": true
-		},
 		"globals": {
 			"version": "12.4.0",
 			"resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
@@ -5307,15 +4004,6 @@
 			"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
 			"dev": true
 		},
-		"has": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
-			"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-			"dev": true,
-			"requires": {
-				"function-bind": "^1.1.1"
-			}
-		},
 		"has-flag": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -5349,11 +4037,74 @@
 				"debug": "4"
 			}
 		},
-		"human-signals": {
-			"version": "2.1.0",
-			"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
-			"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
-			"dev": true
+		"husky": {
+			"version": "4.3.8",
+			"resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz",
+			"integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==",
+			"dev": true,
+			"requires": {
+				"chalk": "^4.0.0",
+				"ci-info": "^2.0.0",
+				"compare-versions": "^3.6.0",
+				"cosmiconfig": "^7.0.0",
+				"find-versions": "^4.0.0",
+				"opencollective-postinstall": "^2.0.2",
+				"pkg-dir": "^5.0.0",
+				"please-upgrade-node": "^3.2.0",
+				"slash": "^3.0.0",
+				"which-pm-runs": "^1.0.0"
+			},
+			"dependencies": {
+				"ansi-styles": {
+					"version": "4.3.0",
+					"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+					"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+					"dev": true,
+					"requires": {
+						"color-convert": "^2.0.1"
+					}
+				},
+				"chalk": {
+					"version": "4.1.0",
+					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+					"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+					"dev": true,
+					"requires": {
+						"ansi-styles": "^4.1.0",
+						"supports-color": "^7.1.0"
+					}
+				},
+				"color-convert": {
+					"version": "2.0.1",
+					"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+					"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+					"dev": true,
+					"requires": {
+						"color-name": "~1.1.4"
+					}
+				},
+				"color-name": {
+					"version": "1.1.4",
+					"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+					"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+					"dev": true
+				},
+				"has-flag": {
+					"version": "4.0.0",
+					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+					"dev": true
+				},
+				"supports-color": {
+					"version": "7.2.0",
+					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+					"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+					"dev": true,
+					"requires": {
+						"has-flag": "^4.0.0"
+					}
+				}
+			}
 		},
 		"iconv-lite": {
 			"version": "0.4.24",
@@ -5380,16 +4131,6 @@
 				"resolve-from": "^4.0.0"
 			}
 		},
-		"import-local": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
-			"integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
-			"dev": true,
-			"requires": {
-				"pkg-dir": "^4.2.0",
-				"resolve-cwd": "^3.0.0"
-			}
-		},
 		"imurmurhash": {
 			"version": "0.1.4",
 			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -5497,10 +4238,10 @@
 				}
 			}
 		},
-		"interpret": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
-			"integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+		"is-arrayish": {
+			"version": "0.2.1",
+			"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+			"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
 			"dev": true
 		},
 		"is-binary-path": {
@@ -5512,15 +4253,6 @@
 				"binary-extensions": "^2.0.0"
 			}
 		},
-		"is-core-module": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
-			"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
-			"dev": true,
-			"requires": {
-				"has": "^1.0.3"
-			}
-		},
 		"is-extglob": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -5554,21 +4286,6 @@
 			"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
 			"dev": true
 		},
-		"is-plain-object": {
-			"version": "2.0.4",
-			"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
-			"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
-			"dev": true,
-			"requires": {
-				"isobject": "^3.0.1"
-			}
-		},
-		"is-stream": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
-			"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
-			"dev": true
-		},
 		"isarray": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -5581,40 +4298,6 @@
 			"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
 			"dev": true
 		},
-		"isobject": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-			"integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-			"dev": true
-		},
-		"jest-worker": {
-			"version": "26.6.2",
-			"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
-			"integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
-			"dev": true,
-			"requires": {
-				"@types/node": "*",
-				"merge-stream": "^2.0.0",
-				"supports-color": "^7.0.0"
-			},
-			"dependencies": {
-				"has-flag": {
-					"version": "4.0.0",
-					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-					"dev": true
-				},
-				"supports-color": {
-					"version": "7.2.0",
-					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-					"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-					"dev": true,
-					"requires": {
-						"has-flag": "^4.0.0"
-					}
-				}
-			}
-		},
 		"js-tokens": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -5631,10 +4314,10 @@
 				"esprima": "^4.0.0"
 			}
 		},
-		"json-parse-better-errors": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
-			"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+		"json-parse-even-better-errors": {
+			"version": "2.3.1",
+			"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+			"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
 			"dev": true
 		},
 		"json-schema-traverse": {
@@ -5649,21 +4332,6 @@
 			"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
 			"dev": true
 		},
-		"json5": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
-			"integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
-			"dev": true,
-			"requires": {
-				"minimist": "^1.2.5"
-			}
-		},
-		"kind-of": {
-			"version": "6.0.3",
-			"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
-			"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
-			"dev": true
-		},
 		"kleur": {
 			"version": "3.0.3",
 			"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -5679,29 +4347,18 @@
 				"type-check": "~0.3.2"
 			}
 		},
+		"lines-and-columns": {
+			"version": "1.1.6",
+			"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
+			"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+			"dev": true
+		},
 		"listenercount": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
 			"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=",
 			"dev": true
 		},
-		"loader-runner": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz",
-			"integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==",
-			"dev": true
-		},
-		"loader-utils": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-			"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-			"dev": true,
-			"requires": {
-				"big.js": "^5.2.2",
-				"emojis-list": "^3.0.0",
-				"json5": "^2.1.2"
-			}
-		},
 		"locate-path": {
 			"version": "6.0.0",
 			"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5786,47 +4443,6 @@
 				"yallist": "^4.0.0"
 			}
 		},
-		"memory-fs": {
-			"version": "0.5.0",
-			"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
-			"integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
-			"dev": true,
-			"requires": {
-				"errno": "^0.1.3",
-				"readable-stream": "^2.0.1"
-			}
-		},
-		"merge-stream": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
-			"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
-			"dev": true
-		},
-		"micromatch": {
-			"version": "4.0.2",
-			"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
-			"integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
-			"dev": true,
-			"requires": {
-				"braces": "^3.0.1",
-				"picomatch": "^2.0.5"
-			}
-		},
-		"mime-db": {
-			"version": "1.46.0",
-			"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz",
-			"integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==",
-			"dev": true
-		},
-		"mime-types": {
-			"version": "2.1.29",
-			"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz",
-			"integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==",
-			"dev": true,
-			"requires": {
-				"mime-db": "1.46.0"
-			}
-		},
 		"mimic-fn": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
@@ -5964,47 +4580,18 @@
 			"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
 			"dev": true
 		},
-		"neo-async": {
-			"version": "2.6.2",
-			"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-			"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-			"dev": true
-		},
 		"nice-try": {
 			"version": "1.0.5",
 			"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
 			"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
 			"dev": true
 		},
-		"node-releases": {
-			"version": "1.1.71",
-			"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz",
-			"integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==",
-			"dev": true
-		},
 		"normalize-path": {
 			"version": "3.0.0",
 			"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
 			"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
 			"dev": true
 		},
-		"npm-run-path": {
-			"version": "4.0.1",
-			"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-			"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-			"dev": true,
-			"requires": {
-				"path-key": "^3.0.0"
-			},
-			"dependencies": {
-				"path-key": {
-					"version": "3.1.1",
-					"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-					"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-					"dev": true
-				}
-			}
-		},
 		"once": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -6022,6 +4609,12 @@
 				"mimic-fn": "^2.1.0"
 			}
 		},
+		"opencollective-postinstall": {
+			"version": "2.0.3",
+			"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
+			"integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==",
+			"dev": true
+		},
 		"optionator": {
 			"version": "0.8.3",
 			"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
@@ -6060,12 +4653,6 @@
 				"p-limit": "^3.0.2"
 			}
 		},
-		"p-try": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-			"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
-			"dev": true
-		},
 		"parent-module": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -6075,6 +4662,18 @@
 				"callsites": "^3.0.0"
 			}
 		},
+		"parse-json": {
+			"version": "5.2.0",
+			"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+			"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+			"dev": true,
+			"requires": {
+				"@babel/code-frame": "^7.0.0",
+				"error-ex": "^1.3.1",
+				"json-parse-even-better-errors": "^2.3.0",
+				"lines-and-columns": "^1.1.6"
+			}
+		},
 		"path-exists": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -6092,10 +4691,10 @@
 			"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
 			"dev": true
 		},
-		"path-parse": {
-			"version": "1.0.6",
-			"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-			"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+		"path-type": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+			"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
 			"dev": true
 		},
 		"picomatch": {
@@ -6105,53 +4704,29 @@
 			"dev": true
 		},
 		"pkg-dir": {
-			"version": "4.2.0",
-			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
-			"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz",
+			"integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==",
 			"dev": true,
 			"requires": {
-				"find-up": "^4.0.0"
-			},
-			"dependencies": {
-				"find-up": {
-					"version": "4.1.0",
-					"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-					"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-					"dev": true,
-					"requires": {
-						"locate-path": "^5.0.0",
-						"path-exists": "^4.0.0"
-					}
-				},
-				"locate-path": {
-					"version": "5.0.0",
-					"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-					"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-					"dev": true,
-					"requires": {
-						"p-locate": "^4.1.0"
-					}
-				},
-				"p-limit": {
-					"version": "2.3.0",
-					"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-					"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-					"dev": true,
-					"requires": {
-						"p-try": "^2.0.0"
-					}
-				},
-				"p-locate": {
-					"version": "4.1.0",
-					"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-					"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-					"dev": true,
-					"requires": {
-						"p-limit": "^2.2.0"
-					}
-				}
+				"find-up": "^5.0.0"
+			}
+		},
+		"please-upgrade-node": {
+			"version": "3.2.0",
+			"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz",
+			"integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==",
+			"dev": true,
+			"requires": {
+				"semver-compare": "^1.0.0"
 			}
 		},
+		"preact": {
+			"version": "10.5.13",
+			"resolved": "https://registry.npmjs.org/preact/-/preact-10.5.13.tgz",
+			"integrity": "sha512-q/vlKIGNwzTLu+jCcvywgGrt+H/1P/oIRSD6mV4ln3hmlC+Aa34C7yfPI4+5bzW8pONyVXYS7SvXosy2dKKtWQ==",
+			"dev": true
+		},
 		"prelude-ls": {
 			"version": "1.1.2",
 			"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
@@ -6179,12 +4754,6 @@
 				"sisteransi": "^1.0.5"
 			}
 		},
-		"prr": {
-			"version": "1.0.1",
-			"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
-			"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
-			"dev": true
-		},
 		"punycode": {
 			"version": "2.1.1",
 			"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -6232,19 +4801,10 @@
 				"picomatch": "^2.2.1"
 			}
 		},
-		"rechoir": {
-			"version": "0.7.0",
-			"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz",
-			"integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==",
-			"dev": true,
-			"requires": {
-				"resolve": "^1.9.0"
-			}
-		},
 		"regexpp": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-			"integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+			"version": "3.1.0",
+			"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+			"integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
 			"dev": true
 		},
 		"require-directory": {
@@ -6253,33 +4813,6 @@
 			"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
 			"dev": true
 		},
-		"resolve": {
-			"version": "1.20.0",
-			"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-			"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
-			"dev": true,
-			"requires": {
-				"is-core-module": "^2.2.0",
-				"path-parse": "^1.0.6"
-			}
-		},
-		"resolve-cwd": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
-			"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
-			"dev": true,
-			"requires": {
-				"resolve-from": "^5.0.0"
-			},
-			"dependencies": {
-				"resolve-from": {
-					"version": "5.0.0",
-					"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
-					"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
-					"dev": true
-				}
-			}
-		},
 		"resolve-from": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -6332,17 +4865,6 @@
 			"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
 			"dev": true
 		},
-		"schema-utils": {
-			"version": "3.0.0",
-			"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz",
-			"integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==",
-			"dev": true,
-			"requires": {
-				"@types/json-schema": "^7.0.6",
-				"ajv": "^6.12.5",
-				"ajv-keywords": "^3.5.2"
-			}
-		},
 		"semver": {
 			"version": "7.3.5",
 			"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
@@ -6352,6 +4874,18 @@
 				"lru-cache": "^6.0.0"
 			}
 		},
+		"semver-compare": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+			"integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+			"dev": true
+		},
+		"semver-regex": {
+			"version": "3.1.2",
+			"resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.2.tgz",
+			"integrity": "sha512-bXWyL6EAKOJa81XG1OZ/Yyuq+oT0b2YLlxx7c+mrdYPaPbnj6WgVULXhinMIeZGufuUBu/eVRqXEhiv4imfwxA==",
+			"dev": true
+		},
 		"serialize-javascript": {
 			"version": "5.0.1",
 			"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
@@ -6367,15 +4901,6 @@
 			"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
 			"dev": true
 		},
-		"shallow-clone": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
-			"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
-			"dev": true,
-			"requires": {
-				"kind-of": "^6.0.2"
-			}
-		},
 		"shebang-command": {
 			"version": "1.2.0",
 			"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -6402,6 +4927,12 @@
 			"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
 			"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg=="
 		},
+		"slash": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+			"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+			"dev": true
+		},
 		"slice-ansi": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
@@ -6421,28 +4952,6 @@
 				}
 			}
 		},
-		"source-list-map": {
-			"version": "2.0.1",
-			"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
-			"integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
-			"dev": true
-		},
-		"source-map": {
-			"version": "0.6.1",
-			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-			"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-			"dev": true
-		},
-		"source-map-support": {
-			"version": "0.5.19",
-			"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
-			"integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
-			"dev": true,
-			"requires": {
-				"buffer-from": "^1.0.0",
-				"source-map": "^0.6.0"
-			}
-		},
 		"sprintf-js": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -6503,12 +5012,6 @@
 				"ansi-regex": "^4.1.0"
 			}
 		},
-		"strip-final-newline": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-			"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
-			"dev": true
-		},
 		"strip-json-comments": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -6561,45 +5064,6 @@
 				}
 			}
 		},
-		"tapable": {
-			"version": "1.1.3",
-			"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
-			"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
-			"dev": true
-		},
-		"terser": {
-			"version": "5.6.1",
-			"resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz",
-			"integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==",
-			"dev": true,
-			"requires": {
-				"commander": "^2.20.0",
-				"source-map": "~0.7.2",
-				"source-map-support": "~0.5.19"
-			},
-			"dependencies": {
-				"source-map": {
-					"version": "0.7.3",
-					"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-					"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
-					"dev": true
-				}
-			}
-		},
-		"terser-webpack-plugin": {
-			"version": "5.1.1",
-			"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz",
-			"integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==",
-			"dev": true,
-			"requires": {
-				"jest-worker": "^26.6.2",
-				"p-limit": "^3.1.0",
-				"schema-utils": "^3.0.0",
-				"serialize-javascript": "^5.0.1",
-				"source-map": "^0.6.1",
-				"terser": "^5.5.1"
-			}
-		},
 		"text-table": {
 			"version": "0.2.0",
 			"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
@@ -6636,70 +5100,6 @@
 			"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=",
 			"dev": true
 		},
-		"ts-loader": {
-			"version": "8.1.0",
-			"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.1.0.tgz",
-			"integrity": "sha512-YiQipGGAFj2zBfqLhp28yUvPP9jUGqHxRzrGYuc82Z2wM27YIHbElXiaZDc93c3x0mz4zvBmS6q/DgExpdj37A==",
-			"dev": true,
-			"requires": {
-				"chalk": "^4.1.0",
-				"enhanced-resolve": "^4.0.0",
-				"loader-utils": "^2.0.0",
-				"micromatch": "^4.0.0",
-				"semver": "^7.3.4"
-			},
-			"dependencies": {
-				"ansi-styles": {
-					"version": "4.3.0",
-					"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-					"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-					"dev": true,
-					"requires": {
-						"color-convert": "^2.0.1"
-					}
-				},
-				"chalk": {
-					"version": "4.1.0",
-					"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-					"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-					"dev": true,
-					"requires": {
-						"ansi-styles": "^4.1.0",
-						"supports-color": "^7.1.0"
-					}
-				},
-				"color-convert": {
-					"version": "2.0.1",
-					"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-					"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-					"dev": true,
-					"requires": {
-						"color-name": "~1.1.4"
-					}
-				},
-				"color-name": {
-					"version": "1.1.4",
-					"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-					"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-					"dev": true
-				},
-				"has-flag": {
-					"version": "4.0.0",
-					"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-					"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-					"dev": true
-				},
-				"supports-color": {
-					"version": "7.2.0",
-					"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-					"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-					"dev": true,
-					"requires": {
-						"has-flag": "^4.0.0"
-					}
-				}
-			}
-		},
 		"tslib": {
 			"version": "1.14.1",
 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
@@ -6731,9 +5131,9 @@
 			"dev": true
 		},
 		"typescript": {
-			"version": "4.2.3",
-			"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz",
-			"integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==",
+			"version": "3.9.9",
+			"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
+			"integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
 			"dev": true
 		},
 		"unzipper": {
@@ -6784,15 +5184,6 @@
 				"vscode-debugprotocol": "1.46.0"
 			}
 		},
-		"vscode-debugadapter-testsupport": {
-			"version": "1.46.0",
-			"resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.46.0.tgz",
-			"integrity": "sha512-6n+uu4+Q5sZvN2FgFLNJkyaE6AECYzFh+Hfv+IeJoVKA7KNiQ1SNd3yTsvSFxkS00LmVU6V00XGaqZRlwM15Jg==",
-			"dev": true,
-			"requires": {
-				"vscode-debugprotocol": "^1.46.0"
-			}
-		},
 		"vscode-debugprotocol": {
 			"version": "1.46.0",
 			"resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.46.0.tgz",
@@ -6876,121 +5267,6 @@
 				}
 			}
 		},
-		"watchpack": {
-			"version": "2.1.1",
-			"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz",
-			"integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==",
-			"dev": true,
-			"requires": {
-				"glob-to-regexp": "^0.4.1",
-				"graceful-fs": "^4.1.2"
-			}
-		},
-		"webpack": {
-			"version": "5.28.0",
-			"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz",
-			"integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==",
-			"dev": true,
-			"requires": {
-				"@types/eslint-scope": "^3.7.0",
-				"@types/estree": "^0.0.46",
-				"@webassemblyjs/ast": "1.11.0",
-				"@webassemblyjs/wasm-edit": "1.11.0",
-				"@webassemblyjs/wasm-parser": "1.11.0",
-				"acorn": "^8.0.4",
-				"browserslist": "^4.14.5",
-				"chrome-trace-event": "^1.0.2",
-				"enhanced-resolve": "^5.7.0",
-				"es-module-lexer": "^0.4.0",
-				"eslint-scope": "^5.1.1",
-				"events": "^3.2.0",
-				"glob-to-regexp": "^0.4.1",
-				"graceful-fs": "^4.2.4",
-				"json-parse-better-errors": "^1.0.2",
-				"loader-runner": "^4.2.0",
-				"mime-types": "^2.1.27",
-				"neo-async": "^2.6.2",
-				"schema-utils": "^3.0.0",
-				"tapable": "^2.1.1",
-				"terser-webpack-plugin": "^5.1.1",
-				"watchpack": "^2.0.0",
-				"webpack-sources": "^2.1.1"
-			},
-			"dependencies": {
-				"acorn": {
-					"version": "8.1.0",
-					"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz",
-					"integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==",
-					"dev": true
-				},
-				"enhanced-resolve": {
-					"version": "5.7.0",
-					"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
-					"integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
-					"dev": true,
-					"requires": {
-						"graceful-fs": "^4.2.4",
-						"tapable": "^2.2.0"
-					}
-				},
-				"tapable": {
-					"version": "2.2.0",
-					"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
-					"integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
-					"dev": true
-				}
-			}
-		},
-		"webpack-cli": {
-			"version": "4.6.0",
-			"resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz",
-			"integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==",
-			"dev": true,
-			"requires": {
-				"@discoveryjs/json-ext": "^0.5.0",
-				"@webpack-cli/configtest": "^1.0.2",
-				"@webpack-cli/info": "^1.2.3",
-				"@webpack-cli/serve": "^1.3.1",
-				"colorette": "^1.2.1",
-				"commander": "^7.0.0",
-				"enquirer": "^2.3.6",
-				"execa": "^5.0.0",
-				"fastest-levenshtein": "^1.0.12",
-				"import-local": "^3.0.2",
-				"interpret": "^2.2.0",
-				"rechoir": "^0.7.0",
-				"v8-compile-cache": "^2.2.0",
-				"webpack-merge": "^5.7.3"
-			},
-			"dependencies": {
-				"commander": {
-					"version": "7.2.0",
-					"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
-					"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
-					"dev": true
-				}
-			}
-		},
-		"webpack-merge": {
-			"version": "5.7.3",
-			"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz",
-			"integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==",
-			"dev": true,
-			"requires": {
-				"clone-deep": "^4.0.1",
-				"wildcard": "^2.0.0"
-			}
-		},
-		"webpack-sources": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz",
-			"integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==",
-			"dev": true,
-			"requires": {
-				"source-list-map": "^2.0.1",
-				"source-map": "^0.6.1"
-			}
-		},
 		"which": {
 			"version": "1.3.1",
 			"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -7000,6 +5276,12 @@
 				"isexe": "^2.0.0"
 			}
 		},
+		"which-pm-runs": {
+			"version": "1.0.0",
+			"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
+			"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=",
+			"dev": true
+		},
 		"wide-align": {
 			"version": "1.1.3",
 			"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@@ -7042,12 +5324,6 @@
 				}
 			}
 		},
-		"wildcard": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
-			"integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
-			"dev": true
-		},
 		"word-wrap": {
 			"version": "1.2.3",
 			"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -7138,6 +5414,12 @@
 			"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 			"dev": true
 		},
+		"yaml": {
+			"version": "1.10.2",
+			"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+			"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+			"dev": true
+		},
 		"yargs": {
 			"version": "16.2.0",
 			"resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
diff --git a/package.json b/package.json
index ba8a29b..2aa8d9e 100644
--- a/package.json
+++ b/package.json
@@ -33,7 +33,7 @@
 		"onCommand:extension.pharo-debug.debugEditorContents",
 		"onNotebook:moosebook"
 	],
-	"main": "./out/extension",
+	"main": "./dist/extension.js",
 	"contributes": {
 		"configuration": {
 			"type": "object",
@@ -184,11 +184,14 @@
 	"scripts": {
 		"compile": "tsc -b",
 		"test": "sh ./scripts/e2e.sh",
-		"vscode:prepublish": "webpack --mode production",
+		"vscode:prepublish": "npm run bundle-all",
 		"webpack": "webpack --mode development",
 		"webpack-dev": "webpack --mode development --watch",
 		"test-compile": "tsc -p ./",
-		"get-proposed": "npx vscode-dts dev"
+		"get-proposed": "npx vscode-dts dev",
+		"get-main": "npx vscode-dts main",
+		"bundle-all": "node esbuild.js",
+		"bundle-watch": "node esbuild.js --watch"
 	},
 	"dependencies": {
 		"vscode-debugadapter": "^1.43.0",
@@ -197,17 +200,18 @@
 		"vscode-languageserver-protocol": "3.15.3"
 	},
 	"devDependencies": {
-		"@types/mocha": "^8.0.3",
-		"@types/node": "^12.12.0",
-		"@types/vscode": "1.49.0",
-		"@typescript-eslint/parser": "^2.3.0",
-		"eslint": "^6.4.0",
+		"@types/glob": "^7.1.1",
+		"@types/mocha": "^7.0.1",
+		"@types/node": "^12.11.7",
+		"@typescript-eslint/eslint-plugin": "^2.18.0",
+		"@typescript-eslint/parser": "^2.18.0",
+		"esbuild": "^0.8.34",
+		"eslint": "^6.8.0",
+		"glob": "^7.1.6",
+		"husky": "^4.2.3",
 		"mocha": "^8.1.1",
-		"ts-loader": "^8.0.12",
-		"typescript": "^4.0.2",
-		"vscode-debugadapter-testsupport": "^1.43.0",
-		"vscode-test": "^1.3.0",
-		"webpack": "^5.11.1",
-		"webpack-cli": "^4.3.0"
+		"preact": "^10.4.6",
+		"typescript": "^3.8.3",
+		"vscode-test": "^1.3.0"
 	}
 }
diff --git a/myTests/hello.moosebook b/samples/hello.moosebook
similarity index 100%
rename from myTests/hello.moosebook
rename to samples/hello.moosebook
diff --git a/myTests/oo-analysis.moosebook b/samples/oo-analysis.moosebook
similarity index 100%
rename from myTests/oo-analysis.moosebook
rename to samples/oo-analysis.moosebook
diff --git a/myTests/test.moosebook b/samples/test.moosebook
similarity index 100%
rename from myTests/test.moosebook
rename to samples/test.moosebook
diff --git a/src/tsconfig.json b/src/tsconfig.json
new file mode 100644
index 0000000..0ce96e5
--- /dev/null
+++ b/src/tsconfig.json
@@ -0,0 +1,7 @@
+{
+	"extends": "../tsconfig.base.json",
+	"compilerOptions": {
+		"composite": true,
+		"outDir": "../out/src/extension",
+	}
+}
diff --git a/src/types/vscode.d.ts b/src/types/vscode.d.ts
new file mode 100644
index 0000000..6052472
--- /dev/null
+++ b/src/types/vscode.d.ts
@@ -0,0 +1,12680 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+declare module 'vscode' {
+
+	/**
+	 * The version of the editor.
+	 */
+	export const version: string;
+
+	/**
+	 * Represents a reference to a command. Provides a title which
+	 * will be used to represent a command in the UI and, optionally,
+	 * an array of arguments which will be passed to the command handler
+	 * function when invoked.
+	 */
+	export interface Command {
+		/**
+		 * Title of the command, like `save`.
+		 */
+		title: string;
+
+		/**
+		 * The identifier of the actual command handler.
+		 * @see [commands.registerCommand](#commands.registerCommand).
+		 */
+		command: string;
+
+		/**
+		 * A tooltip for the command, when represented in the UI.
+		 */
+		tooltip?: string;
+
+		/**
+		 * Arguments that the command handler should be
+		 * invoked with.
+		 */
+		arguments?: any[];
+	}
+
+	/**
+	 * Represents a line of text, such as a line of source code.
+	 *
+	 * TextLine objects are __immutable__. When a [document](#TextDocument) changes,
+	 * previously retrieved lines will not represent the latest state.
+	 */
+	export interface TextLine {
+
+		/**
+		 * The zero-based line number.
+		 */
+		readonly lineNumber: number;
+
+		/**
+		 * The text of this line without the line separator characters.
+		 */
+		readonly text: string;
+
+		/**
+		 * The range this line covers without the line separator characters.
+		 */
+		readonly range: Range;
+
+		/**
+		 * The range this line covers with the line separator characters.
+		 */
+		readonly rangeIncludingLineBreak: Range;
+
+		/**
+		 * The offset of the first character which is not a whitespace character as defined
+		 * by `/\s/`. **Note** that if a line is all whitespace the length of the line is returned.
+		 */
+		readonly firstNonWhitespaceCharacterIndex: number;
+
+		/**
+		 * Whether this line is whitespace only, shorthand
+		 * for [TextLine.firstNonWhitespaceCharacterIndex](#TextLine.firstNonWhitespaceCharacterIndex) === [TextLine.text.length](#TextLine.text).
+		 */
+		readonly isEmptyOrWhitespace: boolean;
+	}
+
+	/**
+	 * Represents a text document, such as a source file. Text documents have
+	 * [lines](#TextLine) and knowledge about an underlying resource like a file.
+	 */
+	export interface TextDocument {
+
+		/**
+		 * The associated uri for this document.
+		 *
+		 * *Note* that most documents use the `file`-scheme, which means they are files on disk. However, **not** all documents are
+		 * saved on disk and therefore the `scheme` must be checked before trying to access the underlying file or siblings on disk.
+		 *
+		 * @see [FileSystemProvider](#FileSystemProvider)
+		 * @see [TextDocumentContentProvider](#TextDocumentContentProvider)
+		 */
+		readonly uri: Uri;
+
+		/**
+		 * The file system path of the associated resource. Shorthand
+		 * notation for [TextDocument.uri.fsPath](#TextDocument.uri). Independent of the uri scheme.
+		 */
+		readonly fileName: string;
+
+		/**
+		 * Is this document representing an untitled file which has never been saved yet. *Note* that
+		 * this does not mean the document will be saved to disk, use [`uri.scheme`](#Uri.scheme)
+		 * to figure out where a document will be [saved](#FileSystemProvider), e.g. `file`, `ftp` etc.
+		 */
+		readonly isUntitled: boolean;
+
+		/**
+		 * The identifier of the language associated with this document.
+		 */
+		readonly languageId: string;
+
+		/**
+		 * The version number of this document (it will strictly increase after each
+		 * change, including undo/redo).
+		 */
+		readonly version: number;
+
+		/**
+		 * `true` if there are unpersisted changes.
+		 */
+		readonly isDirty: boolean;
+
+		/**
+		 * `true` if the document has been closed. A closed document isn't synchronized anymore
+		 * and won't be re-used when the same resource is opened again.
+		 */
+		readonly isClosed: boolean;
+
+		/**
+		 * Save the underlying file.
+		 *
+		 * @return A promise that will resolve to true when the file
+		 * has been saved. If the file was not dirty or the save failed,
+		 * will return false.
+		 */
+		save(): Thenable<boolean>;
+
+		/**
+		 * The [end of line](#EndOfLine) sequence that is predominately
+		 * used in this document.
+		 */
+		readonly eol: EndOfLine;
+
+		/**
+		 * The number of lines in this document.
+		 */
+		readonly lineCount: number;
+
+		/**
+		 * Returns a text line denoted by the line number. Note
+		 * that the returned object is *not* live and changes to the
+		 * document are not reflected.
+		 *
+		 * @param line A line number in [0, lineCount).
+		 * @return A [line](#TextLine).
+		 */
+		lineAt(line: number): TextLine;
+
+		/**
+		 * Returns a text line denoted by the position. Note
+		 * that the returned object is *not* live and changes to the
+		 * document are not reflected.
+		 *
+		 * The position will be [adjusted](#TextDocument.validatePosition).
+		 *
+		 * @see [TextDocument.lineAt](#TextDocument.lineAt)
+		 * @param position A position.
+		 * @return A [line](#TextLine).
+		 */
+		lineAt(position: Position): TextLine;
+
+		/**
+		 * Converts the position to a zero-based offset.
+		 *
+		 * The position will be [adjusted](#TextDocument.validatePosition).
+		 *
+		 * @param position A position.
+		 * @return A valid zero-based offset.
+		 */
+		offsetAt(position: Position): number;
+
+		/**
+		 * Converts a zero-based offset to a position.
+		 *
+		 * @param offset A zero-based offset.
+		 * @return A valid [position](#Position).
+		 */
+		positionAt(offset: number): Position;
+
+		/**
+		 * Get the text of this document. A substring can be retrieved by providing
+		 * a range. The range will be [adjusted](#TextDocument.validateRange).
+		 *
+		 * @param range Include only the text included by the range.
+		 * @return The text inside the provided range or the entire text.
+		 */
+		getText(range?: Range): string;
+
+		/**
+		 * Get a word-range at the given position. By default words are defined by
+		 * common separators, like space, -, _, etc. In addition, per language custom
+		 * [word definitions](#LanguageConfiguration.wordPattern) can be defined. It
+		 * is also possible to provide a custom regular expression.
+		 *
+		 * * *Note 1:* A custom regular expression must not match the empty string and
+		 * if it does, it will be ignored.
+		 * * *Note 2:* A custom regular expression will fail to match multiline strings
+		 * and in the name of speed regular expressions should not match words with
+		 * spaces. Use [`TextLine.text`](#TextLine.text) for more complex, non-wordy, scenarios.
+		 *
+		 * The position will be [adjusted](#TextDocument.validatePosition).
+		 *
+		 * @param position A position.
+		 * @param regex Optional regular expression that describes what a word is.
+		 * @return A range spanning a word, or `undefined`.
+		 */
+		getWordRangeAtPosition(position: Position, regex?: RegExp): Range | undefined;
+
+		/**
+		 * Ensure a range is completely contained in this document.
+		 *
+		 * @param range A range.
+		 * @return The given range or a new, adjusted range.
+		 */
+		validateRange(range: Range): Range;
+
+		/**
+		 * Ensure a position is contained in the range of this document.
+		 *
+		 * @param position A position.
+		 * @return The given position or a new, adjusted position.
+		 */
+		validatePosition(position: Position): Position;
+	}
+
+	/**
+	 * Represents a line and character position, such as
+	 * the position of the cursor.
+	 *
+	 * Position objects are __immutable__. Use the [with](#Position.with) or
+	 * [translate](#Position.translate) methods to derive new positions
+	 * from an existing position.
+	 */
+	export class Position {
+
+		/**
+		 * The zero-based line value.
+		 */
+		readonly line: number;
+
+		/**
+		 * The zero-based character value.
+		 */
+		readonly character: number;
+
+		/**
+		 * @param line A zero-based line value.
+		 * @param character A zero-based character value.
+		 */
+		constructor(line: number, character: number);
+
+		/**
+		 * Check if this position is before `other`.
+		 *
+		 * @param other A position.
+		 * @return `true` if position is on a smaller line
+		 * or on the same line on a smaller character.
+		 */
+		isBefore(other: Position): boolean;
+
+		/**
+		 * Check if this position is before or equal to `other`.
+		 *
+		 * @param other A position.
+		 * @return `true` if position is on a smaller line
+		 * or on the same line on a smaller or equal character.
+		 */
+		isBeforeOrEqual(other: Position): boolean;
+
+		/**
+		 * Check if this position is after `other`.
+		 *
+		 * @param other A position.
+		 * @return `true` if position is on a greater line
+		 * or on the same line on a greater character.
+		 */
+		isAfter(other: Position): boolean;
+
+		/**
+		 * Check if this position is after or equal to `other`.
+		 *
+		 * @param other A position.
+		 * @return `true` if position is on a greater line
+		 * or on the same line on a greater or equal character.
+		 */
+		isAfterOrEqual(other: Position): boolean;
+
+		/**
+		 * Check if this position is equal to `other`.
+		 *
+		 * @param other A position.
+		 * @return `true` if the line and character of the given position are equal to
+		 * the line and character of this position.
+		 */
+		isEqual(other: Position): boolean;
+
+		/**
+		 * Compare this to `other`.
+		 *
+		 * @param other A position.
+		 * @return A number smaller than zero if this position is before the given position,
+		 * a number greater than zero if this position is after the given position, or zero when
+		 * this and the given position are equal.
+		 */
+		compareTo(other: Position): number;
+
+		/**
+		 * Create a new position relative to this position.
+		 *
+		 * @param lineDelta Delta value for the line value, default is `0`.
+		 * @param characterDelta Delta value for the character value, default is `0`.
+		 * @return A position which line and character is the sum of the current line and
+		 * character and the corresponding deltas.
+		 */
+		translate(lineDelta?: number, characterDelta?: number): Position;
+
+		/**
+		 * Derived a new position relative to this position.
+		 *
+		 * @param change An object that describes a delta to this position.
+		 * @return A position that reflects the given delta. Will return `this` position if the change
+		 * is not changing anything.
+		 */
+		translate(change: { lineDelta?: number; characterDelta?: number; }): Position;
+
+		/**
+		 * Create a new position derived from this position.
+		 *
+		 * @param line Value that should be used as line value, default is the [existing value](#Position.line)
+		 * @param character Value that should be used as character value, default is the [existing value](#Position.character)
+		 * @return A position where line and character are replaced by the given values.
+		 */
+		with(line?: number, character?: number): Position;
+
+		/**
+		 * Derived a new position from this position.
+		 *
+		 * @param change An object that describes a change to this position.
+		 * @return A position that reflects the given change. Will return `this` position if the change
+		 * is not changing anything.
+		 */
+		with(change: { line?: number; character?: number; }): Position;
+	}
+
+	/**
+	 * A range represents an ordered pair of two positions.
+	 * It is guaranteed that [start](#Range.start).isBeforeOrEqual([end](#Range.end))
+	 *
+	 * Range objects are __immutable__. Use the [with](#Range.with),
+	 * [intersection](#Range.intersection), or [union](#Range.union) methods
+	 * to derive new ranges from an existing range.
+	 */
+	export class Range {
+
+		/**
+		 * The start position. It is before or equal to [end](#Range.end).
+		 */
+		readonly start: Position;
+
+		/**
+		 * The end position. It is after or equal to [start](#Range.start).
+		 */
+		readonly end: Position;
+
+		/**
+		 * Create a new range from two positions. If `start` is not
+		 * before or equal to `end`, the values will be swapped.
+		 *
+		 * @param start A position.
+		 * @param end A position.
+		 */
+		constructor(start: Position, end: Position);
+
+		/**
+		 * Create a new range from number coordinates. It is a shorter equivalent of
+		 * using `new Range(new Position(startLine, startCharacter), new Position(endLine, endCharacter))`
+		 *
+		 * @param startLine A zero-based line value.
+		 * @param startCharacter A zero-based character value.
+		 * @param endLine A zero-based line value.
+		 * @param endCharacter A zero-based character value.
+		 */
+		constructor(startLine: number, startCharacter: number, endLine: number, endCharacter: number);
+
+		/**
+		 * `true` if `start` and `end` are equal.
+		 */
+		isEmpty: boolean;
+
+		/**
+		 * `true` if `start.line` and `end.line` are equal.
+		 */
+		isSingleLine: boolean;
+
+		/**
+		 * Check if a position or a range is contained in this range.
+		 *
+		 * @param positionOrRange A position or a range.
+		 * @return `true` if the position or range is inside or equal
+		 * to this range.
+		 */
+		contains(positionOrRange: Position | Range): boolean;
+
+		/**
+		 * Check if `other` equals this range.
+		 *
+		 * @param other A range.
+		 * @return `true` when start and end are [equal](#Position.isEqual) to
+		 * start and end of this range.
+		 */
+		isEqual(other: Range): boolean;
+
+		/**
+		 * Intersect `range` with this range and returns a new range or `undefined`
+		 * if the ranges have no overlap.
+		 *
+		 * @param range A range.
+		 * @return A range of the greater start and smaller end positions. Will
+		 * return undefined when there is no overlap.
+		 */
+		intersection(range: Range): Range | undefined;
+
+		/**
+		 * Compute the union of `other` with this range.
+		 *
+		 * @param other A range.
+		 * @return A range of smaller start position and the greater end position.
+		 */
+		union(other: Range): Range;
+
+		/**
+		 * Derived a new range from this range.
+		 *
+		 * @param start A position that should be used as start. The default value is the [current start](#Range.start).
+		 * @param end A position that should be used as end. The default value is the [current end](#Range.end).
+		 * @return A range derived from this range with the given start and end position.
+		 * If start and end are not different `this` range will be returned.
+		 */
+		with(start?: Position, end?: Position): Range;
+
+		/**
+		 * Derived a new range from this range.
+		 *
+		 * @param change An object that describes a change to this range.
+		 * @return A range that reflects the given change. Will return `this` range if the change
+		 * is not changing anything.
+		 */
+		with(change: { start?: Position, end?: Position }): Range;
+	}
+
+	/**
+	 * Represents a text selection in an editor.
+	 */
+	export class Selection extends Range {
+
+		/**
+		 * The position at which the selection starts.
+		 * This position might be before or after [active](#Selection.active).
+		 */
+		anchor: Position;
+
+		/**
+		 * The position of the cursor.
+		 * This position might be before or after [anchor](#Selection.anchor).
+		 */
+		active: Position;
+
+		/**
+		 * Create a selection from two positions.
+		 *
+		 * @param anchor A position.
+		 * @param active A position.
+		 */
+		constructor(anchor: Position, active: Position);
+
+		/**
+		 * Create a selection from four coordinates.
+		 *
+		 * @param anchorLine A zero-based line value.
+		 * @param anchorCharacter A zero-based character value.
+		 * @param activeLine A zero-based line value.
+		 * @param activeCharacter A zero-based character value.
+		 */
+		constructor(anchorLine: number, anchorCharacter: number, activeLine: number, activeCharacter: number);
+
+		/**
+		 * A selection is reversed if [active](#Selection.active).isBefore([anchor](#Selection.anchor)).
+		 */
+		isReversed: boolean;
+	}
+
+	/**
+	 * Represents sources that can cause [selection change events](#window.onDidChangeTextEditorSelection).
+	*/
+	export enum TextEditorSelectionChangeKind {
+		/**
+		 * Selection changed due to typing in the editor.
+		 */
+		Keyboard = 1,
+		/**
+		 * Selection change due to clicking in the editor.
+		 */
+		Mouse = 2,
+		/**
+		 * Selection changed because a command ran.
+		 */
+		Command = 3
+	}
+
+	/**
+	 * Represents an event describing the change in a [text editor's selections](#TextEditor.selections).
+	 */
+	export interface TextEditorSelectionChangeEvent {
+		/**
+		 * The [text editor](#TextEditor) for which the selections have changed.
+		 */
+		readonly textEditor: TextEditor;
+		/**
+		 * The new value for the [text editor's selections](#TextEditor.selections).
+		 */
+		readonly selections: ReadonlyArray<Selection>;
+		/**
+		 * The [change kind](#TextEditorSelectionChangeKind) which has triggered this
+		 * event. Can be `undefined`.
+		 */
+		readonly kind?: TextEditorSelectionChangeKind;
+	}
+
+	/**
+	 * Represents an event describing the change in a [text editor's visible ranges](#TextEditor.visibleRanges).
+	 */
+	export interface TextEditorVisibleRangesChangeEvent {
+		/**
+		 * The [text editor](#TextEditor) for which the visible ranges have changed.
+		 */
+		readonly textEditor: TextEditor;
+		/**
+		 * The new value for the [text editor's visible ranges](#TextEditor.visibleRanges).
+		 */
+		readonly visibleRanges: ReadonlyArray<Range>;
+	}
+
+	/**
+	 * Represents an event describing the change in a [text editor's options](#TextEditor.options).
+	 */
+	export interface TextEditorOptionsChangeEvent {
+		/**
+		 * The [text editor](#TextEditor) for which the options have changed.
+		 */
+		readonly textEditor: TextEditor;
+		/**
+		 * The new value for the [text editor's options](#TextEditor.options).
+		 */
+		readonly options: TextEditorOptions;
+	}
+
+	/**
+	 * Represents an event describing the change of a [text editor's view column](#TextEditor.viewColumn).
+	 */
+	export interface TextEditorViewColumnChangeEvent {
+		/**
+		 * The [text editor](#TextEditor) for which the view column has changed.
+		 */
+		readonly textEditor: TextEditor;
+		/**
+		 * The new value for the [text editor's view column](#TextEditor.viewColumn).
+		 */
+		readonly viewColumn: ViewColumn;
+	}
+
+	/**
+	 * Rendering style of the cursor.
+	 */
+	export enum TextEditorCursorStyle {
+		/**
+		 * Render the cursor as a vertical thick line.
+		 */
+		Line = 1,
+		/**
+		 * Render the cursor as a block filled.
+		 */
+		Block = 2,
+		/**
+		 * Render the cursor as a thick horizontal line.
+		 */
+		Underline = 3,
+		/**
+		 * Render the cursor as a vertical thin line.
+		 */
+		LineThin = 4,
+		/**
+		 * Render the cursor as a block outlined.
+		 */
+		BlockOutline = 5,
+		/**
+		 * Render the cursor as a thin horizontal line.
+		 */
+		UnderlineThin = 6
+	}
+
+	/**
+	 * Rendering style of the line numbers.
+	 */
+	export enum TextEditorLineNumbersStyle {
+		/**
+		 * Do not render the line numbers.
+		 */
+		Off = 0,
+		/**
+		 * Render the line numbers.
+		 */
+		On = 1,
+		/**
+		 * Render the line numbers with values relative to the primary cursor location.
+		 */
+		Relative = 2
+	}
+
+	/**
+	 * Represents a [text editor](#TextEditor)'s [options](#TextEditor.options).
+	 */
+	export interface TextEditorOptions {
+
+		/**
+		 * The size in spaces a tab takes. This is used for two purposes:
+		 *  - the rendering width of a tab character;
+		 *  - the number of spaces to insert when [insertSpaces](#TextEditorOptions.insertSpaces) is true.
+		 *
+		 * When getting a text editor's options, this property will always be a number (resolved).
+		 * When setting a text editor's options, this property is optional and it can be a number or `"auto"`.
+		 */
+		tabSize?: number | string;
+
+		/**
+		 * When pressing Tab insert [n](#TextEditorOptions.tabSize) spaces.
+		 * When getting a text editor's options, this property will always be a boolean (resolved).
+		 * When setting a text editor's options, this property is optional and it can be a boolean or `"auto"`.
+		 */
+		insertSpaces?: boolean | string;
+
+		/**
+		 * The rendering style of the cursor in this editor.
+		 * When getting a text editor's options, this property will always be present.
+		 * When setting a text editor's options, this property is optional.
+		 */
+		cursorStyle?: TextEditorCursorStyle;
+
+		/**
+		 * Render relative line numbers w.r.t. the current line number.
+		 * When getting a text editor's options, this property will always be present.
+		 * When setting a text editor's options, this property is optional.
+		 */
+		lineNumbers?: TextEditorLineNumbersStyle;
+	}
+
+	/**
+	 * Represents a handle to a set of decorations
+	 * sharing the same [styling options](#DecorationRenderOptions) in a [text editor](#TextEditor).
+	 *
+	 * To get an instance of a `TextEditorDecorationType` use
+	 * [createTextEditorDecorationType](#window.createTextEditorDecorationType).
+	 */
+	export interface TextEditorDecorationType {
+
+		/**
+		 * Internal representation of the handle.
+		 */
+		readonly key: string;
+
+		/**
+		 * Remove this decoration type and all decorations on all text editors using it.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Represents different [reveal](#TextEditor.revealRange) strategies in a text editor.
+	 */
+	export enum TextEditorRevealType {
+		/**
+		 * The range will be revealed with as little scrolling as possible.
+		 */
+		Default = 0,
+		/**
+		 * The range will always be revealed in the center of the viewport.
+		 */
+		InCenter = 1,
+		/**
+		 * If the range is outside the viewport, it will be revealed in the center of the viewport.
+		 * Otherwise, it will be revealed with as little scrolling as possible.
+		 */
+		InCenterIfOutsideViewport = 2,
+		/**
+		 * The range will always be revealed at the top of the viewport.
+		 */
+		AtTop = 3
+	}
+
+	/**
+	 * Represents different positions for rendering a decoration in an [overview ruler](#DecorationRenderOptions.overviewRulerLane).
+	 * The overview ruler supports three lanes.
+	 */
+	export enum OverviewRulerLane {
+		Left = 1,
+		Center = 2,
+		Right = 4,
+		Full = 7
+	}
+
+	/**
+	 * Describes the behavior of decorations when typing/editing at their edges.
+	 */
+	export enum DecorationRangeBehavior {
+		/**
+		 * The decoration's range will widen when edits occur at the start or end.
+		 */
+		OpenOpen = 0,
+		/**
+		 * The decoration's range will not widen when edits occur at the start of end.
+		 */
+		ClosedClosed = 1,
+		/**
+		 * The decoration's range will widen when edits occur at the start, but not at the end.
+		 */
+		OpenClosed = 2,
+		/**
+		 * The decoration's range will widen when edits occur at the end, but not at the start.
+		 */
+		ClosedOpen = 3
+	}
+
+	/**
+	 * Represents options to configure the behavior of showing a [document](#TextDocument) in an [editor](#TextEditor).
+	 */
+	export interface TextDocumentShowOptions {
+		/**
+		 * An optional view column in which the [editor](#TextEditor) should be shown.
+		 * The default is the [active](#ViewColumn.Active), other values are adjusted to
+		 * be `Min(column, columnCount + 1)`, the [active](#ViewColumn.Active)-column is
+		 * not adjusted. Use [`ViewColumn.Beside`](#ViewColumn.Beside) to open the
+		 * editor to the side of the currently active one.
+		 */
+		viewColumn?: ViewColumn;
+
+		/**
+		 * An optional flag that when `true` will stop the [editor](#TextEditor) from taking focus.
+		 */
+		preserveFocus?: boolean;
+
+		/**
+		 * An optional flag that controls if an [editor](#TextEditor)-tab will be replaced
+		 * with the next editor or if it will be kept.
+		 */
+		preview?: boolean;
+
+		/**
+		 * An optional selection to apply for the document in the [editor](#TextEditor).
+		 */
+		selection?: Range;
+	}
+
+	/**
+	 * A reference to one of the workbench colors as defined in https://code.visualstudio.com/docs/getstarted/theme-color-reference.
+	 * Using a theme color is preferred over a custom color as it gives theme authors and users the possibility to change the color.
+	 */
+	export class ThemeColor {
+
+		/**
+		 * Creates a reference to a theme color.
+		 * @param id of the color. The available colors are listed in https://code.visualstudio.com/docs/getstarted/theme-color-reference.
+		 */
+		constructor(id: string);
+	}
+
+	/**
+	 * A reference to a named icon. Currently, [File](#ThemeIcon.File), [Folder](#ThemeIcon.Folder),
+	 * and [ThemeIcon ids](https://code.visualstudio.com/api/references/icons-in-labels#icon-listing) are supported.
+	 * Using a theme icon is preferred over a custom icon as it gives product theme authors the possibility to change the icons.
+	 *
+	 * *Note* that theme icons can also be rendered inside labels and descriptions. Places that support theme icons spell this out
+	 * and they use the `$(<name>)`-syntax, for instance `quickPick.label = "Hello World $(globe)"`.
+	 */
+	export class ThemeIcon {
+		/**
+		 * Reference to an icon representing a file. The icon is taken from the current file icon theme or a placeholder icon is used.
+		 */
+		static readonly File: ThemeIcon;
+
+		/**
+		 * Reference to an icon representing a folder. The icon is taken from the current file icon theme or a placeholder icon is used.
+		 */
+		static readonly Folder: ThemeIcon;
+
+		/**
+		 * The id of the icon. The available icons are listed in https://code.visualstudio.com/api/references/icons-in-labels#icon-listing.
+		 */
+		readonly id: string;
+
+		/**
+		 * The optional ThemeColor of the icon. The color is currently only used in [TreeItem](#TreeItem).
+		 */
+		readonly color?: ThemeColor;
+
+		/**
+		 * Creates a reference to a theme icon.
+		 * @param id id of the icon. The available icons are listed in https://code.visualstudio.com/api/references/icons-in-labels#icon-listing.
+		 * @param color optional `ThemeColor` for the icon. The color is currently only used in [TreeItem](#TreeItem).
+		 */
+		constructor(id: string, color?: ThemeColor);
+	}
+
+	/**
+	 * Represents theme specific rendering styles for a [text editor decoration](#TextEditorDecorationType).
+	 */
+	export interface ThemableDecorationRenderOptions {
+		/**
+		 * Background color of the decoration. Use rgba() and define transparent background colors to play well with other decorations.
+		 * Alternatively a color from the color registry can be [referenced](#ThemeColor).
+		 */
+		backgroundColor?: string | ThemeColor;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		outline?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'outline' for setting one or more of the individual outline properties.
+		 */
+		outlineColor?: string | ThemeColor;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'outline' for setting one or more of the individual outline properties.
+		 */
+		outlineStyle?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'outline' for setting one or more of the individual outline properties.
+		 */
+		outlineWidth?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		border?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'border' for setting one or more of the individual border properties.
+		 */
+		borderColor?: string | ThemeColor;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'border' for setting one or more of the individual border properties.
+		 */
+		borderRadius?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'border' for setting one or more of the individual border properties.
+		 */
+		borderSpacing?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'border' for setting one or more of the individual border properties.
+		 */
+		borderStyle?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 * Better use 'border' for setting one or more of the individual border properties.
+		 */
+		borderWidth?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		fontStyle?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		fontWeight?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		textDecoration?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		cursor?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		color?: string | ThemeColor;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		opacity?: string;
+
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		letterSpacing?: string;
+
+		/**
+		 * An **absolute path** or an URI to an image to be rendered in the gutter.
+		 */
+		gutterIconPath?: string | Uri;
+
+		/**
+		 * Specifies the size of the gutter icon.
+		 * Available values are 'auto', 'contain', 'cover' and any percentage value.
+		 * For further information: https://msdn.microsoft.com/en-us/library/jj127316(v=vs.85).aspx
+		 */
+		gutterIconSize?: string;
+
+		/**
+		 * The color of the decoration in the overview ruler. Use rgba() and define transparent colors to play well with other decorations.
+		 */
+		overviewRulerColor?: string | ThemeColor;
+
+		/**
+		 * Defines the rendering options of the attachment that is inserted before the decorated text.
+		 */
+		before?: ThemableDecorationAttachmentRenderOptions;
+
+		/**
+		 * Defines the rendering options of the attachment that is inserted after the decorated text.
+		 */
+		after?: ThemableDecorationAttachmentRenderOptions;
+	}
+
+	export interface ThemableDecorationAttachmentRenderOptions {
+		/**
+		 * Defines a text content that is shown in the attachment. Either an icon or a text can be shown, but not both.
+		 */
+		contentText?: string;
+		/**
+		 * An **absolute path** or an URI to an image to be rendered in the attachment. Either an icon
+		 * or a text can be shown, but not both.
+		 */
+		contentIconPath?: string | Uri;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		border?: string;
+		/**
+		 * CSS styling property that will be applied to text enclosed by a decoration.
+		 */
+		borderColor?: string | ThemeColor;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		fontStyle?: string;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		fontWeight?: string;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		textDecoration?: string;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		color?: string | ThemeColor;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		backgroundColor?: string | ThemeColor;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		margin?: string;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		width?: string;
+		/**
+		 * CSS styling property that will be applied to the decoration attachment.
+		 */
+		height?: string;
+	}
+
+	/**
+	 * Represents rendering styles for a [text editor decoration](#TextEditorDecorationType).
+	 */
+	export interface DecorationRenderOptions extends ThemableDecorationRenderOptions {
+		/**
+		 * Should the decoration be rendered also on the whitespace after the line text.
+		 * Defaults to `false`.
+		 */
+		isWholeLine?: boolean;
+
+		/**
+		 * Customize the growing behavior of the decoration when edits occur at the edges of the decoration's range.
+		 * Defaults to `DecorationRangeBehavior.OpenOpen`.
+		 */
+		rangeBehavior?: DecorationRangeBehavior;
+
+		/**
+		 * The position in the overview ruler where the decoration should be rendered.
+		 */
+		overviewRulerLane?: OverviewRulerLane;
+
+		/**
+		 * Overwrite options for light themes.
+		 */
+		light?: ThemableDecorationRenderOptions;
+
+		/**
+		 * Overwrite options for dark themes.
+		 */
+		dark?: ThemableDecorationRenderOptions;
+	}
+
+	/**
+	 * Represents options for a specific decoration in a [decoration set](#TextEditorDecorationType).
+	 */
+	export interface DecorationOptions {
+
+		/**
+		 * Range to which this decoration is applied. The range must not be empty.
+		 */
+		range: Range;
+
+		/**
+		 * A message that should be rendered when hovering over the decoration.
+		 */
+		hoverMessage?: MarkedString | MarkedString[];
+
+		/**
+		 * Render options applied to the current decoration. For performance reasons, keep the
+		 * number of decoration specific options small, and use decoration types wherever possible.
+		 */
+		renderOptions?: DecorationInstanceRenderOptions;
+	}
+
+	export interface ThemableDecorationInstanceRenderOptions {
+		/**
+		 * Defines the rendering options of the attachment that is inserted before the decorated text.
+		 */
+		before?: ThemableDecorationAttachmentRenderOptions;
+
+		/**
+		 * Defines the rendering options of the attachment that is inserted after the decorated text.
+		 */
+		after?: ThemableDecorationAttachmentRenderOptions;
+	}
+
+	export interface DecorationInstanceRenderOptions extends ThemableDecorationInstanceRenderOptions {
+		/**
+		 * Overwrite options for light themes.
+		 */
+		light?: ThemableDecorationInstanceRenderOptions;
+
+		/**
+		 * Overwrite options for dark themes.
+		 */
+		dark?: ThemableDecorationInstanceRenderOptions;
+	}
+
+	/**
+	 * Represents an editor that is attached to a [document](#TextDocument).
+	 */
+	export interface TextEditor {
+
+		/**
+		 * The document associated with this text editor. The document will be the same for the entire lifetime of this text editor.
+		 */
+		readonly document: TextDocument;
+
+		/**
+		 * The primary selection on this text editor. Shorthand for `TextEditor.selections[0]`.
+		 */
+		selection: Selection;
+
+		/**
+		 * The selections in this text editor. The primary selection is always at index 0.
+		 */
+		selections: Selection[];
+
+		/**
+		 * The current visible ranges in the editor (vertically).
+		 * This accounts only for vertical scrolling, and not for horizontal scrolling.
+		 */
+		readonly visibleRanges: Range[];
+
+		/**
+		 * Text editor options.
+		 */
+		options: TextEditorOptions;
+
+		/**
+		 * The column in which this editor shows. Will be `undefined` in case this
+		 * isn't one of the main editors, e.g. an embedded editor, or when the editor
+		 * column is larger than three.
+		 */
+		readonly viewColumn?: ViewColumn;
+
+		/**
+		 * Perform an edit on the document associated with this text editor.
+		 *
+		 * The given callback-function is invoked with an [edit-builder](#TextEditorEdit) which must
+		 * be used to make edits. Note that the edit-builder is only valid while the
+		 * callback executes.
+		 *
+		 * @param callback A function which can create edits using an [edit-builder](#TextEditorEdit).
+		 * @param options The undo/redo behavior around this edit. By default, undo stops will be created before and after this edit.
+		 * @return A promise that resolves with a value indicating if the edits could be applied.
+		 */
+		edit(callback: (editBuilder: TextEditorEdit) => void, options?: { undoStopBefore: boolean; undoStopAfter: boolean; }): Thenable<boolean>;
+
+		/**
+		 * Insert a [snippet](#SnippetString) and put the editor into snippet mode. "Snippet mode"
+		 * means the editor adds placeholders and additional cursors so that the user can complete
+		 * or accept the snippet.
+		 *
+		 * @param snippet The snippet to insert in this edit.
+		 * @param location Position or range at which to insert the snippet, defaults to the current editor selection or selections.
+		 * @param options The undo/redo behavior around this edit. By default, undo stops will be created before and after this edit.
+		 * @return A promise that resolves with a value indicating if the snippet could be inserted. Note that the promise does not signal
+		 * that the snippet is completely filled-in or accepted.
+		 */
+		insertSnippet(snippet: SnippetString, location?: Position | Range | ReadonlyArray<Position> | ReadonlyArray<Range>, options?: { undoStopBefore: boolean; undoStopAfter: boolean; }): Thenable<boolean>;
+
+		/**
+		 * Adds a set of decorations to the text editor. If a set of decorations already exists with
+		 * the given [decoration type](#TextEditorDecorationType), they will be replaced.
+		 *
+		 * @see [createTextEditorDecorationType](#window.createTextEditorDecorationType).
+		 *
+		 * @param decorationType A decoration type.
+		 * @param rangesOrOptions Either [ranges](#Range) or more detailed [options](#DecorationOptions).
+		 */
+		setDecorations(decorationType: TextEditorDecorationType, rangesOrOptions: Range[] | DecorationOptions[]): void;
+
+		/**
+		 * Scroll as indicated by `revealType` in order to reveal the given range.
+		 *
+		 * @param range A range.
+		 * @param revealType The scrolling strategy for revealing `range`.
+		 */
+		revealRange(range: Range, revealType?: TextEditorRevealType): void;
+
+		/**
+		 * Show the text editor.
+		 *
+		 * @deprecated Use [window.showTextDocument](#window.showTextDocument) instead.
+		 *
+		 * @param column The [column](#ViewColumn) in which to show this editor.
+		 * This method shows unexpected behavior and will be removed in the next major update.
+		 */
+		show(column?: ViewColumn): void;
+
+		/**
+		 * Hide the text editor.
+		 *
+		 * @deprecated Use the command `workbench.action.closeActiveEditor` instead.
+		 * This method shows unexpected behavior and will be removed in the next major update.
+		 */
+		hide(): void;
+	}
+
+	/**
+	 * Represents an end of line character sequence in a [document](#TextDocument).
+	 */
+	export enum EndOfLine {
+		/**
+		 * The line feed `\n` character.
+		 */
+		LF = 1,
+		/**
+		 * The carriage return line feed `\r\n` sequence.
+		 */
+		CRLF = 2
+	}
+
+	/**
+	 * A complex edit that will be applied in one transaction on a TextEditor.
+	 * This holds a description of the edits and if the edits are valid (i.e. no overlapping regions, document was not changed in the meantime, etc.)
+	 * they can be applied on a [document](#TextDocument) associated with a [text editor](#TextEditor).
+	 */
+	export interface TextEditorEdit {
+		/**
+		 * Replace a certain text region with a new value.
+		 * You can use \r\n or \n in `value` and they will be normalized to the current [document](#TextDocument).
+		 *
+		 * @param location The range this operation should remove.
+		 * @param value The new text this operation should insert after removing `location`.
+		 */
+		replace(location: Position | Range | Selection, value: string): void;
+
+		/**
+		 * Insert text at a location.
+		 * You can use \r\n or \n in `value` and they will be normalized to the current [document](#TextDocument).
+		 * Although the equivalent text edit can be made with [replace](#TextEditorEdit.replace), `insert` will produce a different resulting selection (it will get moved).
+		 *
+		 * @param location The position where the new text should be inserted.
+		 * @param value The new text this operation should insert.
+		 */
+		insert(location: Position, value: string): void;
+
+		/**
+		 * Delete a certain text region.
+		 *
+		 * @param location The range this operation should remove.
+		 */
+		delete(location: Range | Selection): void;
+
+		/**
+		 * Set the end of line sequence.
+		 *
+		 * @param endOfLine The new end of line for the [document](#TextDocument).
+		 */
+		setEndOfLine(endOfLine: EndOfLine): void;
+	}
+
+	/**
+	 * A universal resource identifier representing either a file on disk
+	 * or another resource, like untitled resources.
+	 */
+	export class Uri {
+
+		/**
+		 * Create an URI from a string, e.g. `http://www.msft.com/some/path`,
+		 * `file:///usr/home`, or `scheme:with/path`.
+		 *
+		 * *Note* that for a while uris without a `scheme` were accepted. That is not correct
+		 * as all uris should have a scheme. To avoid breakage of existing code the optional
+		 * `strict`-argument has been added. We *strongly* advise to use it, e.g. `Uri.parse('my:uri', true)`
+		 *
+		 * @see [Uri.toString](#Uri.toString)
+		 * @param value The string value of an Uri.
+		 * @param strict Throw an error when `value` is empty or when no `scheme` can be parsed.
+		 * @return A new Uri instance.
+		 */
+		static parse(value: string, strict?: boolean): Uri;
+
+		/**
+		 * Create an URI from a file system path. The [scheme](#Uri.scheme)
+		 * will be `file`.
+		 *
+		 * The *difference* between `Uri#parse` and `Uri#file` is that the latter treats the argument
+		 * as path, not as stringified-uri. E.g. `Uri.file(path)` is *not* the same as
+		 * `Uri.parse('file://' + path)` because the path might contain characters that are
+		 * interpreted (# and ?). See the following sample:
+		 * ```ts
+		const good = URI.file('/coding/c#/project1');
+		good.scheme === 'file';
+		good.path === '/coding/c#/project1';
+		good.fragment === '';
+
+		const bad = URI.parse('file://' + '/coding/c#/project1');
+		bad.scheme === 'file';
+		bad.path === '/coding/c'; // path is now broken
+		bad.fragment === '/project1';
+		```
+		 *
+		 * @param path A file system or UNC path.
+		 * @return A new Uri instance.
+		 */
+		static file(path: string): Uri;
+
+		/**
+		 * Create a new uri which path is the result of joining
+		 * the path of the base uri with the provided path segments.
+		 *
+		 * - Note 1: `joinPath` only affects the path component
+		 * and all other components (scheme, authority, query, and fragment) are
+		 * left as they are.
+		 * - Note 2: The base uri must have a path; an error is thrown otherwise.
+		 *
+		 * The path segments are normalized in the following ways:
+		 * - sequences of path separators (`/` or `\`) are replaced with a single separator
+		 * - for `file`-uris on windows, the backslash-character (`\`) is considered a path-separator
+		 * - the `..`-segment denotes the parent segment, the `.` denotes the current segment
+		 * - paths have a root which always remains, for instance on windows drive-letters are roots
+		 * so that is true: `joinPath(Uri.file('file:///c:/root'), '../../other').fsPath === 'c:/other'`
+		 *
+		 * @param base An uri. Must have a path.
+		 * @param pathSegments One more more path fragments
+		 * @returns A new uri which path is joined with the given fragments
+		 */
+		static joinPath(base: Uri, ...pathSegments: string[]): Uri;
+
+		/**
+		 * Use the `file` and `parse` factory functions to create new `Uri` objects.
+		 */
+		private constructor(scheme: string, authority: string, path: string, query: string, fragment: string);
+
+		/**
+		 * Scheme is the `http` part of `http://www.msft.com/some/path?query#fragment`.
+		 * The part before the first colon.
+		 */
+		readonly scheme: string;
+
+		/**
+		 * Authority is the `www.msft.com` part of `http://www.msft.com/some/path?query#fragment`.
+		 * The part between the first double slashes and the next slash.
+		 */
+		readonly authority: string;
+
+		/**
+		 * Path is the `/some/path` part of `http://www.msft.com/some/path?query#fragment`.
+		 */
+		readonly path: string;
+
+		/**
+		 * Query is the `query` part of `http://www.msft.com/some/path?query#fragment`.
+		 */
+		readonly query: string;
+
+		/**
+		 * Fragment is the `fragment` part of `http://www.msft.com/some/path?query#fragment`.
+		 */
+		readonly fragment: string;
+
+		/**
+		 * The string representing the corresponding file system path of this Uri.
+		 *
+		 * Will handle UNC paths and normalize windows drive letters to lower-case. Also
+		 * uses the platform specific path separator.
+		 *
+		 * * Will *not* validate the path for invalid characters and semantics.
+		 * * Will *not* look at the scheme of this Uri.
+		 * * The resulting string shall *not* be used for display purposes but
+		 * for disk operations, like `readFile` et al.
+		 *
+		 * The *difference* to the [`path`](#Uri.path)-property is the use of the platform specific
+		 * path separator and the handling of UNC paths. The sample below outlines the difference:
+		 * ```ts
+		const u = URI.parse('file://server/c$/folder/file.txt')
+		u.authority === 'server'
+		u.path === '/shares/c$/file.txt'
+		u.fsPath === '\\server\c$\folder\file.txt'
+		```
+		 */
+		readonly fsPath: string;
+
+		/**
+		 * Derive a new Uri from this Uri.
+		 *
+		 * ```ts
+		 * let file = Uri.parse('before:some/file/path');
+		 * let other = file.with({ scheme: 'after' });
+		 * assert.ok(other.toString() === 'after:some/file/path');
+		 * ```
+		 *
+		 * @param change An object that describes a change to this Uri. To unset components use `null` or
+		 *  the empty string.
+		 * @return A new Uri that reflects the given change. Will return `this` Uri if the change
+		 *  is not changing anything.
+		 */
+		with(change: { scheme?: string; authority?: string; path?: string; query?: string; fragment?: string }): Uri;
+
+		/**
+		 * Returns a string representation of this Uri. The representation and normalization
+		 * of a URI depends on the scheme.
+		 *
+		 * * The resulting string can be safely used with [Uri.parse](#Uri.parse).
+		 * * The resulting string shall *not* be used for display purposes.
+		 *
+		 * *Note* that the implementation will encode _aggressive_ which often leads to unexpected,
+		 * but not incorrect, results. For instance, colons are encoded to `%3A` which might be unexpected
+		 * in file-uri. Also `&` and `=` will be encoded which might be unexpected for http-uris. For stability
+		 * reasons this cannot be changed anymore. If you suffer from too aggressive encoding you should use
+		 * the `skipEncoding`-argument: `uri.toString(true)`.
+		 *
+		 * @param skipEncoding Do not percentage-encode the result, defaults to `false`. Note that
+		 *	the `#` and `?` characters occurring in the path will always be encoded.
+		 * @returns A string representation of this Uri.
+		 */
+		toString(skipEncoding?: boolean): string;
+
+		/**
+		 * Returns a JSON representation of this Uri.
+		 *
+		 * @return An object.
+		 */
+		toJSON(): any;
+	}
+
+	/**
+	 * A cancellation token is passed to an asynchronous or long running
+	 * operation to request cancellation, like cancelling a request
+	 * for completion items because the user continued to type.
+	 *
+	 * To get an instance of a `CancellationToken` use a
+	 * [CancellationTokenSource](#CancellationTokenSource).
+	 */
+	export interface CancellationToken {
+
+		/**
+		 * Is `true` when the token has been cancelled, `false` otherwise.
+		 */
+		isCancellationRequested: boolean;
+
+		/**
+		 * An [event](#Event) which fires upon cancellation.
+		 */
+		onCancellationRequested: Event<any>;
+	}
+
+	/**
+	 * A cancellation source creates and controls a [cancellation token](#CancellationToken).
+	 */
+	export class CancellationTokenSource {
+
+		/**
+		 * The cancellation token of this source.
+		 */
+		token: CancellationToken;
+
+		/**
+		 * Signal cancellation on the token.
+		 */
+		cancel(): void;
+
+		/**
+		 * Dispose object and free resources.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * An error type that should be used to signal cancellation of an operation.
+	 *
+	 * This type can be used in response to a [cancellation token](#CancellationToken)
+	 * being cancelled or when an operation is being cancelled by the
+	 * executor of that operation.
+	 */
+	export class CancellationError extends Error {
+
+		/**
+		 * Creates a new cancellation error.
+		 */
+		constructor();
+	}
+
+	/**
+	 * Represents a type which can release resources, such
+	 * as event listening or a timer.
+	 */
+	export class Disposable {
+
+		/**
+		 * Combine many disposable-likes into one. Use this method
+		 * when having objects with a dispose function which are not
+		 * instances of Disposable.
+		 *
+		 * @param disposableLikes Objects that have at least a `dispose`-function member.
+		 * @return Returns a new disposable which, upon dispose, will
+		 * dispose all provided disposables.
+		 */
+		static from(...disposableLikes: { dispose: () => any }[]): Disposable;
+
+		/**
+		 * Creates a new Disposable calling the provided function
+		 * on dispose.
+		 * @param callOnDispose Function that disposes something.
+		 */
+		constructor(callOnDispose: Function);
+
+		/**
+		 * Dispose this object.
+		 */
+		dispose(): any;
+	}
+
+	/**
+	 * Represents a typed event.
+	 *
+	 * A function that represents an event to which you subscribe by calling it with
+	 * a listener function as argument.
+	 *
+	 * @example
+	 * item.onDidChange(function(event) { console.log("Event happened: " + event); });
+	 */
+	export interface Event<T> {
+
+		/**
+		 * A function that represents an event to which you subscribe by calling it with
+		 * a listener function as argument.
+		 *
+		 * @param listener The listener function will be called when the event happens.
+		 * @param thisArgs The `this`-argument which will be used when calling the event listener.
+		 * @param disposables An array to which a [disposable](#Disposable) will be added.
+		 * @return A disposable which unsubscribes the event listener.
+		 */
+		(listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]): Disposable;
+	}
+
+	/**
+	 * An event emitter can be used to create and manage an [event](#Event) for others
+	 * to subscribe to. One emitter always owns one event.
+	 *
+	 * Use this class if you want to provide event from within your extension, for instance
+	 * inside a [TextDocumentContentProvider](#TextDocumentContentProvider) or when providing
+	 * API to other extensions.
+	 */
+	export class EventEmitter<T> {
+
+		/**
+		 * The event listeners can subscribe to.
+		 */
+		event: Event<T>;
+
+		/**
+		 * Notify all subscribers of the [event](#EventEmitter.event). Failure
+		 * of one or more listener will not fail this function call.
+		 *
+		 * @param data The event object.
+		 */
+		fire(data: T): void;
+
+		/**
+		 * Dispose this object and free resources.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * A file system watcher notifies about changes to files and folders
+	 * on disk or from other [FileSystemProviders](#FileSystemProvider).
+	 *
+	 * To get an instance of a `FileSystemWatcher` use
+	 * [createFileSystemWatcher](#workspace.createFileSystemWatcher).
+	 */
+	export interface FileSystemWatcher extends Disposable {
+
+		/**
+		 * true if this file system watcher has been created such that
+		 * it ignores creation file system events.
+		 */
+		ignoreCreateEvents: boolean;
+
+		/**
+		 * true if this file system watcher has been created such that
+		 * it ignores change file system events.
+		 */
+		ignoreChangeEvents: boolean;
+
+		/**
+		 * true if this file system watcher has been created such that
+		 * it ignores delete file system events.
+		 */
+		ignoreDeleteEvents: boolean;
+
+		/**
+		 * An event which fires on file/folder creation.
+		 */
+		onDidCreate: Event<Uri>;
+
+		/**
+		 * An event which fires on file/folder change.
+		 */
+		onDidChange: Event<Uri>;
+
+		/**
+		 * An event which fires on file/folder deletion.
+		 */
+		onDidDelete: Event<Uri>;
+	}
+
+	/**
+	 * A text document content provider allows to add readonly documents
+	 * to the editor, such as source from a dll or generated html from md.
+	 *
+	 * Content providers are [registered](#workspace.registerTextDocumentContentProvider)
+	 * for a [uri-scheme](#Uri.scheme). When a uri with that scheme is to
+	 * be [loaded](#workspace.openTextDocument) the content provider is
+	 * asked.
+	 */
+	export interface TextDocumentContentProvider {
+
+		/**
+		 * An event to signal a resource has changed.
+		 */
+		onDidChange?: Event<Uri>;
+
+		/**
+		 * Provide textual content for a given uri.
+		 *
+		 * The editor will use the returned string-content to create a readonly
+		 * [document](#TextDocument). Resources allocated should be released when
+		 * the corresponding document has been [closed](#workspace.onDidCloseTextDocument).
+		 *
+		 * **Note**: The contents of the created [document](#TextDocument) might not be
+		 * identical to the provided text due to end-of-line-sequence normalization.
+		 *
+		 * @param uri An uri which scheme matches the scheme this provider was [registered](#workspace.registerTextDocumentContentProvider) for.
+		 * @param token A cancellation token.
+		 * @return A string or a thenable that resolves to such.
+		 */
+		provideTextDocumentContent(uri: Uri, token: CancellationToken): ProviderResult<string>;
+	}
+
+	/**
+	 * Represents an item that can be selected from
+	 * a list of items.
+	 */
+	export interface QuickPickItem {
+
+		/**
+		 * A human-readable string which is rendered prominent. Supports rendering of [theme icons](#ThemeIcon) via
+		 * the `$(<name>)`-syntax.
+		 */
+		label: string;
+
+		/**
+		 * A human-readable string which is rendered less prominent in the same line. Supports rendering of
+		 * [theme icons](#ThemeIcon) via the `$(<name>)`-syntax.
+		 */
+		description?: string;
+
+		/**
+		 * A human-readable string which is rendered less prominent in a separate line. Supports rendering of
+		 * [theme icons](#ThemeIcon) via the `$(<name>)`-syntax.
+		 */
+		detail?: string;
+
+		/**
+		 * Optional flag indicating if this item is picked initially.
+		 * (Only honored when the picker allows multiple selections.)
+		 *
+		 * @see [QuickPickOptions.canPickMany](#QuickPickOptions.canPickMany)
+		 */
+		picked?: boolean;
+
+		/**
+		 * Always show this item.
+		 */
+		alwaysShow?: boolean;
+	}
+
+	/**
+	 * Options to configure the behavior of the quick pick UI.
+	 */
+	export interface QuickPickOptions {
+		/**
+		 * An optional flag to include the description when filtering the picks.
+		 */
+		matchOnDescription?: boolean;
+
+		/**
+		 * An optional flag to include the detail when filtering the picks.
+		 */
+		matchOnDetail?: boolean;
+
+		/**
+		 * An optional string to show as placeholder in the input box to guide the user what to pick on.
+		 */
+		placeHolder?: string;
+
+		/**
+		 * Set to `true` to keep the picker open when focus moves to another part of the editor or to another window.
+		 */
+		ignoreFocusOut?: boolean;
+
+		/**
+		 * An optional flag to make the picker accept multiple selections, if true the result is an array of picks.
+		 */
+		canPickMany?: boolean;
+
+		/**
+		 * An optional function that is invoked whenever an item is selected.
+		 */
+		onDidSelectItem?(item: QuickPickItem | string): any;
+	}
+
+	/**
+	 * Options to configure the behaviour of the [workspace folder](#WorkspaceFolder) pick UI.
+	 */
+	export interface WorkspaceFolderPickOptions {
+
+		/**
+		 * An optional string to show as placeholder in the input box to guide the user what to pick on.
+		 */
+		placeHolder?: string;
+
+		/**
+		 * Set to `true` to keep the picker open when focus moves to another part of the editor or to another window.
+		 */
+		ignoreFocusOut?: boolean;
+	}
+
+	/**
+	 * Options to configure the behaviour of a file open dialog.
+	 *
+	 * * Note 1: On Windows and Linux, a file dialog cannot be both a file selector and a folder selector, so if you
+	 * set both `canSelectFiles` and `canSelectFolders` to `true` on these platforms, a folder selector will be shown.
+	 * * Note 2: Explicitly setting `canSelectFiles` and `canSelectFolders` to `false` is futile
+	 * and the editor then silently adjusts the options to select files.
+	 */
+	export interface OpenDialogOptions {
+		/**
+		 * The resource the dialog shows when opened.
+		 */
+		defaultUri?: Uri;
+
+		/**
+		 * A human-readable string for the open button.
+		 */
+		openLabel?: string;
+
+		/**
+		 * Allow to select files, defaults to `true`.
+		 */
+		canSelectFiles?: boolean;
+
+		/**
+		 * Allow to select folders, defaults to `false`.
+		 */
+		canSelectFolders?: boolean;
+
+		/**
+		 * Allow to select many files or folders.
+		 */
+		canSelectMany?: boolean;
+
+		/**
+		 * A set of file filters that are used by the dialog. Each entry is a human-readable label,
+		 * like "TypeScript", and an array of extensions, e.g.
+		 * ```ts
+		 * {
+		 * 	'Images': ['png', 'jpg']
+		 * 	'TypeScript': ['ts', 'tsx']
+		 * }
+		 * ```
+		 */
+		filters?: { [name: string]: string[] };
+
+		/**
+		 * Dialog title.
+		 *
+		 * This parameter might be ignored, as not all operating systems display a title on open dialogs
+		 * (for example, macOS).
+		 */
+		title?: string;
+	}
+
+	/**
+	 * Options to configure the behaviour of a file save dialog.
+	 */
+	export interface SaveDialogOptions {
+		/**
+		 * The resource the dialog shows when opened.
+		 */
+		defaultUri?: Uri;
+
+		/**
+		 * A human-readable string for the save button.
+		 */
+		saveLabel?: string;
+
+		/**
+		 * A set of file filters that are used by the dialog. Each entry is a human-readable label,
+		 * like "TypeScript", and an array of extensions, e.g.
+		 * ```ts
+		 * {
+		 * 	'Images': ['png', 'jpg']
+		 * 	'TypeScript': ['ts', 'tsx']
+		 * }
+		 * ```
+		 */
+		filters?: { [name: string]: string[] };
+
+		/**
+		 * Dialog title.
+		 *
+		 * This parameter might be ignored, as not all operating systems display a title on save dialogs
+		 * (for example, macOS).
+		 */
+		title?: string;
+	}
+
+	/**
+	 * Represents an action that is shown with an information, warning, or
+	 * error message.
+	 *
+	 * @see [showInformationMessage](#window.showInformationMessage)
+	 * @see [showWarningMessage](#window.showWarningMessage)
+	 * @see [showErrorMessage](#window.showErrorMessage)
+	 */
+	export interface MessageItem {
+
+		/**
+		 * A short title like 'Retry', 'Open Log' etc.
+		 */
+		title: string;
+
+		/**
+		 * A hint for modal dialogs that the item should be triggered
+		 * when the user cancels the dialog (e.g. by pressing the ESC
+		 * key).
+		 *
+		 * Note: this option is ignored for non-modal messages.
+		 */
+		isCloseAffordance?: boolean;
+	}
+
+	/**
+	 * Options to configure the behavior of the message.
+	 *
+	 * @see [showInformationMessage](#window.showInformationMessage)
+	 * @see [showWarningMessage](#window.showWarningMessage)
+	 * @see [showErrorMessage](#window.showErrorMessage)
+	 */
+	export interface MessageOptions {
+
+		/**
+		 * Indicates that this message should be modal.
+		 */
+		modal?: boolean;
+	}
+
+	/**
+	 * Options to configure the behavior of the input box UI.
+	 */
+	export interface InputBoxOptions {
+
+		/**
+		 * The value to prefill in the input box.
+		 */
+		value?: string;
+
+		/**
+		 * Selection of the prefilled [`value`](#InputBoxOptions.value). Defined as tuple of two number where the
+		 * first is the inclusive start index and the second the exclusive end index. When `undefined` the whole
+		 * word will be selected, when empty (start equals end) only the cursor will be set,
+		 * otherwise the defined range will be selected.
+		 */
+		valueSelection?: [number, number];
+
+		/**
+		 * The text to display underneath the input box.
+		 */
+		prompt?: string;
+
+		/**
+		 * An optional string to show as placeholder in the input box to guide the user what to type.
+		 */
+		placeHolder?: string;
+
+		/**
+		 * Controls if a password input is shown. Password input hides the typed text.
+		 */
+		password?: boolean;
+
+		/**
+		 * Set to `true` to keep the input box open when focus moves to another part of the editor or to another window.
+		 */
+		ignoreFocusOut?: boolean;
+
+		/**
+		 * An optional function that will be called to validate input and to give a hint
+		 * to the user.
+		 *
+		 * @param value The current value of the input box.
+		 * @return A human-readable string which is presented as diagnostic message.
+		 * Return `undefined`, `null`, or the empty string when 'value' is valid.
+		 */
+		validateInput?(value: string): string | undefined | null | Thenable<string | undefined | null>;
+	}
+
+	/**
+	 * A relative pattern is a helper to construct glob patterns that are matched
+	 * relatively to a base file path. The base path can either be an absolute file
+	 * path as string or uri or a [workspace folder](#WorkspaceFolder), which is the
+	 * preferred way of creating the relative pattern.
+	 */
+	export class RelativePattern {
+
+		/**
+		 * A base file path to which this pattern will be matched against relatively.
+		 */
+		base: string;
+
+		/**
+		 * A file glob pattern like `*.{ts,js}` that will be matched on file paths
+		 * relative to the base path.
+		 *
+		 * Example: Given a base of `/home/work/folder` and a file path of `/home/work/folder/index.js`,
+		 * the file glob pattern will match on `index.js`.
+		 */
+		pattern: string;
+
+		/**
+		 * Creates a new relative pattern object with a base file path and pattern to match. This pattern
+		 * will be matched on file paths relative to the base.
+		 *
+		 * Example:
+		 * ```ts
+		 * const folder = vscode.workspace.workspaceFolders?.[0];
+		 * if (folder) {
+		 *
+		 *   // Match any TypeScript file in the root of this workspace folder
+		 *   const pattern1 = new vscode.RelativePattern(folder, '*.ts');
+		 *
+		 *   // Match any TypeScript file in `someFolder` inside this workspace folder
+		 *   const pattern2 = new vscode.RelativePattern(folder, 'someFolder/*.ts');
+		 * }
+		 * ```
+		 *
+		 * @param base A base to which this pattern will be matched against relatively. It is recommended
+		 * to pass in a [workspace folder](#WorkspaceFolder) if the pattern should match inside the workspace.
+		 * Otherwise, a uri or string should only be used if the pattern is for a file path outside the workspace.
+		 * @param pattern A file glob pattern like `*.{ts,js}` that will be matched on paths relative to the base.
+		 */
+		constructor(base: WorkspaceFolder | Uri | string, pattern: string)
+	}
+
+	/**
+	 * A file glob pattern to match file paths against. This can either be a glob pattern string
+	 * (like `**​/*.{ts,js}` or `*.{ts,js}`) or a [relative pattern](#RelativePattern).
+	 *
+	 * Glob patterns can have the following syntax:
+	 * * `*` to match one or more characters in a path segment
+	 * * `?` to match on one character in a path segment
+	 * * `**` to match any number of path segments, including none
+	 * * `{}` to group conditions (e.g. `**​/*.{ts,js}` matches all TypeScript and JavaScript files)
+	 * * `[]` to declare a range of characters to match in a path segment (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …)
+	 * * `[!...]` to negate a range of characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not `example.0`)
+	 *
+	 * Note: a backslash (`\`) is not valid within a glob pattern. If you have an existing file
+	 * path to match against, consider to use the [relative pattern](#RelativePattern) support
+	 * that takes care of converting any backslash into slash. Otherwise, make sure to convert
+	 * any backslash to slash when creating the glob pattern.
+	 */
+	export type GlobPattern = string | RelativePattern;
+
+	/**
+	 * A document filter denotes a document by different properties like
+	 * the [language](#TextDocument.languageId), the [scheme](#Uri.scheme) of
+	 * its resource, or a glob-pattern that is applied to the [path](#TextDocument.fileName).
+	 *
+	 * @example <caption>A language filter that applies to typescript files on disk</caption>
+	 * { language: 'typescript', scheme: 'file' }
+	 *
+	 * @example <caption>A language filter that applies to all package.json paths</caption>
+	 * { language: 'json', scheme: 'untitled', pattern: '**​/package.json' }
+	 */
+	export interface DocumentFilter {
+
+		/**
+		 * A language id, like `typescript`.
+		 */
+		readonly language?: string;
+
+		/**
+		 * A Uri [scheme](#Uri.scheme), like `file` or `untitled`.
+		 */
+		readonly scheme?: string;
+
+		/**
+		 * A [glob pattern](#GlobPattern) that is matched on the absolute path of the document. Use a [relative pattern](#RelativePattern)
+		 * to filter documents to a [workspace folder](#WorkspaceFolder).
+		 */
+		readonly pattern?: GlobPattern;
+	}
+
+	/**
+	 * A language selector is the combination of one or many language identifiers
+	 * and [language filters](#DocumentFilter).
+	 *
+	 * *Note* that a document selector that is just a language identifier selects *all*
+	 * documents, even those that are not saved on disk. Only use such selectors when
+	 * a feature works without further context, e.g. without the need to resolve related
+	 * 'files'.
+	 *
+	 * @example
+	 * let sel:DocumentSelector = { scheme: 'file', language: 'typescript' };
+	 */
+	export type DocumentSelector = DocumentFilter | string | ReadonlyArray<DocumentFilter | string>;
+
+	/**
+	 * A provider result represents the values a provider, like the [`HoverProvider`](#HoverProvider),
+	 * may return. For once this is the actual result type `T`, like `Hover`, or a thenable that resolves
+	 * to that type `T`. In addition, `null` and `undefined` can be returned - either directly or from a
+	 * thenable.
+	 *
+	 * The snippets below are all valid implementations of the [`HoverProvider`](#HoverProvider):
+	 *
+	 * ```ts
+	 * let a: HoverProvider = {
+	 * 	provideHover(doc, pos, token): ProviderResult<Hover> {
+	 * 		return new Hover('Hello World');
+	 * 	}
+	 * }
+	 *
+	 * let b: HoverProvider = {
+	 * 	provideHover(doc, pos, token): ProviderResult<Hover> {
+	 * 		return new Promise(resolve => {
+	 * 			resolve(new Hover('Hello World'));
+	 * 	 	});
+	 * 	}
+	 * }
+	 *
+	 * let c: HoverProvider = {
+	 * 	provideHover(doc, pos, token): ProviderResult<Hover> {
+	 * 		return; // undefined
+	 * 	}
+	 * }
+	 * ```
+	 */
+	export type ProviderResult<T> = T | undefined | null | Thenable<T | undefined | null>;
+
+	/**
+	 * Kind of a code action.
+	 *
+	 * Kinds are a hierarchical list of identifiers separated by `.`, e.g. `"refactor.extract.function"`.
+	 *
+	 * Code action kinds are used by VS Code for UI elements such as the refactoring context menu. Users
+	 * can also trigger code actions with a specific kind with the `editor.action.codeAction` command.
+	 */
+	export class CodeActionKind {
+		/**
+		 * Empty kind.
+		 */
+		static readonly Empty: CodeActionKind;
+
+		/**
+		 * Base kind for quickfix actions: `quickfix`.
+		 *
+		 * Quick fix actions address a problem in the code and are shown in the normal code action context menu.
+		 */
+		static readonly QuickFix: CodeActionKind;
+
+		/**
+		 * Base kind for refactoring actions: `refactor`
+		 *
+		 * Refactoring actions are shown in the refactoring context menu.
+		 */
+		static readonly Refactor: CodeActionKind;
+
+		/**
+		 * Base kind for refactoring extraction actions: `refactor.extract`
+		 *
+		 * Example extract actions:
+		 *
+		 * - Extract method
+		 * - Extract function
+		 * - Extract variable
+		 * - Extract interface from class
+		 * - ...
+		 */
+		static readonly RefactorExtract: CodeActionKind;
+
+		/**
+		 * Base kind for refactoring inline actions: `refactor.inline`
+		 *
+		 * Example inline actions:
+		 *
+		 * - Inline function
+		 * - Inline variable
+		 * - Inline constant
+		 * - ...
+		 */
+		static readonly RefactorInline: CodeActionKind;
+
+		/**
+		 * Base kind for refactoring rewrite actions: `refactor.rewrite`
+		 *
+		 * Example rewrite actions:
+		 *
+		 * - Convert JavaScript function to class
+		 * - Add or remove parameter
+		 * - Encapsulate field
+		 * - Make method static
+		 * - Move method to base class
+		 * - ...
+		 */
+		static readonly RefactorRewrite: CodeActionKind;
+
+		/**
+		 * Base kind for source actions: `source`
+		 *
+		 * Source code actions apply to the entire file. They must be explicitly requested and will not show in the
+		 * normal [lightbulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) menu. Source actions
+		 * can be run on save using `editor.codeActionsOnSave` and are also shown in the `source` context menu.
+		 */
+		static readonly Source: CodeActionKind;
+
+		/**
+		 * Base kind for an organize imports source action: `source.organizeImports`.
+		 */
+		static readonly SourceOrganizeImports: CodeActionKind;
+
+		/**
+		 * Base kind for auto-fix source actions: `source.fixAll`.
+		 *
+		 * Fix all actions automatically fix errors that have a clear fix that do not require user input.
+		 * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
+		 */
+		static readonly SourceFixAll: CodeActionKind;
+
+		private constructor(value: string);
+
+		/**
+		 * String value of the kind, e.g. `"refactor.extract.function"`.
+		 */
+		readonly value: string;
+
+		/**
+		 * Create a new kind by appending a more specific selector to the current kind.
+		 *
+		 * Does not modify the current kind.
+		 */
+		append(parts: string): CodeActionKind;
+
+		/**
+		 * Checks if this code action kind intersects `other`.
+		 *
+		 * The kind `"refactor.extract"` for example intersects `refactor`, `"refactor.extract"` and ``"refactor.extract.function"`,
+		 * but not `"unicorn.refactor.extract"`, or `"refactor.extractAll"`.
+		 *
+		 * @param other Kind to check.
+		 */
+		intersects(other: CodeActionKind): boolean;
+
+		/**
+		 * Checks if `other` is a sub-kind of this `CodeActionKind`.
+		 *
+		 * The kind `"refactor.extract"` for example contains `"refactor.extract"` and ``"refactor.extract.function"`,
+		 * but not `"unicorn.refactor.extract"`, or `"refactor.extractAll"` or `refactor`.
+		 *
+		 * @param other Kind to check.
+		 */
+		contains(other: CodeActionKind): boolean;
+	}
+
+	/**
+	 * Contains additional diagnostic information about the context in which
+	 * a [code action](#CodeActionProvider.provideCodeActions) is run.
+	 */
+	export interface CodeActionContext {
+		/**
+		 * An array of diagnostics.
+		 */
+		readonly diagnostics: ReadonlyArray<Diagnostic>;
+
+		/**
+		 * Requested kind of actions to return.
+		 *
+		 * Actions not of this kind are filtered out before being shown by the [lightbulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action).
+		 */
+		readonly only?: CodeActionKind;
+	}
+
+	/**
+	 * A code action represents a change that can be performed in code, e.g. to fix a problem or
+	 * to refactor code.
+	 *
+	 * A CodeAction must set either [`edit`](#CodeAction.edit) and/or a [`command`](#CodeAction.command). If both are supplied, the `edit` is applied first, then the command is executed.
+	 */
+	export class CodeAction {
+
+		/**
+		 * A short, human-readable, title for this code action.
+		 */
+		title: string;
+
+		/**
+		 * A [workspace edit](#WorkspaceEdit) this code action performs.
+		 */
+		edit?: WorkspaceEdit;
+
+		/**
+		 * [Diagnostics](#Diagnostic) that this code action resolves.
+		 */
+		diagnostics?: Diagnostic[];
+
+		/**
+		 * A [command](#Command) this code action executes.
+		 *
+		 * If this command throws an exception, VS Code displays the exception message to users in the editor at the
+		 * current cursor position.
+		 */
+		command?: Command;
+
+		/**
+		 * [Kind](#CodeActionKind) of the code action.
+		 *
+		 * Used to filter code actions.
+		 */
+		kind?: CodeActionKind;
+
+		/**
+		 * Marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted
+		 * by keybindings.
+		 *
+		 * A quick fix should be marked preferred if it properly addresses the underlying error.
+		 * A refactoring should be marked preferred if it is the most reasonable choice of actions to take.
+		 */
+		isPreferred?: boolean;
+
+		/**
+		 * Marks that the code action cannot currently be applied.
+		 *
+		 * - Disabled code actions are not shown in automatic [lightbulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action)
+		 * code action menu.
+		 *
+		 * - Disabled actions are shown as faded out in the code action menu when the user request a more specific type
+		 * of code action, such as refactorings.
+		 *
+		 * - If the user has a [keybinding](https://code.visualstudio.com/docs/editor/refactoring#_keybindings-for-code-actions)
+		 * that auto applies a code action and only a disabled code actions are returned, VS Code will show the user an
+		 * error message with `reason` in the editor.
+		 */
+		disabled?: {
+			/**
+			 * Human readable description of why the code action is currently disabled.
+			 *
+			 * This is displayed in the code actions UI.
+			 */
+			readonly reason: string;
+		};
+
+		/**
+		 * Creates a new code action.
+		 *
+		 * A code action must have at least a [title](#CodeAction.title) and [edits](#CodeAction.edit)
+		 * and/or a [command](#CodeAction.command).
+		 *
+		 * @param title The title of the code action.
+		 * @param kind The kind of the code action.
+		 */
+		constructor(title: string, kind?: CodeActionKind);
+	}
+
+	/**
+	 * The code action interface defines the contract between extensions and
+	 * the [lightbulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) feature.
+	 *
+	 * A code action can be any command that is [known](#commands.getCommands) to the system.
+	 */
+	export interface CodeActionProvider<T extends CodeAction = CodeAction> {
+		/**
+		 * Provide commands for the given document and range.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param range The selector or range for which the command was invoked. This will always be a selection if
+		 * there is a currently active editor.
+		 * @param context Context carrying additional information.
+		 * @param token A cancellation token.
+		 *
+		 * @return An array of code actions, such as quick fixes or refactorings. The lack of a result can be signaled
+		 * by returning `undefined`, `null`, or an empty array.
+		 *
+		 * We also support returning `Command` for legacy reasons, however all new extensions should return
+		 * `CodeAction` object instead.
+		 */
+		provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(Command | T)[]>;
+
+		/**
+		 * Given a code action fill in its [`edit`](#CodeAction.edit)-property. Changes to
+		 * all other properties, like title, are ignored. A code action that has an edit
+		 * will not be resolved.
+		 *
+		 * *Note* that a code action provider that returns commands, not code actions, cannot successfully
+		 * implement this function. Returning commands is deprecated and instead code actions should be
+		 * returned.
+		 *
+		 * @param codeAction A code action.
+		 * @param token A cancellation token.
+		 * @return The resolved code action or a thenable that resolves to such. It is OK to return the given
+		 * `item`. When no result is returned, the given `item` will be used.
+		 */
+		resolveCodeAction?(codeAction: T, token: CancellationToken): ProviderResult<T>;
+	}
+
+	/**
+	 * Metadata about the type of code actions that a [CodeActionProvider](#CodeActionProvider) provides.
+	 */
+	export interface CodeActionProviderMetadata {
+		/**
+		 * List of [CodeActionKinds](#CodeActionKind) that a [CodeActionProvider](#CodeActionProvider) may return.
+		 *
+		 * This list is used to determine if a given `CodeActionProvider` should be invoked or not.
+		 * To avoid unnecessary computation, every `CodeActionProvider` should list use `providedCodeActionKinds`. The
+		 * list of kinds may either be generic, such as `[CodeActionKind.Refactor]`, or list out every kind provided,
+		 * such as `[CodeActionKind.Refactor.Extract.append('function'), CodeActionKind.Refactor.Extract.append('constant'), ...]`.
+		 */
+		readonly providedCodeActionKinds?: ReadonlyArray<CodeActionKind>;
+
+		/**
+		 * Static documentation for a class of code actions.
+		 *
+		 * Documentation from the provider is shown in the code actions menu if either:
+		 *
+		 * - Code actions of `kind` are requested by VS Code. In this case, VS Code will show the documentation that
+		 *   most closely matches the requested code action kind. For example, if a provider has documentation for
+		 *   both `Refactor` and `RefactorExtract`, when the user requests code actions for `RefactorExtract`,
+		 *   VS Code will use the documentation for `RefactorExtract` instead of the documentation for `Refactor`.
+		 *
+		 * - Any code actions of `kind` are returned by the provider.
+		 *
+		 * At most one documentation entry will be shown per provider.
+		 */
+		readonly documentation?: ReadonlyArray<{
+			/**
+			 * The kind of the code action being documented.
+			 *
+			 * If the kind is generic, such as `CodeActionKind.Refactor`, the documentation will be shown whenever any
+			 * refactorings are returned. If the kind if more specific, such as `CodeActionKind.RefactorExtract`, the
+			 * documentation will only be shown when extract refactoring code actions are returned.
+			 */
+			readonly kind: CodeActionKind;
+
+			/**
+			 * Command that displays the documentation to the user.
+			 *
+			 * This can display the documentation directly in VS Code or open a website using [`env.openExternal`](#env.openExternal);
+			 *
+			 * The title of this documentation code action is taken from [`Command.title`](#Command.title)
+			 */
+			readonly command: Command;
+		}>;
+	}
+
+	/**
+	 * A code lens represents a [command](#Command) that should be shown along with
+	 * source text, like the number of references, a way to run tests, etc.
+	 *
+	 * A code lens is _unresolved_ when no command is associated to it. For performance
+	 * reasons the creation of a code lens and resolving should be done to two stages.
+	 *
+	 * @see [CodeLensProvider.provideCodeLenses](#CodeLensProvider.provideCodeLenses)
+	 * @see [CodeLensProvider.resolveCodeLens](#CodeLensProvider.resolveCodeLens)
+	 */
+	export class CodeLens {
+
+		/**
+		 * The range in which this code lens is valid. Should only span a single line.
+		 */
+		range: Range;
+
+		/**
+		 * The command this code lens represents.
+		 */
+		command?: Command;
+
+		/**
+		 * `true` when there is a command associated.
+		 */
+		readonly isResolved: boolean;
+
+		/**
+		 * Creates a new code lens object.
+		 *
+		 * @param range The range to which this code lens applies.
+		 * @param command The command associated to this code lens.
+		 */
+		constructor(range: Range, command?: Command);
+	}
+
+	/**
+	 * A code lens provider adds [commands](#Command) to source text. The commands will be shown
+	 * as dedicated horizontal lines in between the source text.
+	 */
+	export interface CodeLensProvider<T extends CodeLens = CodeLens> {
+
+		/**
+		 * An optional event to signal that the code lenses from this provider have changed.
+		 */
+		onDidChangeCodeLenses?: Event<void>;
+
+		/**
+		 * Compute a list of [lenses](#CodeLens). This call should return as fast as possible and if
+		 * computing the commands is expensive implementors should only return code lens objects with the
+		 * range set and implement [resolve](#CodeLensProvider.resolveCodeLens).
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return An array of code lenses or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideCodeLenses(document: TextDocument, token: CancellationToken): ProviderResult<T[]>;
+
+		/**
+		 * This function will be called for each visible code lens, usually when scrolling and after
+		 * calls to [compute](#CodeLensProvider.provideCodeLenses)-lenses.
+		 *
+		 * @param codeLens Code lens that must be resolved.
+		 * @param token A cancellation token.
+		 * @return The given, resolved code lens or thenable that resolves to such.
+		 */
+		resolveCodeLens?(codeLens: T, token: CancellationToken): ProviderResult<T>;
+	}
+
+	/**
+	 * Information about where a symbol is defined.
+	 *
+	 * Provides additional metadata over normal [location](#Location) definitions, including the range of
+	 * the defining symbol
+	 */
+	export type DefinitionLink = LocationLink;
+
+	/**
+	 * The definition of a symbol represented as one or many [locations](#Location).
+	 * For most programming languages there is only one location at which a symbol is
+	 * defined.
+	 */
+	export type Definition = Location | Location[];
+
+	/**
+	 * The definition provider interface defines the contract between extensions and
+	 * the [go to definition](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-definition)
+	 * and peek definition features.
+	 */
+	export interface DefinitionProvider {
+
+		/**
+		 * Provide the definition of the symbol at the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return A definition or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideDefinition(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<Definition | DefinitionLink[]>;
+	}
+
+	/**
+	 * The implementation provider interface defines the contract between extensions and
+	 * the go to implementation feature.
+	 */
+	export interface ImplementationProvider {
+
+		/**
+		 * Provide the implementations of the symbol at the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return A definition or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideImplementation(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<Definition | DefinitionLink[]>;
+	}
+
+	/**
+	 * The type definition provider defines the contract between extensions and
+	 * the go to type definition feature.
+	 */
+	export interface TypeDefinitionProvider {
+
+		/**
+		 * Provide the type definition of the symbol at the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return A definition or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideTypeDefinition(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<Definition | DefinitionLink[]>;
+	}
+
+	/**
+	 * The declaration of a symbol representation as one or many [locations](#Location)
+	 * or [location links](#LocationLink).
+	 */
+	export type Declaration = Location | Location[] | LocationLink[];
+
+	/**
+	 * The declaration provider interface defines the contract between extensions and
+	 * the go to declaration feature.
+	 */
+	export interface DeclarationProvider {
+
+		/**
+		 * Provide the declaration of the symbol at the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return A declaration or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideDeclaration(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<Declaration>;
+	}
+
+	/**
+	 * The MarkdownString represents human-readable text that supports formatting via the
+	 * markdown syntax. Standard markdown is supported, also tables, but no embedded html.
+	 *
+	 * When created with `supportThemeIcons` then rendering of [theme icons](#ThemeIcon) via
+	 * the `$(<name>)`-syntax is supported.
+	 */
+	export class MarkdownString {
+
+		/**
+		 * The markdown string.
+		 */
+		value: string;
+
+		/**
+		 * Indicates that this markdown string is from a trusted source. Only *trusted*
+		 * markdown supports links that execute commands, e.g. `[Run it](command:myCommandId)`.
+		 */
+		isTrusted?: boolean;
+
+		/**
+		 * Indicates that this markdown string can contain [ThemeIcons](#ThemeIcon), e.g. `$(zap)`.
+		 */
+		readonly supportThemeIcons?: boolean;
+
+		/**
+		 * Creates a new markdown string with the given value.
+		 *
+		 * @param value Optional, initial value.
+		 * @param supportThemeIcons Optional, Specifies whether [ThemeIcons](#ThemeIcon) are supported within the [`MarkdownString`](#MarkdownString).
+		 */
+		constructor(value?: string, supportThemeIcons?: boolean);
+
+		/**
+		 * Appends and escapes the given string to this markdown string.
+		 * @param value Plain text.
+		 */
+		appendText(value: string): MarkdownString;
+
+		/**
+		 * Appends the given string 'as is' to this markdown string. When [`supportThemeIcons`](#MarkdownString.supportThemeIcons) is `true`, [ThemeIcons](#ThemeIcon) in the `value` will be iconified.
+		 * @param value Markdown string.
+		 */
+		appendMarkdown(value: string): MarkdownString;
+
+		/**
+		 * Appends the given string as codeblock using the provided language.
+		 * @param value A code snippet.
+		 * @param language An optional [language identifier](#languages.getLanguages).
+		 */
+		appendCodeblock(value: string, language?: string): MarkdownString;
+	}
+
+	/**
+	 * MarkedString can be used to render human-readable text. It is either a markdown string
+	 * or a code-block that provides a language and a code snippet. Note that
+	 * markdown strings will be sanitized - that means html will be escaped.
+	 *
+	 * @deprecated This type is deprecated, please use [`MarkdownString`](#MarkdownString) instead.
+	 */
+	export type MarkedString = MarkdownString | string | { language: string; value: string };
+
+	/**
+	 * A hover represents additional information for a symbol or word. Hovers are
+	 * rendered in a tooltip-like widget.
+	 */
+	export class Hover {
+
+		/**
+		 * The contents of this hover.
+		 */
+		contents: MarkedString[];
+
+		/**
+		 * The range to which this hover applies. When missing, the
+		 * editor will use the range at the current position or the
+		 * current position itself.
+		 */
+		range?: Range;
+
+		/**
+		 * Creates a new hover object.
+		 *
+		 * @param contents The contents of the hover.
+		 * @param range The range to which the hover applies.
+		 */
+		constructor(contents: MarkedString | MarkedString[], range?: Range);
+	}
+
+	/**
+	 * The hover provider interface defines the contract between extensions and
+	 * the [hover](https://code.visualstudio.com/docs/editor/intellisense)-feature.
+	 */
+	export interface HoverProvider {
+
+		/**
+		 * Provide a hover for the given position and document. Multiple hovers at the same
+		 * position will be merged by the editor. A hover can have a range which defaults
+		 * to the word range at the position when omitted.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return A hover or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideHover(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<Hover>;
+	}
+
+	/**
+	 * An EvaluatableExpression represents an expression in a document that can be evaluated by an active debugger or runtime.
+	 * The result of this evaluation is shown in a tooltip-like widget.
+	 * If only a range is specified, the expression will be extracted from the underlying document.
+	 * An optional expression can be used to override the extracted expression.
+	 * In this case the range is still used to highlight the range in the document.
+	 */
+	export class EvaluatableExpression {
+
+		/*
+		 * The range is used to extract the evaluatable expression from the underlying document and to highlight it.
+		 */
+		readonly range: Range;
+
+		/*
+		 * If specified the expression overrides the extracted expression.
+		 */
+		readonly expression?: string;
+
+		/**
+		 * Creates a new evaluatable expression object.
+		 *
+		 * @param range The range in the underlying document from which the evaluatable expression is extracted.
+		 * @param expression If specified overrides the extracted expression.
+		 */
+		constructor(range: Range, expression?: string);
+	}
+
+	/**
+	 * The evaluatable expression provider interface defines the contract between extensions and
+	 * the debug hover. In this contract the provider returns an evaluatable expression for a given position
+	 * in a document and VS Code evaluates this expression in the active debug session and shows the result in a debug hover.
+	 */
+	export interface EvaluatableExpressionProvider {
+
+		/**
+		 * Provide an evaluatable expression for the given document and position.
+		 * VS Code will evaluate this expression in the active debug session and will show the result in the debug hover.
+		 * The expression can be implicitly specified by the range in the underlying document or by explicitly returning an expression.
+		 *
+		 * @param document The document for which the debug hover is about to appear.
+		 * @param position The line and character position in the document where the debug hover is about to appear.
+		 * @param token A cancellation token.
+		 * @return An EvaluatableExpression or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideEvaluatableExpression(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<EvaluatableExpression>;
+	}
+
+	/**
+	 * Provide inline value as text.
+	 */
+	export class InlineValueText {
+		/**
+		 * The document range for which the inline value applies.
+		 */
+		readonly range: Range;
+		/**
+		 * The text of the inline value.
+		 */
+		readonly text: string;
+		/**
+		 * Creates a new InlineValueText object.
+		 *
+		 * @param range The document line where to show the inline value.
+		 * @param text The value to be shown for the line.
+		 */
+		constructor(range: Range, text: string);
+	}
+
+	/**
+	 * Provide inline value through a variable lookup.
+	 * If only a range is specified, the variable name will be extracted from the underlying document.
+	 * An optional variable name can be used to override the extracted name.
+	 */
+	export class InlineValueVariableLookup {
+		/**
+		 * The document range for which the inline value applies.
+		 * The range is used to extract the variable name from the underlying document.
+		 */
+		readonly range: Range;
+		/**
+		 * If specified the name of the variable to look up.
+		 */
+		readonly variableName?: string;
+		/**
+		 * How to perform the lookup.
+		 */
+		readonly caseSensitiveLookup: boolean;
+		/**
+		 * Creates a new InlineValueVariableLookup object.
+		 *
+		 * @param range The document line where to show the inline value.
+		 * @param variableName The name of the variable to look up.
+		 * @param caseSensitiveLookup How to perform the lookup. If missing lookup is case sensitive.
+		 */
+		constructor(range: Range, variableName?: string, caseSensitiveLookup?: boolean);
+	}
+
+	/**
+	 * Provide an inline value through an expression evaluation.
+	 * If only a range is specified, the expression will be extracted from the underlying document.
+	 * An optional expression can be used to override the extracted expression.
+	 */
+	export class InlineValueEvaluatableExpression {
+		/**
+		 * The document range for which the inline value applies.
+		 * The range is used to extract the evaluatable expression from the underlying document.
+		 */
+		readonly range: Range;
+		/**
+		 * If specified the expression overrides the extracted expression.
+		 */
+		readonly expression?: string;
+		/**
+		 * Creates a new InlineValueEvaluatableExpression object.
+		 *
+		 * @param range The range in the underlying document from which the evaluatable expression is extracted.
+		 * @param expression If specified overrides the extracted expression.
+		 */
+		constructor(range: Range, expression?: string);
+	}
+
+	/**
+	 * Inline value information can be provided by different means:
+	 * - directly as a text value (class InlineValueText).
+	 * - as a name to use for a variable lookup (class InlineValueVariableLookup)
+	 * - as an evaluatable expression (class InlineValueEvaluatableExpression)
+	 * The InlineValue types combines all inline value types into one type.
+	 */
+	export type InlineValue = InlineValueText | InlineValueVariableLookup | InlineValueEvaluatableExpression;
+
+	/**
+	 * A value-object that contains contextual information when requesting inline values from a InlineValuesProvider.
+	 */
+	export interface InlineValueContext {
+
+		/**
+		 * The stack frame (as a DAP Id) where the execution has stopped.
+		 */
+		readonly frameId: number;
+
+		/**
+		 * The document range where execution has stopped.
+		 * Typically the end position of the range denotes the line where the inline values are shown.
+		 */
+		readonly stoppedLocation: Range;
+	}
+
+	/**
+	 * The inline values provider interface defines the contract between extensions and the VS Code debugger inline values feature.
+	 * In this contract the provider returns inline value information for a given document range
+	 * and VS Code shows this information in the editor at the end of lines.
+	 */
+	export interface InlineValuesProvider {
+
+		/**
+		 * An optional event to signal that inline values have changed.
+		 * @see [EventEmitter](#EventEmitter)
+		 */
+		onDidChangeInlineValues?: Event<void> | undefined;
+
+		/**
+		 * Provide "inline value" information for a given document and range.
+		 * VS Code calls this method whenever debugging stops in the given document.
+		 * The returned inline values information is rendered in the editor at the end of lines.
+		 *
+		 * @param document The document for which the inline values information is needed.
+		 * @param viewPort The visible document range for which inline values should be computed.
+		 * @param context A bag containing contextual information like the current location.
+		 * @param token A cancellation token.
+		 * @return An array of InlineValueDescriptors or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideInlineValues(document: TextDocument, viewPort: Range, context: InlineValueContext, token: CancellationToken): ProviderResult<InlineValue[]>;
+	}
+
+	/**
+	 * A document highlight kind.
+	 */
+	export enum DocumentHighlightKind {
+
+		/**
+		 * A textual occurrence.
+		 */
+		Text = 0,
+
+		/**
+		 * Read-access of a symbol, like reading a variable.
+		 */
+		Read = 1,
+
+		/**
+		 * Write-access of a symbol, like writing to a variable.
+		 */
+		Write = 2
+	}
+
+	/**
+	 * A document highlight is a range inside a text document which deserves
+	 * special attention. Usually a document highlight is visualized by changing
+	 * the background color of its range.
+	 */
+	export class DocumentHighlight {
+
+		/**
+		 * The range this highlight applies to.
+		 */
+		range: Range;
+
+		/**
+		 * The highlight kind, default is [text](#DocumentHighlightKind.Text).
+		 */
+		kind?: DocumentHighlightKind;
+
+		/**
+		 * Creates a new document highlight object.
+		 *
+		 * @param range The range the highlight applies to.
+		 * @param kind The highlight kind, default is [text](#DocumentHighlightKind.Text).
+		 */
+		constructor(range: Range, kind?: DocumentHighlightKind);
+	}
+
+	/**
+	 * The document highlight provider interface defines the contract between extensions and
+	 * the word-highlight-feature.
+	 */
+	export interface DocumentHighlightProvider {
+
+		/**
+		 * Provide a set of document highlights, like all occurrences of a variable or
+		 * all exit-points of a function.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return An array of document highlights or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideDocumentHighlights(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<DocumentHighlight[]>;
+	}
+
+	/**
+	 * A symbol kind.
+	 */
+	export enum SymbolKind {
+		File = 0,
+		Module = 1,
+		Namespace = 2,
+		Package = 3,
+		Class = 4,
+		Method = 5,
+		Property = 6,
+		Field = 7,
+		Constructor = 8,
+		Enum = 9,
+		Interface = 10,
+		Function = 11,
+		Variable = 12,
+		Constant = 13,
+		String = 14,
+		Number = 15,
+		Boolean = 16,
+		Array = 17,
+		Object = 18,
+		Key = 19,
+		Null = 20,
+		EnumMember = 21,
+		Struct = 22,
+		Event = 23,
+		Operator = 24,
+		TypeParameter = 25
+	}
+
+	/**
+	 * Symbol tags are extra annotations that tweak the rendering of a symbol.
+	 */
+	export enum SymbolTag {
+
+		/**
+		 * Render a symbol as obsolete, usually using a strike-out.
+		 */
+		Deprecated = 1
+	}
+
+	/**
+	 * Represents information about programming constructs like variables, classes,
+	 * interfaces etc.
+	 */
+	export class SymbolInformation {
+
+		/**
+		 * The name of this symbol.
+		 */
+		name: string;
+
+		/**
+		 * The name of the symbol containing this symbol.
+		 */
+		containerName: string;
+
+		/**
+		 * The kind of this symbol.
+		 */
+		kind: SymbolKind;
+
+		/**
+		 * Tags for this symbol.
+		 */
+		tags?: ReadonlyArray<SymbolTag>;
+
+		/**
+		 * The location of this symbol.
+		 */
+		location: Location;
+
+		/**
+		 * Creates a new symbol information object.
+		 *
+		 * @param name The name of the symbol.
+		 * @param kind The kind of the symbol.
+		 * @param containerName The name of the symbol containing the symbol.
+		 * @param location The location of the symbol.
+		 */
+		constructor(name: string, kind: SymbolKind, containerName: string, location: Location);
+
+		/**
+		 * Creates a new symbol information object.
+		 *
+		 * @deprecated Please use the constructor taking a [location](#Location) object.
+		 *
+		 * @param name The name of the symbol.
+		 * @param kind The kind of the symbol.
+		 * @param range The range of the location of the symbol.
+		 * @param uri The resource of the location of symbol, defaults to the current document.
+		 * @param containerName The name of the symbol containing the symbol.
+		 */
+		constructor(name: string, kind: SymbolKind, range: Range, uri?: Uri, containerName?: string);
+	}
+
+	/**
+	 * Represents programming constructs like variables, classes, interfaces etc. that appear in a document. Document
+	 * symbols can be hierarchical and they have two ranges: one that encloses its definition and one that points to
+	 * its most interesting range, e.g. the range of an identifier.
+	 */
+	export class DocumentSymbol {
+
+		/**
+		 * The name of this symbol.
+		 */
+		name: string;
+
+		/**
+		 * More detail for this symbol, e.g. the signature of a function.
+		 */
+		detail: string;
+
+		/**
+		 * The kind of this symbol.
+		 */
+		kind: SymbolKind;
+
+		/**
+		 * Tags for this symbol.
+		 */
+		tags?: ReadonlyArray<SymbolTag>;
+
+		/**
+		 * The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code.
+		 */
+		range: Range;
+
+		/**
+		 * The range that should be selected and reveal when this symbol is being picked, e.g. the name of a function.
+		 * Must be contained by the [`range`](#DocumentSymbol.range).
+		 */
+		selectionRange: Range;
+
+		/**
+		 * Children of this symbol, e.g. properties of a class.
+		 */
+		children: DocumentSymbol[];
+
+		/**
+		 * Creates a new document symbol.
+		 *
+		 * @param name The name of the symbol.
+		 * @param detail Details for the symbol.
+		 * @param kind The kind of the symbol.
+		 * @param range The full range of the symbol.
+		 * @param selectionRange The range that should be reveal.
+		 */
+		constructor(name: string, detail: string, kind: SymbolKind, range: Range, selectionRange: Range);
+	}
+
+	/**
+	 * The document symbol provider interface defines the contract between extensions and
+	 * the [go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-symbol)-feature.
+	 */
+	export interface DocumentSymbolProvider {
+
+		/**
+		 * Provide symbol information for the given document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return An array of document highlights or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideDocumentSymbols(document: TextDocument, token: CancellationToken): ProviderResult<SymbolInformation[] | DocumentSymbol[]>;
+	}
+
+	/**
+	 * Metadata about a document symbol provider.
+	 */
+	export interface DocumentSymbolProviderMetadata {
+		/**
+		 * A human-readable string that is shown when multiple outlines trees show for one document.
+		 */
+		label?: string;
+	}
+
+	/**
+	 * The workspace symbol provider interface defines the contract between extensions and
+	 * the [symbol search](https://code.visualstudio.com/docs/editor/editingevolved#_open-symbol-by-name)-feature.
+	 */
+	export interface WorkspaceSymbolProvider<T extends SymbolInformation = SymbolInformation> {
+
+		/**
+		 * Project-wide search for a symbol matching the given query string.
+		 *
+		 * The `query`-parameter should be interpreted in a *relaxed way* as the editor will apply its own highlighting
+		 * and scoring on the results. A good rule of thumb is to match case-insensitive and to simply check that the
+		 * characters of *query* appear in their order in a candidate symbol. Don't use prefix, substring, or similar
+		 * strict matching.
+		 *
+		 * To improve performance implementors can implement `resolveWorkspaceSymbol` and then provide symbols with partial
+		 * [location](#SymbolInformation.location)-objects, without a `range` defined. The editor will then call
+		 * `resolveWorkspaceSymbol` for selected symbols only, e.g. when opening a workspace symbol.
+		 *
+		 * @param query A query string, can be the empty string in which case all symbols should be returned.
+		 * @param token A cancellation token.
+		 * @return An array of document highlights or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideWorkspaceSymbols(query: string, token: CancellationToken): ProviderResult<T[]>;
+
+		/**
+		 * Given a symbol fill in its [location](#SymbolInformation.location). This method is called whenever a symbol
+		 * is selected in the UI. Providers can implement this method and return incomplete symbols from
+		 * [`provideWorkspaceSymbols`](#WorkspaceSymbolProvider.provideWorkspaceSymbols) which often helps to improve
+		 * performance.
+		 *
+		 * @param symbol The symbol that is to be resolved. Guaranteed to be an instance of an object returned from an
+		 * earlier call to `provideWorkspaceSymbols`.
+		 * @param token A cancellation token.
+		 * @return The resolved symbol or a thenable that resolves to that. When no result is returned,
+		 * the given `symbol` is used.
+		 */
+		resolveWorkspaceSymbol?(symbol: T, token: CancellationToken): ProviderResult<T>;
+	}
+
+	/**
+	 * Value-object that contains additional information when
+	 * requesting references.
+	 */
+	export interface ReferenceContext {
+
+		/**
+		 * Include the declaration of the current symbol.
+		 */
+		includeDeclaration: boolean;
+	}
+
+	/**
+	 * The reference provider interface defines the contract between extensions and
+	 * the [find references](https://code.visualstudio.com/docs/editor/editingevolved#_peek)-feature.
+	 */
+	export interface ReferenceProvider {
+
+		/**
+		 * Provide a set of project-wide references for the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 *
+		 * @return An array of locations or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideReferences(document: TextDocument, position: Position, context: ReferenceContext, token: CancellationToken): ProviderResult<Location[]>;
+	}
+
+	/**
+	 * A text edit represents edits that should be applied
+	 * to a document.
+	 */
+	export class TextEdit {
+
+		/**
+		 * Utility to create a replace edit.
+		 *
+		 * @param range A range.
+		 * @param newText A string.
+		 * @return A new text edit object.
+		 */
+		static replace(range: Range, newText: string): TextEdit;
+
+		/**
+		 * Utility to create an insert edit.
+		 *
+		 * @param position A position, will become an empty range.
+		 * @param newText A string.
+		 * @return A new text edit object.
+		 */
+		static insert(position: Position, newText: string): TextEdit;
+
+		/**
+		 * Utility to create a delete edit.
+		 *
+		 * @param range A range.
+		 * @return A new text edit object.
+		 */
+		static delete(range: Range): TextEdit;
+
+		/**
+		 * Utility to create an eol-edit.
+		 *
+		 * @param eol An eol-sequence
+		 * @return A new text edit object.
+		 */
+		static setEndOfLine(eol: EndOfLine): TextEdit;
+
+		/**
+		 * The range this edit applies to.
+		 */
+		range: Range;
+
+		/**
+		 * The string this edit will insert.
+		 */
+		newText: string;
+
+		/**
+		 * The eol-sequence used in the document.
+		 *
+		 * *Note* that the eol-sequence will be applied to the
+		 * whole document.
+		 */
+		newEol?: EndOfLine;
+
+		/**
+		 * Create a new TextEdit.
+		 *
+		 * @param range A range.
+		 * @param newText A string.
+		 */
+		constructor(range: Range, newText: string);
+	}
+
+	/**
+	 * Additional data for entries of a workspace edit. Supports to label entries and marks entries
+	 * as needing confirmation by the user. The editor groups edits with equal labels into tree nodes,
+	 * for instance all edits labelled with "Changes in Strings" would be a tree node.
+	 */
+	export interface WorkspaceEditEntryMetadata {
+
+		/**
+		 * A flag which indicates that user confirmation is needed.
+		 */
+		needsConfirmation: boolean;
+
+		/**
+		 * A human-readable string which is rendered prominent.
+		 */
+		label: string;
+
+		/**
+		 * A human-readable string which is rendered less prominent on the same line.
+		 */
+		description?: string;
+
+		/**
+		 * The icon path or [ThemeIcon](#ThemeIcon) for the edit.
+		 */
+		iconPath?: Uri | { light: Uri; dark: Uri } | ThemeIcon;
+	}
+
+	/**
+	 * A workspace edit is a collection of textual and files changes for
+	 * multiple resources and documents.
+	 *
+	 * Use the [applyEdit](#workspace.applyEdit)-function to apply a workspace edit.
+	 */
+	export class WorkspaceEdit {
+
+		/**
+		 * The number of affected resources of textual or resource changes.
+		 */
+		readonly size: number;
+
+		/**
+		 * Replace the given range with given text for the given resource.
+		 *
+		 * @param uri A resource identifier.
+		 * @param range A range.
+		 * @param newText A string.
+		 * @param metadata Optional metadata for the entry.
+		 */
+		replace(uri: Uri, range: Range, newText: string, metadata?: WorkspaceEditEntryMetadata): void;
+
+		/**
+		 * Insert the given text at the given position.
+		 *
+		 * @param uri A resource identifier.
+		 * @param position A position.
+		 * @param newText A string.
+		 * @param metadata Optional metadata for the entry.
+		 */
+		insert(uri: Uri, position: Position, newText: string, metadata?: WorkspaceEditEntryMetadata): void;
+
+		/**
+		 * Delete the text at the given range.
+		 *
+		 * @param uri A resource identifier.
+		 * @param range A range.
+		 * @param metadata Optional metadata for the entry.
+		 */
+		delete(uri: Uri, range: Range, metadata?: WorkspaceEditEntryMetadata): void;
+
+		/**
+		 * Check if a text edit for a resource exists.
+		 *
+		 * @param uri A resource identifier.
+		 * @return `true` if the given resource will be touched by this edit.
+		 */
+		has(uri: Uri): boolean;
+
+		/**
+		 * Set (and replace) text edits for a resource.
+		 *
+		 * @param uri A resource identifier.
+		 * @param edits An array of text edits.
+		 */
+		set(uri: Uri, edits: TextEdit[]): void;
+
+		/**
+		 * Get the text edits for a resource.
+		 *
+		 * @param uri A resource identifier.
+		 * @return An array of text edits.
+		 */
+		get(uri: Uri): TextEdit[];
+
+		/**
+		 * Create a regular file.
+		 *
+		 * @param uri Uri of the new file..
+		 * @param options Defines if an existing file should be overwritten or be
+		 * ignored. When overwrite and ignoreIfExists are both set overwrite wins.
+		 * When both are unset and when the file already exists then the edit cannot
+		 * be applied successfully.
+		 * @param metadata Optional metadata for the entry.
+		 */
+		createFile(uri: Uri, options?: { overwrite?: boolean, ignoreIfExists?: boolean }, metadata?: WorkspaceEditEntryMetadata): void;
+
+		/**
+		 * Delete a file or folder.
+		 *
+		 * @param uri The uri of the file that is to be deleted.
+		 * @param metadata Optional metadata for the entry.
+		 */
+		deleteFile(uri: Uri, options?: { recursive?: boolean, ignoreIfNotExists?: boolean }, metadata?: WorkspaceEditEntryMetadata): void;
+
+		/**
+		 * Rename a file or folder.
+		 *
+		 * @param oldUri The existing file.
+		 * @param newUri The new location.
+		 * @param options Defines if existing files should be overwritten or be
+		 * ignored. When overwrite and ignoreIfExists are both set overwrite wins.
+		 * @param metadata Optional metadata for the entry.
+		 */
+		renameFile(oldUri: Uri, newUri: Uri, options?: { overwrite?: boolean, ignoreIfExists?: boolean }, metadata?: WorkspaceEditEntryMetadata): void;
+
+		/**
+		 * Get all text edits grouped by resource.
+		 *
+		 * @return A shallow copy of `[Uri, TextEdit[]]`-tuples.
+		 */
+		entries(): [Uri, TextEdit[]][];
+	}
+
+	/**
+	 * A snippet string is a template which allows to insert text
+	 * and to control the editor cursor when insertion happens.
+	 *
+	 * A snippet can define tab stops and placeholders with `$1`, `$2`
+	 * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
+	 * the end of the snippet. Variables are defined with `$name` and
+	 * `${name:default value}`. The full snippet syntax is documented
+	 * [here](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_creating-your-own-snippets).
+	 */
+	export class SnippetString {
+
+		/**
+		 * The snippet string.
+		 */
+		value: string;
+
+		constructor(value?: string);
+
+		/**
+		 * Builder-function that appends the given string to
+		 * the [`value`](#SnippetString.value) of this snippet string.
+		 *
+		 * @param string A value to append 'as given'. The string will be escaped.
+		 * @return This snippet string.
+		 */
+		appendText(string: string): SnippetString;
+
+		/**
+		 * Builder-function that appends a tabstop (`$1`, `$2` etc) to
+		 * the [`value`](#SnippetString.value) of this snippet string.
+		 *
+		 * @param number The number of this tabstop, defaults to an auto-increment
+		 * value starting at 1.
+		 * @return This snippet string.
+		 */
+		appendTabstop(number?: number): SnippetString;
+
+		/**
+		 * Builder-function that appends a placeholder (`${1:value}`) to
+		 * the [`value`](#SnippetString.value) of this snippet string.
+		 *
+		 * @param value The value of this placeholder - either a string or a function
+		 * with which a nested snippet can be created.
+		 * @param number The number of this tabstop, defaults to an auto-increment
+		 * value starting at 1.
+		 * @return This snippet string.
+		 */
+		appendPlaceholder(value: string | ((snippet: SnippetString) => any), number?: number): SnippetString;
+
+		/**
+		 * Builder-function that appends a choice (`${1|a,b,c|}`) to
+		 * the [`value`](#SnippetString.value) of this snippet string.
+		 *
+		 * @param values The values for choices - the array of strings
+		 * @param number The number of this tabstop, defaults to an auto-increment
+		 * value starting at 1.
+		 * @return This snippet string.
+		 */
+		appendChoice(values: string[], number?: number): SnippetString;
+
+		/**
+		 * Builder-function that appends a variable (`${VAR}`) to
+		 * the [`value`](#SnippetString.value) of this snippet string.
+		 *
+		 * @param name The name of the variable - excluding the `$`.
+		 * @param defaultValue The default value which is used when the variable name cannot
+		 * be resolved - either a string or a function with which a nested snippet can be created.
+		 * @return This snippet string.
+		 */
+		appendVariable(name: string, defaultValue: string | ((snippet: SnippetString) => any)): SnippetString;
+	}
+
+	/**
+	 * The rename provider interface defines the contract between extensions and
+	 * the [rename](https://code.visualstudio.com/docs/editor/editingevolved#_rename-symbol)-feature.
+	 */
+	export interface RenameProvider {
+
+		/**
+		 * Provide an edit that describes changes that have to be made to one
+		 * or many resources to rename a symbol to a different name.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param newName The new name of the symbol. If the given name is not valid, the provider must return a rejected promise.
+		 * @param token A cancellation token.
+		 * @return A workspace edit or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideRenameEdits(document: TextDocument, position: Position, newName: string, token: CancellationToken): ProviderResult<WorkspaceEdit>;
+
+		/**
+		 * Optional function for resolving and validating a position *before* running rename. The result can
+		 * be a range or a range and a placeholder text. The placeholder text should be the identifier of the symbol
+		 * which is being renamed - when omitted the text in the returned range is used.
+		 *
+		 * *Note: * This function should throw an error or return a rejected thenable when the provided location
+		 * doesn't allow for a rename.
+		 *
+		 * @param document The document in which rename will be invoked.
+		 * @param position The position at which rename will be invoked.
+		 * @param token A cancellation token.
+		 * @return The range or range and placeholder text of the identifier that is to be renamed. The lack of a result can signaled by returning `undefined` or `null`.
+		 */
+		prepareRename?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<Range | { range: Range, placeholder: string }>;
+	}
+
+	/**
+	 * A semantic tokens legend contains the needed information to decipher
+	 * the integer encoded representation of semantic tokens.
+	 */
+	export class SemanticTokensLegend {
+		/**
+		 * The possible token types.
+		 */
+		readonly tokenTypes: string[];
+		/**
+		 * The possible token modifiers.
+		 */
+		readonly tokenModifiers: string[];
+
+		constructor(tokenTypes: string[], tokenModifiers?: string[]);
+	}
+
+	/**
+	 * A semantic tokens builder can help with creating a `SemanticTokens` instance
+	 * which contains delta encoded semantic tokens.
+	 */
+	export class SemanticTokensBuilder {
+
+		constructor(legend?: SemanticTokensLegend);
+
+		/**
+		 * Add another token.
+		 *
+		 * @param line The token start line number (absolute value).
+		 * @param char The token start character (absolute value).
+		 * @param length The token length in characters.
+		 * @param tokenType The encoded token type.
+		 * @param tokenModifiers The encoded token modifiers.
+		 */
+		push(line: number, char: number, length: number, tokenType: number, tokenModifiers?: number): void;
+
+		/**
+		 * Add another token. Use only when providing a legend.
+		 *
+		 * @param range The range of the token. Must be single-line.
+		 * @param tokenType The token type.
+		 * @param tokenModifiers The token modifiers.
+		 */
+		push(range: Range, tokenType: string, tokenModifiers?: string[]): void;
+
+		/**
+		 * Finish and create a `SemanticTokens` instance.
+		 */
+		build(resultId?: string): SemanticTokens;
+	}
+
+	/**
+	 * Represents semantic tokens, either in a range or in an entire document.
+	 * @see [provideDocumentSemanticTokens](#DocumentSemanticTokensProvider.provideDocumentSemanticTokens) for an explanation of the format.
+	 * @see [SemanticTokensBuilder](#SemanticTokensBuilder) for a helper to create an instance.
+	 */
+	export class SemanticTokens {
+		/**
+		 * The result id of the tokens.
+		 *
+		 * This is the id that will be passed to `DocumentSemanticTokensProvider.provideDocumentSemanticTokensEdits` (if implemented).
+		 */
+		readonly resultId?: string;
+		/**
+		 * The actual tokens data.
+		 * @see [provideDocumentSemanticTokens](#DocumentSemanticTokensProvider.provideDocumentSemanticTokens) for an explanation of the format.
+		 */
+		readonly data: Uint32Array;
+
+		constructor(data: Uint32Array, resultId?: string);
+	}
+
+	/**
+	 * Represents edits to semantic tokens.
+	 * @see [provideDocumentSemanticTokensEdits](#DocumentSemanticTokensProvider.provideDocumentSemanticTokensEdits) for an explanation of the format.
+	 */
+	export class SemanticTokensEdits {
+		/**
+		 * The result id of the tokens.
+		 *
+		 * This is the id that will be passed to `DocumentSemanticTokensProvider.provideDocumentSemanticTokensEdits` (if implemented).
+		 */
+		readonly resultId?: string;
+		/**
+		 * The edits to the tokens data.
+		 * All edits refer to the initial data state.
+		 */
+		readonly edits: SemanticTokensEdit[];
+
+		constructor(edits: SemanticTokensEdit[], resultId?: string);
+	}
+
+	/**
+	 * Represents an edit to semantic tokens.
+	 * @see [provideDocumentSemanticTokensEdits](#DocumentSemanticTokensProvider.provideDocumentSemanticTokensEdits) for an explanation of the format.
+	 */
+	export class SemanticTokensEdit {
+		/**
+		 * The start offset of the edit.
+		 */
+		readonly start: number;
+		/**
+		 * The count of elements to remove.
+		 */
+		readonly deleteCount: number;
+		/**
+		 * The elements to insert.
+		 */
+		readonly data?: Uint32Array;
+
+		constructor(start: number, deleteCount: number, data?: Uint32Array);
+	}
+
+	/**
+	 * The document semantic tokens provider interface defines the contract between extensions and
+	 * semantic tokens.
+	 */
+	export interface DocumentSemanticTokensProvider {
+		/**
+		 * An optional event to signal that the semantic tokens from this provider have changed.
+		 */
+		onDidChangeSemanticTokens?: Event<void>;
+
+		/**
+		 * Tokens in a file are represented as an array of integers. The position of each token is expressed relative to
+		 * the token before it, because most tokens remain stable relative to each other when edits are made in a file.
+		 *
+		 * ---
+		 * In short, each token takes 5 integers to represent, so a specific token `i` in the file consists of the following array indices:
+		 *  - at index `5*i`   - `deltaLine`: token line number, relative to the previous token
+		 *  - at index `5*i+1` - `deltaStart`: token start character, relative to the previous token (relative to 0 or the previous token's start if they are on the same line)
+		 *  - at index `5*i+2` - `length`: the length of the token. A token cannot be multiline.
+		 *  - at index `5*i+3` - `tokenType`: will be looked up in `SemanticTokensLegend.tokenTypes`. We currently ask that `tokenType` < 65536.
+		 *  - at index `5*i+4` - `tokenModifiers`: each set bit will be looked up in `SemanticTokensLegend.tokenModifiers`
+		 *
+		 * ---
+		 * ### How to encode tokens
+		 *
+		 * Here is an example for encoding a file with 3 tokens in a uint32 array:
+		 * ```
+		 *    { line: 2, startChar:  5, length: 3, tokenType: "property",  tokenModifiers: ["private", "static"] },
+		 *    { line: 2, startChar: 10, length: 4, tokenType: "type",      tokenModifiers: [] },
+		 *    { line: 5, startChar:  2, length: 7, tokenType: "class",     tokenModifiers: [] }
+		 * ```
+		 *
+		 * 1. First of all, a legend must be devised. This legend must be provided up-front and capture all possible token types.
+		 * For this example, we will choose the following legend which must be passed in when registering the provider:
+		 * ```
+		 *    tokenTypes: ['property', 'type', 'class'],
+		 *    tokenModifiers: ['private', 'static']
+		 * ```
+		 *
+		 * 2. The first transformation step is to encode `tokenType` and `tokenModifiers` as integers using the legend. Token types are looked
+		 * up by index, so a `tokenType` value of `1` means `tokenTypes[1]`. Multiple token modifiers can be set by using bit flags,
+		 * so a `tokenModifier` value of `3` is first viewed as binary `0b00000011`, which means `[tokenModifiers[0], tokenModifiers[1]]` because
+		 * bits 0 and 1 are set. Using this legend, the tokens now are:
+		 * ```
+		 *    { line: 2, startChar:  5, length: 3, tokenType: 0, tokenModifiers: 3 },
+		 *    { line: 2, startChar: 10, length: 4, tokenType: 1, tokenModifiers: 0 },
+		 *    { line: 5, startChar:  2, length: 7, tokenType: 2, tokenModifiers: 0 }
+		 * ```
+		 *
+		 * 3. The next step is to represent each token relative to the previous token in the file. In this case, the second token
+		 * is on the same line as the first token, so the `startChar` of the second token is made relative to the `startChar`
+		 * of the first token, so it will be `10 - 5`. The third token is on a different line than the second token, so the
+		 * `startChar` of the third token will not be altered:
+		 * ```
+		 *    { deltaLine: 2, deltaStartChar: 5, length: 3, tokenType: 0, tokenModifiers: 3 },
+		 *    { deltaLine: 0, deltaStartChar: 5, length: 4, tokenType: 1, tokenModifiers: 0 },
+		 *    { deltaLine: 3, deltaStartChar: 2, length: 7, tokenType: 2, tokenModifiers: 0 }
+		 * ```
+		 *
+		 * 4. Finally, the last step is to inline each of the 5 fields for a token in a single array, which is a memory friendly representation:
+		 * ```
+		 *    // 1st token,  2nd token,  3rd token
+		 *    [  2,5,3,0,3,  0,5,4,1,0,  3,2,7,2,0 ]
+		 * ```
+		 *
+		 * @see [SemanticTokensBuilder](#SemanticTokensBuilder) for a helper to encode tokens as integers.
+		 * *NOTE*: When doing edits, it is possible that multiple edits occur until VS Code decides to invoke the semantic tokens provider.
+		 * *NOTE*: If the provider cannot temporarily compute semantic tokens, it can indicate this by throwing an error with the message 'Busy'.
+		 */
+		provideDocumentSemanticTokens(document: TextDocument, token: CancellationToken): ProviderResult<SemanticTokens>;
+
+		/**
+		 * Instead of always returning all the tokens in a file, it is possible for a `DocumentSemanticTokensProvider` to implement
+		 * this method (`provideDocumentSemanticTokensEdits`) and then return incremental updates to the previously provided semantic tokens.
+		 *
+		 * ---
+		 * ### How tokens change when the document changes
+		 *
+		 * Suppose that `provideDocumentSemanticTokens` has previously returned the following semantic tokens:
+		 * ```
+		 *    // 1st token,  2nd token,  3rd token
+		 *    [  2,5,3,0,3,  0,5,4,1,0,  3,2,7,2,0 ]
+		 * ```
+		 *
+		 * Also suppose that after some edits, the new semantic tokens in a file are:
+		 * ```
+		 *    // 1st token,  2nd token,  3rd token
+		 *    [  3,5,3,0,3,  0,5,4,1,0,  3,2,7,2,0 ]
+		 * ```
+		 * It is possible to express these new tokens in terms of an edit applied to the previous tokens:
+		 * ```
+		 *    [  2,5,3,0,3,  0,5,4,1,0,  3,2,7,2,0 ] // old tokens
+		 *    [  3,5,3,0,3,  0,5,4,1,0,  3,2,7,2,0 ] // new tokens
+		 *
+		 *    edit: { start:  0, deleteCount: 1, data: [3] } // replace integer at offset 0 with 3
+		 * ```
+		 *
+		 * *NOTE*: If the provider cannot compute `SemanticTokensEdits`, it can "give up" and return all the tokens in the document again.
+		 * *NOTE*: All edits in `SemanticTokensEdits` contain indices in the old integers array, so they all refer to the previous result state.
+		 */
+		provideDocumentSemanticTokensEdits?(document: TextDocument, previousResultId: string, token: CancellationToken): ProviderResult<SemanticTokens | SemanticTokensEdits>;
+	}
+
+	/**
+	 * The document range semantic tokens provider interface defines the contract between extensions and
+	 * semantic tokens.
+	 */
+	export interface DocumentRangeSemanticTokensProvider {
+		/**
+		 * @see [provideDocumentSemanticTokens](#DocumentSemanticTokensProvider.provideDocumentSemanticTokens).
+		 */
+		provideDocumentRangeSemanticTokens(document: TextDocument, range: Range, token: CancellationToken): ProviderResult<SemanticTokens>;
+	}
+
+	/**
+	 * Value-object describing what options formatting should use.
+	 */
+	export interface FormattingOptions {
+
+		/**
+		 * Size of a tab in spaces.
+		 */
+		tabSize: number;
+
+		/**
+		 * Prefer spaces over tabs.
+		 */
+		insertSpaces: boolean;
+
+		/**
+		 * Signature for further properties.
+		 */
+		[key: string]: boolean | number | string;
+	}
+
+	/**
+	 * The document formatting provider interface defines the contract between extensions and
+	 * the formatting-feature.
+	 */
+	export interface DocumentFormattingEditProvider {
+
+		/**
+		 * Provide formatting edits for a whole document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param options Options controlling formatting.
+		 * @param token A cancellation token.
+		 * @return A set of text edits or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideDocumentFormattingEdits(document: TextDocument, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>;
+	}
+
+	/**
+	 * The document formatting provider interface defines the contract between extensions and
+	 * the formatting-feature.
+	 */
+	export interface DocumentRangeFormattingEditProvider {
+
+		/**
+		 * Provide formatting edits for a range in a document.
+		 *
+		 * The given range is a hint and providers can decide to format a smaller
+		 * or larger range. Often this is done by adjusting the start and end
+		 * of the range to full syntax nodes.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param range The range which should be formatted.
+		 * @param options Options controlling formatting.
+		 * @param token A cancellation token.
+		 * @return A set of text edits or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>;
+	}
+
+	/**
+	 * The document formatting provider interface defines the contract between extensions and
+	 * the formatting-feature.
+	 */
+	export interface OnTypeFormattingEditProvider {
+
+		/**
+		 * Provide formatting edits after a character has been typed.
+		 *
+		 * The given position and character should hint to the provider
+		 * what range the position to expand to, like find the matching `{`
+		 * when `}` has been entered.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param ch The character that has been typed.
+		 * @param options Options controlling formatting.
+		 * @param token A cancellation token.
+		 * @return A set of text edits or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideOnTypeFormattingEdits(document: TextDocument, position: Position, ch: string, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>;
+	}
+
+	/**
+	 * Represents a parameter of a callable-signature. A parameter can
+	 * have a label and a doc-comment.
+	 */
+	export class ParameterInformation {
+
+		/**
+		 * The label of this signature.
+		 *
+		 * Either a string or inclusive start and exclusive end offsets within its containing
+		 * [signature label](#SignatureInformation.label). *Note*: A label of type string must be
+		 * a substring of its containing signature information's [label](#SignatureInformation.label).
+		 */
+		label: string | [number, number];
+
+		/**
+		 * The human-readable doc-comment of this signature. Will be shown
+		 * in the UI but can be omitted.
+		 */
+		documentation?: string | MarkdownString;
+
+		/**
+		 * Creates a new parameter information object.
+		 *
+		 * @param label A label string or inclusive start and exclusive end offsets within its containing signature label.
+		 * @param documentation A doc string.
+		 */
+		constructor(label: string | [number, number], documentation?: string | MarkdownString);
+	}
+
+	/**
+	 * Represents the signature of something callable. A signature
+	 * can have a label, like a function-name, a doc-comment, and
+	 * a set of parameters.
+	 */
+	export class SignatureInformation {
+
+		/**
+		 * The label of this signature. Will be shown in
+		 * the UI.
+		 */
+		label: string;
+
+		/**
+		 * The human-readable doc-comment of this signature. Will be shown
+		 * in the UI but can be omitted.
+		 */
+		documentation?: string | MarkdownString;
+
+		/**
+		 * The parameters of this signature.
+		 */
+		parameters: ParameterInformation[];
+
+		/**
+		 * The index of the active parameter.
+		 *
+		 * If provided, this is used in place of [`SignatureHelp.activeSignature`](#SignatureHelp.activeSignature).
+		 */
+		activeParameter?: number;
+
+		/**
+		 * Creates a new signature information object.
+		 *
+		 * @param label A label string.
+		 * @param documentation A doc string.
+		 */
+		constructor(label: string, documentation?: string | MarkdownString);
+	}
+
+	/**
+	 * Signature help represents the signature of something
+	 * callable. There can be multiple signatures but only one
+	 * active and only one active parameter.
+	 */
+	export class SignatureHelp {
+
+		/**
+		 * One or more signatures.
+		 */
+		signatures: SignatureInformation[];
+
+		/**
+		 * The active signature.
+		 */
+		activeSignature: number;
+
+		/**
+		 * The active parameter of the active signature.
+		 */
+		activeParameter: number;
+	}
+
+	/**
+	 * How a [`SignatureHelpProvider`](#SignatureHelpProvider) was triggered.
+	 */
+	export enum SignatureHelpTriggerKind {
+		/**
+		 * Signature help was invoked manually by the user or by a command.
+		 */
+		Invoke = 1,
+
+		/**
+		 * Signature help was triggered by a trigger character.
+		 */
+		TriggerCharacter = 2,
+
+		/**
+		 * Signature help was triggered by the cursor moving or by the document content changing.
+		 */
+		ContentChange = 3,
+	}
+
+	/**
+	 * Additional information about the context in which a
+	 * [`SignatureHelpProvider`](#SignatureHelpProvider.provideSignatureHelp) was triggered.
+	 */
+	export interface SignatureHelpContext {
+		/**
+		 * Action that caused signature help to be triggered.
+		 */
+		readonly triggerKind: SignatureHelpTriggerKind;
+
+		/**
+		 * Character that caused signature help to be triggered.
+		 *
+		 * This is `undefined` when signature help is not triggered by typing, such as when manually invoking
+		 * signature help or when moving the cursor.
+		 */
+		readonly triggerCharacter?: string;
+
+		/**
+		 * `true` if signature help was already showing when it was triggered.
+		 *
+		 * Retriggers occur when the signature help is already active and can be caused by actions such as
+		 * typing a trigger character, a cursor move, or document content changes.
+		 */
+		readonly isRetrigger: boolean;
+
+		/**
+		 * The currently active [`SignatureHelp`](#SignatureHelp).
+		 *
+		 * The `activeSignatureHelp` has its [`SignatureHelp.activeSignature`] field updated based on
+		 * the user arrowing through available signatures.
+		 */
+		readonly activeSignatureHelp?: SignatureHelp;
+	}
+
+	/**
+	 * The signature help provider interface defines the contract between extensions and
+	 * the [parameter hints](https://code.visualstudio.com/docs/editor/intellisense)-feature.
+	 */
+	export interface SignatureHelpProvider {
+
+		/**
+		 * Provide help for the signature at the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @param context Information about how signature help was triggered.
+		 *
+		 * @return Signature help or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideSignatureHelp(document: TextDocument, position: Position, token: CancellationToken, context: SignatureHelpContext): ProviderResult<SignatureHelp>;
+	}
+
+	/**
+	 * Metadata about a registered [`SignatureHelpProvider`](#SignatureHelpProvider).
+	 */
+	export interface SignatureHelpProviderMetadata {
+		/**
+		 * List of characters that trigger signature help.
+		 */
+		readonly triggerCharacters: ReadonlyArray<string>;
+
+		/**
+		 * List of characters that re-trigger signature help.
+		 *
+		 * These trigger characters are only active when signature help is already showing. All trigger characters
+		 * are also counted as re-trigger characters.
+		 */
+		readonly retriggerCharacters: ReadonlyArray<string>;
+	}
+
+	/**
+	 * Completion item kinds.
+	 */
+	export enum CompletionItemKind {
+		Text = 0,
+		Method = 1,
+		Function = 2,
+		Constructor = 3,
+		Field = 4,
+		Variable = 5,
+		Class = 6,
+		Interface = 7,
+		Module = 8,
+		Property = 9,
+		Unit = 10,
+		Value = 11,
+		Enum = 12,
+		Keyword = 13,
+		Snippet = 14,
+		Color = 15,
+		Reference = 17,
+		File = 16,
+		Folder = 18,
+		EnumMember = 19,
+		Constant = 20,
+		Struct = 21,
+		Event = 22,
+		Operator = 23,
+		TypeParameter = 24,
+		User = 25,
+		Issue = 26,
+	}
+
+	/**
+	 * Completion item tags are extra annotations that tweak the rendering of a completion
+	 * item.
+	 */
+	export enum CompletionItemTag {
+		/**
+		 * Render a completion as obsolete, usually using a strike-out.
+		 */
+		Deprecated = 1
+	}
+
+	/**
+	 * A completion item represents a text snippet that is proposed to complete text that is being typed.
+	 *
+	 * It is sufficient to create a completion item from just a [label](#CompletionItem.label). In that
+	 * case the completion item will replace the [word](#TextDocument.getWordRangeAtPosition)
+	 * until the cursor with the given label or [insertText](#CompletionItem.insertText). Otherwise the
+	 * given [edit](#CompletionItem.textEdit) is used.
+	 *
+	 * When selecting a completion item in the editor its defined or synthesized text edit will be applied
+	 * to *all* cursors/selections whereas [additionalTextEdits](#CompletionItem.additionalTextEdits) will be
+	 * applied as provided.
+	 *
+	 * @see [CompletionItemProvider.provideCompletionItems](#CompletionItemProvider.provideCompletionItems)
+	 * @see [CompletionItemProvider.resolveCompletionItem](#CompletionItemProvider.resolveCompletionItem)
+	 */
+	export class CompletionItem {
+
+		/**
+		 * The label of this completion item. By default
+		 * this is also the text that is inserted when selecting
+		 * this completion.
+		 */
+		label: string;
+
+		/**
+		 * The kind of this completion item. Based on the kind
+		 * an icon is chosen by the editor.
+		 */
+		kind?: CompletionItemKind;
+
+		/**
+		 * Tags for this completion item.
+		 */
+		tags?: ReadonlyArray<CompletionItemTag>;
+
+		/**
+		 * A human-readable string with additional information
+		 * about this item, like type or symbol information.
+		 */
+		detail?: string;
+
+		/**
+		 * A human-readable string that represents a doc-comment.
+		 */
+		documentation?: string | MarkdownString;
+
+		/**
+		 * A string that should be used when comparing this item
+		 * with other items. When `falsy` the [label](#CompletionItem.label)
+		 * is used.
+		 *
+		 * Note that `sortText` is only used for the initial ordering of completion
+		 * items. When having a leading word (prefix) ordering is based on how
+		 * well completions match that prefix and the initial ordering is only used
+		 * when completions match equally well. The prefix is defined by the
+		 * [`range`](#CompletionItem.range)-property and can therefore be different
+		 * for each completion.
+		 */
+		sortText?: string;
+
+		/**
+		 * A string that should be used when filtering a set of
+		 * completion items. When `falsy` the [label](#CompletionItem.label)
+		 * is used.
+		 *
+		 * Note that the filter text is matched against the leading word (prefix) which is defined
+		 * by the [`range`](#CompletionItem.range)-property.
+		 */
+		filterText?: string;
+
+		/**
+		 * Select this item when showing. *Note* that only one completion item can be selected and
+		 * that the editor decides which item that is. The rule is that the *first* item of those
+		 * that match best is selected.
+		 */
+		preselect?: boolean;
+
+		/**
+		 * A string or snippet that should be inserted in a document when selecting
+		 * this completion. When `falsy` the [label](#CompletionItem.label)
+		 * is used.
+		 */
+		insertText?: string | SnippetString;
+
+		/**
+		 * A range or a insert and replace range selecting the text that should be replaced by this completion item.
+		 *
+		 * When omitted, the range of the [current word](#TextDocument.getWordRangeAtPosition) is used as replace-range
+		 * and as insert-range the start of the [current word](#TextDocument.getWordRangeAtPosition) to the
+		 * current position is used.
+		 *
+		 * *Note 1:* A range must be a [single line](#Range.isSingleLine) and it must
+		 * [contain](#Range.contains) the position at which completion has been [requested](#CompletionItemProvider.provideCompletionItems).
+		 * *Note 2:* A insert range must be a prefix of a replace range, that means it must be contained and starting at the same position.
+		 */
+		range?: Range | { inserting: Range; replacing: Range; };
+
+		/**
+		 * An optional set of characters that when pressed while this completion is active will accept it first and
+		 * then type that character. *Note* that all commit characters should have `length=1` and that superfluous
+		 * characters will be ignored.
+		 */
+		commitCharacters?: string[];
+
+		/**
+		 * Keep whitespace of the [insertText](#CompletionItem.insertText) as is. By default, the editor adjusts leading
+		 * whitespace of new lines so that they match the indentation of the line for which the item is accepted - setting
+		 * this to `true` will prevent that.
+		 */
+		keepWhitespace?: boolean;
+
+		/**
+		 * @deprecated Use `CompletionItem.insertText` and `CompletionItem.range` instead.
+		 *
+		 * An [edit](#TextEdit) which is applied to a document when selecting
+		 * this completion. When an edit is provided the value of
+		 * [insertText](#CompletionItem.insertText) is ignored.
+		 *
+		 * The [range](#Range) of the edit must be single-line and on the same
+		 * line completions were [requested](#CompletionItemProvider.provideCompletionItems) at.
+		 */
+		textEdit?: TextEdit;
+
+		/**
+		 * An optional array of additional [text edits](#TextEdit) that are applied when
+		 * selecting this completion. Edits must not overlap with the main [edit](#CompletionItem.textEdit)
+		 * nor with themselves.
+		 */
+		additionalTextEdits?: TextEdit[];
+
+		/**
+		 * An optional [command](#Command) that is executed *after* inserting this completion. *Note* that
+		 * additional modifications to the current document should be described with the
+		 * [additionalTextEdits](#CompletionItem.additionalTextEdits)-property.
+		 */
+		command?: Command;
+
+		/**
+		 * Creates a new completion item.
+		 *
+		 * Completion items must have at least a [label](#CompletionItem.label) which then
+		 * will be used as insert text as well as for sorting and filtering.
+		 *
+		 * @param label The label of the completion.
+		 * @param kind The [kind](#CompletionItemKind) of the completion.
+		 */
+		constructor(label: string, kind?: CompletionItemKind);
+	}
+
+	/**
+	 * Represents a collection of [completion items](#CompletionItem) to be presented
+	 * in the editor.
+	 */
+	export class CompletionList<T extends CompletionItem = CompletionItem> {
+
+		/**
+		 * This list is not complete. Further typing should result in recomputing
+		 * this list.
+		 */
+		isIncomplete?: boolean;
+
+		/**
+		 * The completion items.
+		 */
+		items: T[];
+
+		/**
+		 * Creates a new completion list.
+		 *
+		 * @param items The completion items.
+		 * @param isIncomplete The list is not complete.
+		 */
+		constructor(items?: T[], isIncomplete?: boolean);
+	}
+
+	/**
+	 * How a [completion provider](#CompletionItemProvider) was triggered
+	 */
+	export enum CompletionTriggerKind {
+		/**
+		 * Completion was triggered normally.
+		 */
+		Invoke = 0,
+		/**
+		 * Completion was triggered by a trigger character.
+		 */
+		TriggerCharacter = 1,
+		/**
+		 * Completion was re-triggered as current completion list is incomplete
+		 */
+		TriggerForIncompleteCompletions = 2
+	}
+
+	/**
+	 * Contains additional information about the context in which
+	 * [completion provider](#CompletionItemProvider.provideCompletionItems) is triggered.
+	 */
+	export interface CompletionContext {
+		/**
+		 * How the completion was triggered.
+		 */
+		readonly triggerKind: CompletionTriggerKind;
+
+		/**
+		 * Character that triggered the completion item provider.
+		 *
+		 * `undefined` if provider was not triggered by a character.
+		 *
+		 * The trigger character is already in the document when the completion provider is triggered.
+		 */
+		readonly triggerCharacter?: string;
+	}
+
+	/**
+	 * The completion item provider interface defines the contract between extensions and
+	 * [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense).
+	 *
+	 * Providers can delay the computation of the [`detail`](#CompletionItem.detail)
+	 * and [`documentation`](#CompletionItem.documentation) properties by implementing the
+	 * [`resolveCompletionItem`](#CompletionItemProvider.resolveCompletionItem)-function. However, properties that
+	 * are needed for the initial sorting and filtering, like `sortText`, `filterText`, `insertText`, and `range`, must
+	 * not be changed during resolve.
+	 *
+	 * Providers are asked for completions either explicitly by a user gesture or -depending on the configuration-
+	 * implicitly when typing words or trigger characters.
+	 */
+	export interface CompletionItemProvider<T extends CompletionItem = CompletionItem> {
+
+		/**
+		 * Provide completion items for the given position and document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @param context How the completion was triggered.
+		 *
+		 * @return An array of completions, a [completion list](#CompletionList), or a thenable that resolves to either.
+		 * The lack of a result can be signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideCompletionItems(document: TextDocument, position: Position, token: CancellationToken, context: CompletionContext): ProviderResult<T[] | CompletionList<T>>;
+
+		/**
+		 * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation)
+		 * or [details](#CompletionItem.detail).
+		 *
+		 * The editor will only resolve a completion item once.
+		 *
+		 * *Note* that this function is called when completion items are already showing in the UI or when an item has been
+		 * selected for insertion. Because of that, no property that changes the presentation (label, sorting, filtering etc)
+		 * or the (primary) insert behaviour ([insertText](#CompletionItem.insertText)) can be changed.
+		 *
+		 * This function may fill in [additionalTextEdits](#CompletionItem.additionalTextEdits). However, that means an item might be
+		 * inserted *before* resolving is done and in that case the editor will do a best effort to still apply those additional
+		 * text edits.
+		 *
+		 * @param item A completion item currently active in the UI.
+		 * @param token A cancellation token.
+		 * @return The resolved completion item or a thenable that resolves to of such. It is OK to return the given
+		 * `item`. When no result is returned, the given `item` will be used.
+		 */
+		resolveCompletionItem?(item: T, token: CancellationToken): ProviderResult<T>;
+	}
+
+	/**
+	 * A document link is a range in a text document that links to an internal or external resource, like another
+	 * text document or a web site.
+	 */
+	export class DocumentLink {
+
+		/**
+		 * The range this link applies to.
+		 */
+		range: Range;
+
+		/**
+		 * The uri this link points to.
+		 */
+		target?: Uri;
+
+		/**
+		 * The tooltip text when you hover over this link.
+		 *
+		 * If a tooltip is provided, is will be displayed in a string that includes instructions on how to
+		 * trigger the link, such as `{0} (ctrl + click)`. The specific instructions vary depending on OS,
+		 * user settings, and localization.
+		 */
+		tooltip?: string;
+
+		/**
+		 * Creates a new document link.
+		 *
+		 * @param range The range the document link applies to. Must not be empty.
+		 * @param target The uri the document link points to.
+		 */
+		constructor(range: Range, target?: Uri);
+	}
+
+	/**
+	 * The document link provider defines the contract between extensions and feature of showing
+	 * links in the editor.
+	 */
+	export interface DocumentLinkProvider<T extends DocumentLink = DocumentLink> {
+
+		/**
+		 * Provide links for the given document. Note that the editor ships with a default provider that detects
+		 * `http(s)` and `file` links.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return An array of [document links](#DocumentLink) or a thenable that resolves to such. The lack of a result
+		 * can be signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideDocumentLinks(document: TextDocument, token: CancellationToken): ProviderResult<T[]>;
+
+		/**
+		 * Given a link fill in its [target](#DocumentLink.target). This method is called when an incomplete
+		 * link is selected in the UI. Providers can implement this method and return incomplete links
+		 * (without target) from the [`provideDocumentLinks`](#DocumentLinkProvider.provideDocumentLinks) method which
+		 * often helps to improve performance.
+		 *
+		 * @param link The link that is to be resolved.
+		 * @param token A cancellation token.
+		 */
+		resolveDocumentLink?(link: T, token: CancellationToken): ProviderResult<T>;
+	}
+
+	/**
+	 * Represents a color in RGBA space.
+	 */
+	export class Color {
+
+		/**
+		 * The red component of this color in the range [0-1].
+		 */
+		readonly red: number;
+
+		/**
+		 * The green component of this color in the range [0-1].
+		 */
+		readonly green: number;
+
+		/**
+		 * The blue component of this color in the range [0-1].
+		 */
+		readonly blue: number;
+
+		/**
+		 * The alpha component of this color in the range [0-1].
+		 */
+		readonly alpha: number;
+
+		/**
+		 * Creates a new color instance.
+		 *
+		 * @param red The red component.
+		 * @param green The green component.
+		 * @param blue The blue component.
+		 * @param alpha The alpha component.
+		 */
+		constructor(red: number, green: number, blue: number, alpha: number);
+	}
+
+	/**
+	 * Represents a color range from a document.
+	 */
+	export class ColorInformation {
+
+		/**
+		 * The range in the document where this color appears.
+		 */
+		range: Range;
+
+		/**
+		 * The actual color value for this color range.
+		 */
+		color: Color;
+
+		/**
+		 * Creates a new color range.
+		 *
+		 * @param range The range the color appears in. Must not be empty.
+		 * @param color The value of the color.
+		 * @param format The format in which this color is currently formatted.
+		 */
+		constructor(range: Range, color: Color);
+	}
+
+	/**
+	 * A color presentation object describes how a [`color`](#Color) should be represented as text and what
+	 * edits are required to refer to it from source code.
+	 *
+	 * For some languages one color can have multiple presentations, e.g. css can represent the color red with
+	 * the constant `Red`, the hex-value `#ff0000`, or in rgba and hsla forms. In csharp other representations
+	 * apply, e.g. `System.Drawing.Color.Red`.
+	 */
+	export class ColorPresentation {
+
+		/**
+		 * The label of this color presentation. It will be shown on the color
+		 * picker header. By default this is also the text that is inserted when selecting
+		 * this color presentation.
+		 */
+		label: string;
+
+		/**
+		 * An [edit](#TextEdit) which is applied to a document when selecting
+		 * this presentation for the color.  When `falsy` the [label](#ColorPresentation.label)
+		 * is used.
+		 */
+		textEdit?: TextEdit;
+
+		/**
+		 * An optional array of additional [text edits](#TextEdit) that are applied when
+		 * selecting this color presentation. Edits must not overlap with the main [edit](#ColorPresentation.textEdit) nor with themselves.
+		 */
+		additionalTextEdits?: TextEdit[];
+
+		/**
+		 * Creates a new color presentation.
+		 *
+		 * @param label The label of this color presentation.
+		 */
+		constructor(label: string);
+	}
+
+	/**
+	 * The document color provider defines the contract between extensions and feature of
+	 * picking and modifying colors in the editor.
+	 */
+	export interface DocumentColorProvider {
+
+		/**
+		 * Provide colors for the given document.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return An array of [color information](#ColorInformation) or a thenable that resolves to such. The lack of a result
+		 * can be signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideDocumentColors(document: TextDocument, token: CancellationToken): ProviderResult<ColorInformation[]>;
+
+		/**
+		 * Provide [representations](#ColorPresentation) for a color.
+		 *
+		 * @param color The color to show and insert.
+		 * @param context A context object with additional information
+		 * @param token A cancellation token.
+		 * @return An array of color presentations or a thenable that resolves to such. The lack of a result
+		 * can be signaled by returning `undefined`, `null`, or an empty array.
+		 */
+		provideColorPresentations(color: Color, context: { document: TextDocument, range: Range }, token: CancellationToken): ProviderResult<ColorPresentation[]>;
+	}
+
+	/**
+	 * A line based folding range. To be valid, start and end line must be bigger than zero and smaller than the number of lines in the document.
+	 * Invalid ranges will be ignored.
+	 */
+	export class FoldingRange {
+
+		/**
+		 * The zero-based start line of the range to fold. The folded area starts after the line's last character.
+		 * To be valid, the end must be zero or larger and smaller than the number of lines in the document.
+		 */
+		start: number;
+
+		/**
+		 * The zero-based end line of the range to fold. The folded area ends with the line's last character.
+		 * To be valid, the end must be zero or larger and smaller than the number of lines in the document.
+		 */
+		end: number;
+
+		/**
+		 * Describes the [Kind](#FoldingRangeKind) of the folding range such as [Comment](#FoldingRangeKind.Comment) or
+		 * [Region](#FoldingRangeKind.Region). The kind is used to categorize folding ranges and used by commands
+		 * like 'Fold all comments'. See
+		 * [FoldingRangeKind](#FoldingRangeKind) for an enumeration of all kinds.
+		 * If not set, the range is originated from a syntax element.
+		 */
+		kind?: FoldingRangeKind;
+
+		/**
+		 * Creates a new folding range.
+		 *
+		 * @param start The start line of the folded range.
+		 * @param end The end line of the folded range.
+		 * @param kind The kind of the folding range.
+		 */
+		constructor(start: number, end: number, kind?: FoldingRangeKind);
+	}
+
+	/**
+	 * An enumeration of specific folding range kinds. The kind is an optional field of a [FoldingRange](#FoldingRange)
+	 * and is used to distinguish specific folding ranges such as ranges originated from comments. The kind is used by commands like
+	 * `Fold all comments` or `Fold all regions`.
+	 * If the kind is not set on the range, the range originated from a syntax element other than comments, imports or region markers.
+	 */
+	export enum FoldingRangeKind {
+		/**
+		 * Kind for folding range representing a comment.
+		 */
+		Comment = 1,
+		/**
+		 * Kind for folding range representing a import.
+		 */
+		Imports = 2,
+		/**
+		 * Kind for folding range representing regions originating from folding markers like `#region` and `#endregion`.
+		 */
+		Region = 3
+	}
+
+	/**
+	 * Folding context (for future use)
+	 */
+	export interface FoldingContext {
+	}
+
+	/**
+	 * The folding range provider interface defines the contract between extensions and
+	 * [Folding](https://code.visualstudio.com/docs/editor/codebasics#_folding) in the editor.
+	 */
+	export interface FoldingRangeProvider {
+
+		/**
+		 * An optional event to signal that the folding ranges from this provider have changed.
+		 */
+		onDidChangeFoldingRanges?: Event<void>;
+
+		/**
+		 * Returns a list of folding ranges or null and undefined if the provider
+		 * does not want to participate or was cancelled.
+		 * @param document The document in which the command was invoked.
+		 * @param context Additional context information (for future use)
+		 * @param token A cancellation token.
+		 */
+		provideFoldingRanges(document: TextDocument, context: FoldingContext, token: CancellationToken): ProviderResult<FoldingRange[]>;
+	}
+
+	/**
+	 * A selection range represents a part of a selection hierarchy. A selection range
+	 * may have a parent selection range that contains it.
+	 */
+	export class SelectionRange {
+
+		/**
+		 * The [range](#Range) of this selection range.
+		 */
+		range: Range;
+
+		/**
+		 * The parent selection range containing this range.
+		 */
+		parent?: SelectionRange;
+
+		/**
+		 * Creates a new selection range.
+		 *
+		 * @param range The range of the selection range.
+		 * @param parent The parent of the selection range.
+		 */
+		constructor(range: Range, parent?: SelectionRange);
+	}
+
+	export interface SelectionRangeProvider {
+		/**
+		 * Provide selection ranges for the given positions.
+		 *
+		 * Selection ranges should be computed individually and independent for each position. The editor will merge
+		 * and deduplicate ranges but providers must return hierarchies of selection ranges so that a range
+		 * is [contained](#Range.contains) by its parent.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param positions The positions at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @return Selection ranges or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideSelectionRanges(document: TextDocument, positions: Position[], token: CancellationToken): ProviderResult<SelectionRange[]>;
+	}
+
+	/**
+	 * Represents programming constructs like functions or constructors in the context
+	 * of call hierarchy.
+	 */
+	export class CallHierarchyItem {
+		/**
+		 * The name of this item.
+		 */
+		name: string;
+
+		/**
+		 * The kind of this item.
+		 */
+		kind: SymbolKind;
+
+		/**
+		 * Tags for this item.
+		 */
+		tags?: ReadonlyArray<SymbolTag>;
+
+		/**
+		 * More detail for this item, e.g. the signature of a function.
+		 */
+		detail?: string;
+
+		/**
+		 * The resource identifier of this item.
+		 */
+		uri: Uri;
+
+		/**
+		 * The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code.
+		 */
+		range: Range;
+
+		/**
+		 * The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function.
+		 * Must be contained by the [`range`](#CallHierarchyItem.range).
+		 */
+		selectionRange: Range;
+
+		/**
+		 * Creates a new call hierarchy item.
+		 */
+		constructor(kind: SymbolKind, name: string, detail: string, uri: Uri, range: Range, selectionRange: Range);
+	}
+
+	/**
+	 * Represents an incoming call, e.g. a caller of a method or constructor.
+	 */
+	export class CallHierarchyIncomingCall {
+
+		/**
+		 * The item that makes the call.
+		 */
+		from: CallHierarchyItem;
+
+		/**
+		 * The range at which at which the calls appears. This is relative to the caller
+		 * denoted by [`this.from`](#CallHierarchyIncomingCall.from).
+		 */
+		fromRanges: Range[];
+
+		/**
+		 * Create a new call object.
+		 *
+		 * @param item The item making the call.
+		 * @param fromRanges The ranges at which the calls appear.
+		 */
+		constructor(item: CallHierarchyItem, fromRanges: Range[]);
+	}
+
+	/**
+	 * Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc.
+	 */
+	export class CallHierarchyOutgoingCall {
+
+		/**
+		 * The item that is called.
+		 */
+		to: CallHierarchyItem;
+
+		/**
+		 * The range at which this item is called. This is the range relative to the caller, e.g the item
+		 * passed to [`provideCallHierarchyOutgoingCalls`](#CallHierarchyProvider.provideCallHierarchyOutgoingCalls)
+		 * and not [`this.to`](#CallHierarchyOutgoingCall.to).
+		 */
+		fromRanges: Range[];
+
+		/**
+		 * Create a new call object.
+		 *
+		 * @param item The item being called
+		 * @param fromRanges The ranges at which the calls appear.
+		 */
+		constructor(item: CallHierarchyItem, fromRanges: Range[]);
+	}
+
+	/**
+	 * The call hierarchy provider interface describes the contract between extensions
+	 * and the call hierarchy feature which allows to browse calls and caller of function,
+	 * methods, constructor etc.
+	 */
+	export interface CallHierarchyProvider {
+
+		/**
+		 * Bootstraps call hierarchy by returning the item that is denoted by the given document
+		 * and position. This item will be used as entry into the call graph. Providers should
+		 * return `undefined` or `null` when there is no item at the given location.
+		 *
+		 * @param document The document in which the command was invoked.
+		 * @param position The position at which the command was invoked.
+		 * @param token A cancellation token.
+		 * @returns A call hierarchy item or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		prepareCallHierarchy(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<CallHierarchyItem | CallHierarchyItem[]>;
+
+		/**
+		 * Provide all incoming calls for an item, e.g all callers for a method. In graph terms this describes directed
+		 * and annotated edges inside the call graph, e.g the given item is the starting node and the result is the nodes
+		 * that can be reached.
+		 *
+		 * @param item The hierarchy item for which incoming calls should be computed.
+		 * @param token A cancellation token.
+		 * @returns A set of incoming calls or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideCallHierarchyIncomingCalls(item: CallHierarchyItem, token: CancellationToken): ProviderResult<CallHierarchyIncomingCall[]>;
+
+		/**
+		 * Provide all outgoing calls for an item, e.g call calls to functions, methods, or constructors from the given item. In
+		 * graph terms this describes directed and annotated edges inside the call graph, e.g the given item is the starting
+		 * node and the result is the nodes that can be reached.
+		 *
+		 * @param item The hierarchy item for which outgoing calls should be computed.
+		 * @param token A cancellation token.
+		 * @returns A set of outgoing calls or a thenable that resolves to such. The lack of a result can be
+		 * signaled by returning `undefined` or `null`.
+		 */
+		provideCallHierarchyOutgoingCalls(item: CallHierarchyItem, token: CancellationToken): ProviderResult<CallHierarchyOutgoingCall[]>;
+	}
+
+	/**
+	 * Represents a list of ranges that can be edited together along with a word pattern to describe valid range contents.
+	 */
+	export class LinkedEditingRanges {
+		/**
+		 * Create a new linked editing ranges object.
+		 *
+		 * @param ranges A list of ranges that can be edited together
+		 * @param wordPattern An optional word pattern that describes valid contents for the given ranges
+		 */
+		constructor(ranges: Range[], wordPattern?: RegExp);
+
+		/**
+		 * A list of ranges that can be edited together. The ranges must have
+		 * identical length and text content. The ranges cannot overlap.
+		 */
+		readonly ranges: Range[];
+
+		/**
+		 * An optional word pattern that describes valid contents for the given ranges.
+		 * If no pattern is provided, the language configuration's word pattern will be used.
+		 */
+		readonly wordPattern?: RegExp;
+	}
+
+	/**
+	 * The linked editing range provider interface defines the contract between extensions and
+	 * the linked editing feature.
+	 */
+	export interface LinkedEditingRangeProvider {
+		/**
+		 * For a given position in a document, returns the range of the symbol at the position and all ranges
+		 * that have the same content. A change to one of the ranges can be applied to all other ranges if the new content
+		 * is valid. An optional word pattern can be returned with the result to describe valid contents.
+		 * If no result-specific word pattern is provided, the word pattern from the language configuration is used.
+		 *
+		 * @param document The document in which the provider was invoked.
+		 * @param position The position at which the provider was invoked.
+		 * @param token A cancellation token.
+		 * @return A list of ranges that can be edited together
+		 */
+		provideLinkedEditingRanges(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<LinkedEditingRanges>;
+	}
+
+	/**
+	 * A tuple of two characters, like a pair of
+	 * opening and closing brackets.
+	 */
+	export type CharacterPair = [string, string];
+
+	/**
+	 * Describes how comments for a language work.
+	 */
+	export interface CommentRule {
+
+		/**
+		 * The line comment token, like `// this is a comment`
+		 */
+		lineComment?: string;
+
+		/**
+		 * The block comment character pair, like `/* block comment *&#47;`
+		 */
+		blockComment?: CharacterPair;
+	}
+
+	/**
+	 * Describes indentation rules for a language.
+	 */
+	export interface IndentationRule {
+		/**
+		 * If a line matches this pattern, then all the lines after it should be unindented once (until another rule matches).
+		 */
+		decreaseIndentPattern: RegExp;
+		/**
+		 * If a line matches this pattern, then all the lines after it should be indented once (until another rule matches).
+		 */
+		increaseIndentPattern: RegExp;
+		/**
+		 * If a line matches this pattern, then **only the next line** after it should be indented once.
+		 */
+		indentNextLinePattern?: RegExp;
+		/**
+		 * If a line matches this pattern, then its indentation should not be changed and it should not be evaluated against the other rules.
+		 */
+		unIndentedLinePattern?: RegExp;
+	}
+
+	/**
+	 * Describes what to do with the indentation when pressing Enter.
+	 */
+	export enum IndentAction {
+		/**
+		 * Insert new line and copy the previous line's indentation.
+		 */
+		None = 0,
+		/**
+		 * Insert new line and indent once (relative to the previous line's indentation).
+		 */
+		Indent = 1,
+		/**
+		 * Insert two new lines:
+		 *  - the first one indented which will hold the cursor
+		 *  - the second one at the same indentation level
+		 */
+		IndentOutdent = 2,
+		/**
+		 * Insert new line and outdent once (relative to the previous line's indentation).
+		 */
+		Outdent = 3
+	}
+
+	/**
+	 * Describes what to do when pressing Enter.
+	 */
+	export interface EnterAction {
+		/**
+		 * Describe what to do with the indentation.
+		 */
+		indentAction: IndentAction;
+		/**
+		 * Describes text to be appended after the new line and after the indentation.
+		 */
+		appendText?: string;
+		/**
+		 * Describes the number of characters to remove from the new line's indentation.
+		 */
+		removeText?: number;
+	}
+
+	/**
+	 * Describes a rule to be evaluated when pressing Enter.
+	 */
+	export interface OnEnterRule {
+		/**
+		 * This rule will only execute if the text before the cursor matches this regular expression.
+		 */
+		beforeText: RegExp;
+		/**
+		 * This rule will only execute if the text after the cursor matches this regular expression.
+		 */
+		afterText?: RegExp;
+		/**
+		 * This rule will only execute if the text above the current line matches this regular expression.
+		 */
+		previousLineText?: RegExp;
+		/**
+		 * The action to execute.
+		 */
+		action: EnterAction;
+	}
+
+	/**
+	 * The language configuration interfaces defines the contract between extensions
+	 * and various editor features, like automatic bracket insertion, automatic indentation etc.
+	 */
+	export interface LanguageConfiguration {
+		/**
+		 * The language's comment settings.
+		 */
+		comments?: CommentRule;
+		/**
+		 * The language's brackets.
+		 * This configuration implicitly affects pressing Enter around these brackets.
+		 */
+		brackets?: CharacterPair[];
+		/**
+		 * The language's word definition.
+		 * If the language supports Unicode identifiers (e.g. JavaScript), it is preferable
+		 * to provide a word definition that uses exclusion of known separators.
+		 * e.g.: A regex that matches anything except known separators (and dot is allowed to occur in a floating point number):
+		 *   /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g
+		 */
+		wordPattern?: RegExp;
+		/**
+		 * The language's indentation settings.
+		 */
+		indentationRules?: IndentationRule;
+		/**
+		 * The language's rules to be evaluated when pressing Enter.
+		 */
+		onEnterRules?: OnEnterRule[];
+
+		/**
+		 * **Deprecated** Do not use.
+		 *
+		 * @deprecated Will be replaced by a better API soon.
+		 */
+		__electricCharacterSupport?: {
+			/**
+			 * This property is deprecated and will be **ignored** from
+			 * the editor.
+			 * @deprecated
+			 */
+			brackets?: any;
+			/**
+			 * This property is deprecated and not fully supported anymore by
+			 * the editor (scope and lineStart are ignored).
+			 * Use the autoClosingPairs property in the language configuration file instead.
+			 * @deprecated
+			 */
+			docComment?: {
+				scope: string;
+				open: string;
+				lineStart: string;
+				close?: string;
+			};
+		};
+
+		/**
+		 * **Deprecated** Do not use.
+		 *
+		 * @deprecated * Use the autoClosingPairs property in the language configuration file instead.
+		 */
+		__characterPairSupport?: {
+			autoClosingPairs: {
+				open: string;
+				close: string;
+				notIn?: string[];
+			}[];
+		};
+	}
+
+	/**
+	 * The configuration target
+	 */
+	export enum ConfigurationTarget {
+		/**
+		 * Global configuration
+		*/
+		Global = 1,
+
+		/**
+		 * Workspace configuration
+		 */
+		Workspace = 2,
+
+		/**
+		 * Workspace folder configuration
+		 */
+		WorkspaceFolder = 3
+	}
+
+	/**
+	 * Represents the configuration. It is a merged view of
+	 *
+	 * - *Default Settings*
+	 * - *Global (User) Settings*
+	 * - *Workspace settings*
+	 * - *Workspace Folder settings* - From one of the [Workspace Folders](#workspace.workspaceFolders) under which requested resource belongs to.
+	 * - *Language settings* - Settings defined under requested language.
+	 *
+	 * The *effective* value (returned by [`get`](#WorkspaceConfiguration.get)) is computed by overriding or merging the values in the following order.
+	 *
+	 * ```
+	 * `defaultValue` (if defined in `package.json` otherwise derived from the value's type)
+	 * `globalValue` (if defined)
+	 * `workspaceValue` (if defined)
+	 * `workspaceFolderValue` (if defined)
+	 * `defaultLanguageValue` (if defined)
+	 * `globalLanguageValue` (if defined)
+	 * `workspaceLanguageValue` (if defined)
+	 * `workspaceFolderLanguageValue` (if defined)
+	 * ```
+	 * **Note:** Only `object` value types are merged and all other value types are overridden.
+	 *
+	 * Example 1: Overriding
+	 *
+	 * ```ts
+	 * defaultValue = 'on';
+	 * globalValue = 'relative'
+	 * workspaceFolderValue = 'off'
+	 * value = 'off'
+	 * ```
+	 *
+	 * Example 2: Language Values
+	 *
+	 * ```ts
+	 * defaultValue = 'on';
+	 * globalValue = 'relative'
+	 * workspaceFolderValue = 'off'
+	 * globalLanguageValue = 'on'
+	 * value = 'on'
+	 * ```
+	 *
+	 * Example 3: Object Values
+	 *
+	 * ```ts
+	 * defaultValue = { "a": 1, "b": 2 };
+	 * globalValue = { "b": 3, "c": 4 };
+	 * value = { "a": 1, "b": 3, "c": 4 };
+	 * ```
+	 *
+	 * *Note:* Workspace and Workspace Folder configurations contains `launch` and `tasks` settings. Their basename will be
+	 * part of the section identifier. The following snippets shows how to retrieve all configurations
+	 * from `launch.json`:
+	 *
+	 * ```ts
+	 * // launch.json configuration
+	 * const config = workspace.getConfiguration('launch', vscode.workspace.workspaceFolders[0].uri);
+	 *
+	 * // retrieve values
+	 * const values = config.get('configurations');
+	 * ```
+	 *
+	 * Refer to [Settings](https://code.visualstudio.com/docs/getstarted/settings) for more information.
+	 */
+	export interface WorkspaceConfiguration {
+
+		/**
+		 * Return a value from this configuration.
+		 *
+		 * @param section Configuration name, supports _dotted_ names.
+		 * @return The value `section` denotes or `undefined`.
+		 */
+		get<T>(section: string): T | undefined;
+
+		/**
+		 * Return a value from this configuration.
+		 *
+		 * @param section Configuration name, supports _dotted_ names.
+		 * @param defaultValue A value should be returned when no value could be found, is `undefined`.
+		 * @return The value `section` denotes or the default.
+		 */
+		get<T>(section: string, defaultValue: T): T;
+
+		/**
+		 * Check if this configuration has a certain value.
+		 *
+		 * @param section Configuration name, supports _dotted_ names.
+		 * @return `true` if the section doesn't resolve to `undefined`.
+		 */
+		has(section: string): boolean;
+
+		/**
+		 * Retrieve all information about a configuration setting. A configuration value
+		 * often consists of a *default* value, a global or installation-wide value,
+		 * a workspace-specific value, folder-specific value
+		 * and language-specific values (if [WorkspaceConfiguration](#WorkspaceConfiguration) is scoped to a language).
+		 *
+		 * Also provides all language ids under which the given configuration setting is defined.
+		 *
+		 * *Note:* The configuration name must denote a leaf in the configuration tree
+		 * (`editor.fontSize` vs `editor`) otherwise no result is returned.
+		 *
+		 * @param section Configuration name, supports _dotted_ names.
+		 * @return Information about a configuration setting or `undefined`.
+		 */
+		inspect<T>(section: string): {
+			key: string;
+
+			defaultValue?: T;
+			globalValue?: T;
+			workspaceValue?: T,
+			workspaceFolderValue?: T,
+
+			defaultLanguageValue?: T;
+			globalLanguageValue?: T;
+			workspaceLanguageValue?: T;
+			workspaceFolderLanguageValue?: T;
+
+			languageIds?: string[];
+
+		} | undefined;
+
+		/**
+		 * Update a configuration value. The updated configuration values are persisted.
+		 *
+		 * A value can be changed in
+		 *
+		 * - [Global settings](#ConfigurationTarget.Global): Changes the value for all instances of the editor.
+		 * - [Workspace settings](#ConfigurationTarget.Workspace): Changes the value for current workspace, if available.
+		 * - [Workspace folder settings](#ConfigurationTarget.WorkspaceFolder): Changes the value for settings from one of the [Workspace Folders](#workspace.workspaceFolders) under which the requested resource belongs to.
+		 * - Language settings: Changes the value for the requested languageId.
+		 *
+		 * *Note:* To remove a configuration value use `undefined`, like so: `config.update('somekey', undefined)`
+		 *
+		 * @param section Configuration name, supports _dotted_ names.
+		 * @param value The new value.
+		 * @param configurationTarget The [configuration target](#ConfigurationTarget) or a boolean value.
+		 *	- If `true` updates [Global settings](#ConfigurationTarget.Global).
+		 *	- If `false` updates [Workspace settings](#ConfigurationTarget.Workspace).
+		 *	- If `undefined` or `null` updates to [Workspace folder settings](#ConfigurationTarget.WorkspaceFolder) if configuration is resource specific,
+		 * 	otherwise to [Workspace settings](#ConfigurationTarget.Workspace).
+		 * @param overrideInLanguage Whether to update the value in the scope of requested languageId or not.
+		 *	- If `true` updates the value under the requested languageId.
+		 *	- If `undefined` updates the value under the requested languageId only if the configuration is defined for the language.
+		 * @throws error while updating
+		 *	- configuration which is not registered.
+		 *	- window configuration to workspace folder
+		 *	- configuration to workspace or workspace folder when no workspace is opened.
+		 *	- configuration to workspace folder when there is no workspace folder settings.
+		 *	- configuration to workspace folder when [WorkspaceConfiguration](#WorkspaceConfiguration) is not scoped to a resource.
+		 */
+		update(section: string, value: any, configurationTarget?: ConfigurationTarget | boolean, overrideInLanguage?: boolean): Thenable<void>;
+
+		/**
+		 * Readable dictionary that backs this configuration.
+		 */
+		readonly [key: string]: any;
+	}
+
+	/**
+	 * Represents a location inside a resource, such as a line
+	 * inside a text file.
+	 */
+	export class Location {
+
+		/**
+		 * The resource identifier of this location.
+		 */
+		uri: Uri;
+
+		/**
+		 * The document range of this location.
+		 */
+		range: Range;
+
+		/**
+		 * Creates a new location object.
+		 *
+		 * @param uri The resource identifier.
+		 * @param rangeOrPosition The range or position. Positions will be converted to an empty range.
+		 */
+		constructor(uri: Uri, rangeOrPosition: Range | Position);
+	}
+
+	/**
+	 * Represents the connection of two locations. Provides additional metadata over normal [locations](#Location),
+	 * including an origin range.
+	 */
+	export interface LocationLink {
+		/**
+		 * Span of the origin of this link.
+		 *
+		 * Used as the underlined span for mouse definition hover. Defaults to the word range at
+		 * the definition position.
+		 */
+		originSelectionRange?: Range;
+
+		/**
+		 * The target resource identifier of this link.
+		 */
+		targetUri: Uri;
+
+		/**
+		 * The full target range of this link.
+		 */
+		targetRange: Range;
+
+		/**
+		 * The span of this link.
+		 */
+		targetSelectionRange?: Range;
+	}
+
+	/**
+	 * The event that is fired when diagnostics change.
+	 */
+	export interface DiagnosticChangeEvent {
+
+		/**
+		 * An array of resources for which diagnostics have changed.
+		 */
+		readonly uris: ReadonlyArray<Uri>;
+	}
+
+	/**
+	 * Represents the severity of diagnostics.
+	 */
+	export enum DiagnosticSeverity {
+
+		/**
+		 * Something not allowed by the rules of a language or other means.
+		 */
+		Error = 0,
+
+		/**
+		 * Something suspicious but allowed.
+		 */
+		Warning = 1,
+
+		/**
+		 * Something to inform about but not a problem.
+		 */
+		Information = 2,
+
+		/**
+		 * Something to hint to a better way of doing it, like proposing
+		 * a refactoring.
+		 */
+		Hint = 3
+	}
+
+	/**
+	 * Represents a related message and source code location for a diagnostic. This should be
+	 * used to point to code locations that cause or related to a diagnostics, e.g. when duplicating
+	 * a symbol in a scope.
+	 */
+	export class DiagnosticRelatedInformation {
+
+		/**
+		 * The location of this related diagnostic information.
+		 */
+		location: Location;
+
+		/**
+		 * The message of this related diagnostic information.
+		 */
+		message: string;
+
+		/**
+		 * Creates a new related diagnostic information object.
+		 *
+		 * @param location The location.
+		 * @param message The message.
+		 */
+		constructor(location: Location, message: string);
+	}
+
+	/**
+	 * Additional metadata about the type of a diagnostic.
+	 */
+	export enum DiagnosticTag {
+		/**
+		 * Unused or unnecessary code.
+		 *
+		 * Diagnostics with this tag are rendered faded out. The amount of fading
+		 * is controlled by the `"editorUnnecessaryCode.opacity"` theme color. For
+		 * example, `"editorUnnecessaryCode.opacity": "#000000c0"` will render the
+		 * code with 75% opacity. For high contrast themes, use the
+		 * `"editorUnnecessaryCode.border"` theme color to underline unnecessary code
+		 * instead of fading it out.
+		 */
+		Unnecessary = 1,
+
+		/**
+		 * Deprecated or obsolete code.
+		 *
+		 * Diagnostics with this tag are rendered with a strike through.
+		 */
+		Deprecated = 2,
+	}
+
+	/**
+	 * Represents a diagnostic, such as a compiler error or warning. Diagnostic objects
+	 * are only valid in the scope of a file.
+	 */
+	export class Diagnostic {
+
+		/**
+		 * The range to which this diagnostic applies.
+		 */
+		range: Range;
+
+		/**
+		 * The human-readable message.
+		 */
+		message: string;
+
+		/**
+		 * The severity, default is [error](#DiagnosticSeverity.Error).
+		 */
+		severity: DiagnosticSeverity;
+
+		/**
+		 * A human-readable string describing the source of this
+		 * diagnostic, e.g. 'typescript' or 'super lint'.
+		 */
+		source?: string;
+
+		/**
+		 * A code or identifier for this diagnostic.
+		 * Should be used for later processing, e.g. when providing [code actions](#CodeActionContext).
+		 */
+		code?: string | number | {
+			/**
+			 * A code or identifier for this diagnostic.
+			 * Should be used for later processing, e.g. when providing [code actions](#CodeActionContext).
+			 */
+			value: string | number;
+
+			/**
+			 * A target URI to open with more information about the diagnostic error.
+			 */
+			target: Uri;
+		};
+
+		/**
+		 * An array of related diagnostic information, e.g. when symbol-names within
+		 * a scope collide all definitions can be marked via this property.
+		 */
+		relatedInformation?: DiagnosticRelatedInformation[];
+
+		/**
+		 * Additional metadata about the diagnostic.
+		 */
+		tags?: DiagnosticTag[];
+
+		/**
+		 * Creates a new diagnostic object.
+		 *
+		 * @param range The range to which this diagnostic applies.
+		 * @param message The human-readable message.
+		 * @param severity The severity, default is [error](#DiagnosticSeverity.Error).
+		 */
+		constructor(range: Range, message: string, severity?: DiagnosticSeverity);
+	}
+
+	/**
+	 * A diagnostics collection is a container that manages a set of
+	 * [diagnostics](#Diagnostic). Diagnostics are always scopes to a
+	 * diagnostics collection and a resource.
+	 *
+	 * To get an instance of a `DiagnosticCollection` use
+	 * [createDiagnosticCollection](#languages.createDiagnosticCollection).
+	 */
+	export interface DiagnosticCollection {
+
+		/**
+		 * The name of this diagnostic collection, for instance `typescript`. Every diagnostic
+		 * from this collection will be associated with this name. Also, the task framework uses this
+		 * name when defining [problem matchers](https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher).
+		 */
+		readonly name: string;
+
+		/**
+		 * Assign diagnostics for given resource. Will replace
+		 * existing diagnostics for that resource.
+		 *
+		 * @param uri A resource identifier.
+		 * @param diagnostics Array of diagnostics or `undefined`
+		 */
+		set(uri: Uri, diagnostics: ReadonlyArray<Diagnostic> | undefined): void;
+
+		/**
+		 * Replace diagnostics for multiple resources in this collection.
+		 *
+		 *  _Note_ that multiple tuples of the same uri will be merged, e.g
+		 * `[[file1, [d1]], [file1, [d2]]]` is equivalent to `[[file1, [d1, d2]]]`.
+		 * If a diagnostics item is `undefined` as in `[file1, undefined]`
+		 * all previous but not subsequent diagnostics are removed.
+		 *
+		 * @param entries An array of tuples, like `[[file1, [d1, d2]], [file2, [d3, d4, d5]]]`, or `undefined`.
+		 */
+		set(entries: ReadonlyArray<[Uri, ReadonlyArray<Diagnostic> | undefined]>): void;
+
+		/**
+		 * Remove all diagnostics from this collection that belong
+		 * to the provided `uri`. The same as `#set(uri, undefined)`.
+		 *
+		 * @param uri A resource identifier.
+		 */
+		delete(uri: Uri): void;
+
+		/**
+		 * Remove all diagnostics from this collection. The same
+		 * as calling `#set(undefined)`;
+		 */
+		clear(): void;
+
+		/**
+		 * Iterate over each entry in this collection.
+		 *
+		 * @param callback Function to execute for each entry.
+		 * @param thisArg The `this` context used when invoking the handler function.
+		 */
+		forEach(callback: (uri: Uri, diagnostics: ReadonlyArray<Diagnostic>, collection: DiagnosticCollection) => any, thisArg?: any): void;
+
+		/**
+		 * Get the diagnostics for a given resource. *Note* that you cannot
+		 * modify the diagnostics-array returned from this call.
+		 *
+		 * @param uri A resource identifier.
+		 * @returns An immutable array of [diagnostics](#Diagnostic) or `undefined`.
+		 */
+		get(uri: Uri): ReadonlyArray<Diagnostic> | undefined;
+
+		/**
+		 * Check if this collection contains diagnostics for a
+		 * given resource.
+		 *
+		 * @param uri A resource identifier.
+		 * @returns `true` if this collection has diagnostic for the given resource.
+		 */
+		has(uri: Uri): boolean;
+
+		/**
+		 * Dispose and free associated resources. Calls
+		 * [clear](#DiagnosticCollection.clear).
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Denotes a location of an editor in the window. Editors can be arranged in a grid
+	 * and each column represents one editor location in that grid by counting the editors
+	 * in order of their appearance.
+	 */
+	export enum ViewColumn {
+		/**
+		 * A *symbolic* editor column representing the currently active column. This value
+		 * can be used when opening editors, but the *resolved* [viewColumn](#TextEditor.viewColumn)-value
+		 * of editors will always be `One`, `Two`, `Three`,... or `undefined` but never `Active`.
+		 */
+		Active = -1,
+		/**
+		 * A *symbolic* editor column representing the column to the side of the active one. This value
+		 * can be used when opening editors, but the *resolved* [viewColumn](#TextEditor.viewColumn)-value
+		 * of editors will always be `One`, `Two`, `Three`,... or `undefined` but never `Beside`.
+		 */
+		Beside = -2,
+		/**
+		 * The first editor column.
+		 */
+		One = 1,
+		/**
+		 * The second editor column.
+		 */
+		Two = 2,
+		/**
+		 * The third editor column.
+		 */
+		Three = 3,
+		/**
+		 * The fourth editor column.
+		 */
+		Four = 4,
+		/**
+		 * The fifth editor column.
+		 */
+		Five = 5,
+		/**
+		 * The sixth editor column.
+		 */
+		Six = 6,
+		/**
+		 * The seventh editor column.
+		 */
+		Seven = 7,
+		/**
+		 * The eighth editor column.
+		 */
+		Eight = 8,
+		/**
+		 * The ninth editor column.
+		 */
+		Nine = 9
+	}
+
+	/**
+	 * An output channel is a container for readonly textual information.
+	 *
+	 * To get an instance of an `OutputChannel` use
+	 * [createOutputChannel](#window.createOutputChannel).
+	 */
+	export interface OutputChannel {
+
+		/**
+		 * The human-readable name of this output channel.
+		 */
+		readonly name: string;
+
+		/**
+		 * Append the given value to the channel.
+		 *
+		 * @param value A string, falsy values will not be printed.
+		 */
+		append(value: string): void;
+
+		/**
+		 * Append the given value and a line feed character
+		 * to the channel.
+		 *
+		 * @param value A string, falsy values will be printed.
+		 */
+		appendLine(value: string): void;
+
+		/**
+		 * Removes all output from the channel.
+		 */
+		clear(): void;
+
+		/**
+		 * Reveal this channel in the UI.
+		 *
+		 * @param preserveFocus When `true` the channel will not take focus.
+		 */
+		show(preserveFocus?: boolean): void;
+
+		/**
+		 * Reveal this channel in the UI.
+		 *
+		 * @deprecated Use the overload with just one parameter (`show(preserveFocus?: boolean): void`).
+		 *
+		 * @param column This argument is **deprecated** and will be ignored.
+		 * @param preserveFocus When `true` the channel will not take focus.
+		 */
+		show(column?: ViewColumn, preserveFocus?: boolean): void;
+
+		/**
+		 * Hide this channel from the UI.
+		 */
+		hide(): void;
+
+		/**
+		 * Dispose and free associated resources.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Accessibility information which controls screen reader behavior.
+	 */
+	export interface AccessibilityInformation {
+		/**
+		 * Label to be read out by a screen reader once the item has focus.
+		 */
+		label: string;
+
+		/**
+		 * Role of the widget which defines how a screen reader interacts with it.
+		 * The role should be set in special cases when for example a tree-like element behaves like a checkbox.
+		 * If role is not specified VS Code will pick the appropriate role automatically.
+		 * More about aria roles can be found here https://w3c.github.io/aria/#widget_roles
+		 */
+		role?: string;
+	}
+
+	/**
+	 * Represents the alignment of status bar items.
+	 */
+	export enum StatusBarAlignment {
+
+		/**
+		 * Aligned to the left side.
+		 */
+		Left = 1,
+
+		/**
+		 * Aligned to the right side.
+		 */
+		Right = 2
+	}
+
+	/**
+	 * A status bar item is a status bar contribution that can
+	 * show text and icons and run a command on click.
+	 */
+	export interface StatusBarItem {
+
+		/**
+		 * The alignment of this item.
+		 */
+		readonly alignment: StatusBarAlignment;
+
+		/**
+		 * The priority of this item. Higher value means the item should
+		 * be shown more to the left.
+		 */
+		readonly priority?: number;
+
+		/**
+		 * The text to show for the entry. You can embed icons in the text by leveraging the syntax:
+		 *
+		 * `My text $(icon-name) contains icons like $(icon-name) this one.`
+		 *
+		 * Where the icon-name is taken from the ThemeIcon [icon set](https://code.visualstudio.com/api/references/icons-in-labels#icon-listing), e.g.
+		 * `light-bulb`, `thumbsup`, `zap` etc.
+		 */
+		text: string;
+
+		/**
+		 * The tooltip text when you hover over this entry.
+		 */
+		tooltip: string | undefined;
+
+		/**
+		 * The foreground color for this entry.
+		 */
+		color: string | ThemeColor | undefined;
+
+		/**
+		 * The background color for this entry.
+		 *
+		 * *Note*: only `new ThemeColor('statusBarItem.errorBackground')` is
+		 * supported for now. More background colors may be supported in the
+		 * future.
+		 *
+		 * *Note*: when a background color is set, the statusbar may override
+		 * the `color` choice to ensure the entry is readable in all themes.
+		 */
+		backgroundColor: ThemeColor | undefined;
+
+		/**
+		 * [`Command`](#Command) or identifier of a command to run on click.
+		 *
+		 * The command must be [known](#commands.getCommands).
+		 *
+		 * Note that if this is a [`Command`](#Command) object, only the [`command`](#Command.command) and [`arguments`](#Command.arguments)
+		 * are used by VS Code.
+		 */
+		command: string | Command | undefined;
+
+		/**
+		 * Accessibility information used when screen reader interacts with this StatusBar item
+		 */
+		accessibilityInformation?: AccessibilityInformation;
+
+		/**
+		 * Shows the entry in the status bar.
+		 */
+		show(): void;
+
+		/**
+		 * Hide the entry in the status bar.
+		 */
+		hide(): void;
+
+		/**
+		 * Dispose and free associated resources. Call
+		 * [hide](#StatusBarItem.hide).
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Defines a generalized way of reporting progress updates.
+	 */
+	export interface Progress<T> {
+
+		/**
+		 * Report a progress update.
+		 * @param value A progress item, like a message and/or an
+		 * report on how much work finished
+		 */
+		report(value: T): void;
+	}
+
+	/**
+	 * An individual terminal instance within the integrated terminal.
+	 */
+	export interface Terminal {
+
+		/**
+		 * The name of the terminal.
+		 */
+		readonly name: string;
+
+		/**
+		 * The process ID of the shell process.
+		 */
+		readonly processId: Thenable<number | undefined>;
+
+		/**
+		 * The object used to initialize the terminal, this is useful for example to detecting the
+		 * shell type of when the terminal was not launched by this extension or for detecting what
+		 * folder the shell was launched in.
+		 */
+		readonly creationOptions: Readonly<TerminalOptions | ExtensionTerminalOptions>;
+
+		/**
+		 * The exit status of the terminal, this will be undefined while the terminal is active.
+		 *
+		 * **Example:** Show a notification with the exit code when the terminal exits with a
+		 * non-zero exit code.
+		 * ```typescript
+		 * window.onDidCloseTerminal(t => {
+		 *   if (t.exitStatus && t.exitStatus.code) {
+		 *   	vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
+		 *   }
+		 * });
+		 * ```
+		 */
+		readonly exitStatus: TerminalExitStatus | undefined;
+
+		/**
+		 * Send text to the terminal. The text is written to the stdin of the underlying pty process
+		 * (shell) of the terminal.
+		 *
+		 * @param text The text to send.
+		 * @param addNewLine Whether to add a new line to the text being sent, this is normally
+		 * required to run a command in the terminal. The character(s) added are \n or \r\n
+		 * depending on the platform. This defaults to `true`.
+		 */
+		sendText(text: string, addNewLine?: boolean): void;
+
+		/**
+		 * Show the terminal panel and reveal this terminal in the UI.
+		 *
+		 * @param preserveFocus When `true` the terminal will not take focus.
+		 */
+		show(preserveFocus?: boolean): void;
+
+		/**
+		 * Hide the terminal panel if this terminal is currently showing.
+		 */
+		hide(): void;
+
+		/**
+		 * Dispose and free associated resources.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Provides information on a line in a terminal in order to provide links for it.
+	 */
+	export interface TerminalLinkContext {
+		/**
+		 * This is the text from the unwrapped line in the terminal.
+		 */
+		line: string;
+
+		/**
+		 * The terminal the link belongs to.
+		 */
+		terminal: Terminal;
+	}
+
+	/**
+	 * A provider that enables detection and handling of links within terminals.
+	 */
+	export interface TerminalLinkProvider<T extends TerminalLink = TerminalLink> {
+		/**
+		 * Provide terminal links for the given context. Note that this can be called multiple times
+		 * even before previous calls resolve, make sure to not share global objects (eg. `RegExp`)
+		 * that could have problems when asynchronous usage may overlap.
+		 * @param context Information about what links are being provided for.
+		 * @param token A cancellation token.
+		 * @return A list of terminal links for the given line.
+		 */
+		provideTerminalLinks(context: TerminalLinkContext, token: CancellationToken): ProviderResult<T[]>;
+
+		/**
+		 * Handle an activated terminal link.
+		 * @param link The link to handle.
+		 */
+		handleTerminalLink(link: T): ProviderResult<void>;
+	}
+
+	/**
+	 * A link on a terminal line.
+	 */
+	export interface TerminalLink {
+		/**
+		 * The start index of the link on [TerminalLinkContext.line](#TerminalLinkContext.line].
+		 */
+		startIndex: number;
+
+		/**
+		 * The length of the link on [TerminalLinkContext.line](#TerminalLinkContext.line]
+		 */
+		length: number;
+
+		/**
+		 * The tooltip text when you hover over this link.
+		 *
+		 * If a tooltip is provided, is will be displayed in a string that includes instructions on
+		 * how to trigger the link, such as `{0} (ctrl + click)`. The specific instructions vary
+		 * depending on OS, user settings, and localization.
+		 */
+		tooltip?: string;
+	}
+
+	/**
+	 * A file decoration represents metadata that can be rendered with a file.
+	 */
+	export class FileDecoration {
+
+		/**
+		 * A very short string that represents this decoration.
+		 */
+		badge?: string;
+
+		/**
+		 * A human-readable tooltip for this decoration.
+		 */
+		tooltip?: string;
+
+		/**
+		 * The color of this decoration.
+		 */
+		color?: ThemeColor;
+
+		/**
+		 * A flag expressing that this decoration should be
+		 * propagated to its parents.
+		 */
+		propagate?: boolean;
+
+		/**
+		 * Creates a new decoration.
+		 *
+		 * @param badge A letter that represents the decoration.
+		 * @param tooltip The tooltip of the decoration.
+		 * @param color The color of the decoration.
+		 */
+		constructor(badge?: string, tooltip?: string, color?: ThemeColor);
+	}
+
+	/**
+	 * The decoration provider interfaces defines the contract between extensions and
+	 * file decorations.
+	 */
+	export interface FileDecorationProvider {
+
+		/**
+		 * An optional event to signal that decorations for one or many files have changed.
+		 *
+		 * *Note* that this event should be used to propagate information about children.
+		 *
+		 * @see [EventEmitter](#EventEmitter)
+		 */
+		onDidChangeFileDecorations?: Event<undefined | Uri | Uri[]>;
+
+		/**
+		 * Provide decorations for a given uri.
+		 *
+		 * *Note* that this function is only called when a file gets rendered in the UI.
+		 * This means a decoration from a descendent that propagates upwards must be signaled
+		 * to the editor via the [onDidChangeFileDecorations](#FileDecorationProvider.onDidChangeFileDecorations)-event.
+		 *
+		 * @param uri The uri of the file to provide a decoration for.
+		 * @param token A cancellation token.
+		 * @returns A decoration or a thenable that resolves to such.
+		 */
+		provideFileDecoration(uri: Uri, token: CancellationToken): ProviderResult<FileDecoration>;
+	}
+
+
+	/**
+	 * In a remote window the extension kind describes if an extension
+	 * runs where the UI (window) runs or if an extension runs remotely.
+	 */
+	export enum ExtensionKind {
+
+		/**
+		 * Extension runs where the UI runs.
+		 */
+		UI = 1,
+
+		/**
+		 * Extension runs where the remote extension host runs.
+		 */
+		Workspace = 2
+	}
+
+	/**
+	 * Represents an extension.
+	 *
+	 * To get an instance of an `Extension` use [getExtension](#extensions.getExtension).
+	 */
+	export interface Extension<T> {
+
+		/**
+		 * The canonical extension identifier in the form of: `publisher.name`.
+		 */
+		readonly id: string;
+
+		/**
+		 * The uri of the directory containing the extension.
+		 */
+		readonly extensionUri: Uri;
+
+		/**
+		 * The absolute file path of the directory containing this extension. Shorthand
+		 * notation for [Extension.extensionUri.fsPath](#Extension.extensionUri) (independent of the uri scheme).
+		 */
+		readonly extensionPath: string;
+
+		/**
+		 * `true` if the extension has been activated.
+		 */
+		readonly isActive: boolean;
+
+		/**
+		 * The parsed contents of the extension's package.json.
+		 */
+		readonly packageJSON: any;
+
+		/**
+		 * The extension kind describes if an extension runs where the UI runs
+		 * or if an extension runs where the remote extension host runs. The extension kind
+		 * is defined in the `package.json`-file of extensions but can also be refined
+		 * via the `remote.extensionKind`-setting. When no remote extension host exists,
+		 * the value is [`ExtensionKind.UI`](#ExtensionKind.UI).
+		 */
+		extensionKind: ExtensionKind;
+
+		/**
+		 * The public API exported by this extension. It is an invalid action
+		 * to access this field before this extension has been activated.
+		 */
+		readonly exports: T;
+
+		/**
+		 * Activates this extension and returns its public API.
+		 *
+		 * @return A promise that will resolve when this extension has been activated.
+		 */
+		activate(): Thenable<T>;
+	}
+
+	/**
+	 * The ExtensionMode is provided on the `ExtensionContext` and indicates the
+	 * mode the specific extension is running in.
+	 */
+	export enum ExtensionMode {
+		/**
+		 * The extension is installed normally (for example, from the marketplace
+		 * or VSIX) in VS Code.
+		 */
+		Production = 1,
+
+		/**
+		 * The extension is running from an `--extensionDevelopmentPath` provided
+		 * when launching VS Code.
+		 */
+		Development = 2,
+
+		/**
+		 * The extension is running from an `--extensionTestsPath` and
+		 * the extension host is running unit tests.
+		 */
+		Test = 3,
+	}
+
+	/**
+	 * An extension context is a collection of utilities private to an
+	 * extension.
+	 *
+	 * An instance of an `ExtensionContext` is provided as the first
+	 * parameter to the `activate`-call of an extension.
+	 */
+	export interface ExtensionContext {
+
+		/**
+		 * An array to which disposables can be added. When this
+		 * extension is deactivated the disposables will be disposed.
+		 */
+		readonly subscriptions: { dispose(): any }[];
+
+		/**
+		 * A memento object that stores state in the context
+		 * of the currently opened [workspace](#workspace.workspaceFolders).
+		 */
+		readonly workspaceState: Memento;
+
+		/**
+		 * A memento object that stores state independent
+		 * of the current opened [workspace](#workspace.workspaceFolders).
+		 */
+		readonly globalState: Memento & {
+			/**
+			 * Set the keys whose values should be synchronized across devices when synchronizing user-data
+			 * like configuration, extensions, and mementos.
+			 *
+			 * Note that this function defines the whole set of keys whose values are synchronized:
+			 *  - calling it with an empty array stops synchronization for this memento
+			 *  - calling it with a non-empty array replaces all keys whose values are synchronized
+			 *
+			 * For any given set of keys this function needs to be called only once but there is no harm in
+			 * repeatedly calling it.
+			 *
+			 * @param keys The set of keys whose values are synced.
+			 */
+			setKeysForSync(keys: string[]): void;
+		};
+
+		/**
+		 * A storage utility for secrets.
+		 */
+		readonly secrets: SecretStorage;
+
+		/**
+		 * The uri of the directory containing the extension.
+		 */
+		readonly extensionUri: Uri;
+
+		/**
+		 * The absolute file path of the directory containing the extension. Shorthand
+		 * notation for [ExtensionContext.extensionUri.fsPath](#TextDocument.uri) (independent of the uri scheme).
+		 */
+		readonly extensionPath: string;
+
+		/**
+		 * Gets the extension's environment variable collection for this workspace, enabling changes
+		 * to be applied to terminal environment variables.
+		 */
+		readonly environmentVariableCollection: EnvironmentVariableCollection;
+
+		/**
+		 * Get the absolute path of a resource contained in the extension.
+		 *
+		 * *Note* that an absolute uri can be constructed via [`Uri.joinPath`](#Uri.joinPath) and
+		 * [`extensionUri`](#ExtensionContext.extensionUri), e.g. `vscode.Uri.joinPath(context.extensionUri, relativePath);`
+		 *
+		 * @param relativePath A relative path to a resource contained in the extension.
+		 * @return The absolute path of the resource.
+		 */
+		asAbsolutePath(relativePath: string): string;
+
+		/**
+		 * The uri of a workspace specific directory in which the extension
+		 * can store private state. The directory might not exist and creation is
+		 * up to the extension. However, the parent directory is guaranteed to be existent.
+		 * The value is `undefined` when no workspace nor folder has been opened.
+		 *
+		 * Use [`workspaceState`](#ExtensionContext.workspaceState) or
+		 * [`globalState`](#ExtensionContext.globalState) to store key value data.
+		 *
+		 * @see [`workspace.fs`](#FileSystem) for how to read and write files and folders from
+		 *  an uri.
+		 */
+		readonly storageUri: Uri | undefined;
+
+		/**
+		 * An absolute file path of a workspace specific directory in which the extension
+		 * can store private state. The directory might not exist on disk and creation is
+		 * up to the extension. However, the parent directory is guaranteed to be existent.
+		 *
+		 * Use [`workspaceState`](#ExtensionContext.workspaceState) or
+		 * [`globalState`](#ExtensionContext.globalState) to store key value data.
+		 *
+		 * @deprecated Use [storageUri](#ExtensionContext.storageUri) instead.
+		 */
+		readonly storagePath: string | undefined;
+
+		/**
+		 * The uri of a directory in which the extension can store global state.
+		 * The directory might not exist on disk and creation is
+		 * up to the extension. However, the parent directory is guaranteed to be existent.
+		 *
+		 * Use [`globalState`](#ExtensionContext.globalState) to store key value data.
+		 *
+		 * @see [`workspace.fs`](#FileSystem) for how to read and write files and folders from
+		 *  an uri.
+		 */
+		readonly globalStorageUri: Uri;
+
+		/**
+		 * An absolute file path in which the extension can store global state.
+		 * The directory might not exist on disk and creation is
+		 * up to the extension. However, the parent directory is guaranteed to be existent.
+		 *
+		 * Use [`globalState`](#ExtensionContext.globalState) to store key value data.
+		 *
+		 * @deprecated Use [globalStorageUri](#ExtensionContext.globalStorageUri) instead.
+		 */
+		readonly globalStoragePath: string;
+
+		/**
+		 * The uri of a directory in which the extension can create log files.
+		 * The directory might not exist on disk and creation is up to the extension. However,
+		 * the parent directory is guaranteed to be existent.
+		 *
+		 * @see [`workspace.fs`](#FileSystem) for how to read and write files and folders from
+		 *  an uri.
+		 */
+		readonly logUri: Uri;
+
+		/**
+		 * An absolute file path of a directory in which the extension can create log files.
+		 * The directory might not exist on disk and creation is up to the extension. However,
+		 * the parent directory is guaranteed to be existent.
+		 *
+		 * @deprecated Use [logUri](#ExtensionContext.logUri) instead.
+		 */
+		readonly logPath: string;
+
+		/**
+		 * The mode the extension is running in. This is specific to the current
+		 * extension. One extension may be in `ExtensionMode.Development` while
+		 * other extensions in the host run in `ExtensionMode.Release`.
+		 */
+		readonly extensionMode: ExtensionMode;
+	}
+
+	/**
+	 * A memento represents a storage utility. It can store and retrieve
+	 * values.
+	 */
+	export interface Memento {
+
+		/**
+		 * Return a value.
+		 *
+		 * @param key A string.
+		 * @return The stored value or `undefined`.
+		 */
+		get<T>(key: string): T | undefined;
+
+		/**
+		 * Return a value.
+		 *
+		 * @param key A string.
+		 * @param defaultValue A value that should be returned when there is no
+		 * value (`undefined`) with the given key.
+		 * @return The stored value or the defaultValue.
+		 */
+		get<T>(key: string, defaultValue: T): T;
+
+		/**
+		 * Store a value. The value must be JSON-stringifyable.
+		 *
+		 * @param key A string.
+		 * @param value A value. MUST not contain cyclic references.
+		 */
+		update(key: string, value: any): Thenable<void>;
+	}
+
+	/**
+	 * The event data that is fired when a secret is added or removed.
+	 */
+	export interface SecretStorageChangeEvent {
+		/**
+		 * The key of the secret that has changed.
+		 */
+		readonly key: string;
+	}
+
+	/**
+	 * Represents a storage utility for secrets, information that is
+	 * sensitive.
+	 */
+	export interface SecretStorage {
+		/**
+		 * Retrieve a secret that was stored with key. Returns undefined if there
+		 * is no password matching that key.
+		 * @param key The key the secret was stored under.
+		 * @returns The stored value or `undefined`.
+		 */
+		get(key: string): Thenable<string | undefined>;
+
+		/**
+		 * Store a secret under a given key.
+		 * @param key The key to store the secret under.
+		 * @param value The secret.
+		 */
+		store(key: string, value: string): Thenable<void>;
+
+		/**
+		 * Remove a secret from storage.
+		 * @param key The key the secret was stored under.
+		 */
+		delete(key: string): Thenable<void>;
+
+		/**
+		 * Fires when a secret is stored or deleted.
+		 */
+		onDidChange: Event<SecretStorageChangeEvent>;
+	}
+
+	/**
+	 * Represents a color theme kind.
+	 */
+	export enum ColorThemeKind {
+		Light = 1,
+		Dark = 2,
+		HighContrast = 3
+	}
+
+	/**
+	 * Represents a color theme.
+	 */
+	export interface ColorTheme {
+
+		/**
+		 * The kind of this color theme: light, dark or high contrast.
+		 */
+		readonly kind: ColorThemeKind;
+	}
+
+	/**
+	 * Controls the behaviour of the terminal's visibility.
+	 */
+	export enum TaskRevealKind {
+		/**
+		 * Always brings the terminal to front if the task is executed.
+		 */
+		Always = 1,
+
+		/**
+		 * Only brings the terminal to front if a problem is detected executing the task
+		 * (e.g. the task couldn't be started because).
+		 */
+		Silent = 2,
+
+		/**
+		 * The terminal never comes to front when the task is executed.
+		 */
+		Never = 3
+	}
+
+	/**
+	 * Controls how the task channel is used between tasks
+	 */
+	export enum TaskPanelKind {
+
+		/**
+		 * Shares a panel with other tasks. This is the default.
+		 */
+		Shared = 1,
+
+		/**
+		 * Uses a dedicated panel for this tasks. The panel is not
+		 * shared with other tasks.
+		 */
+		Dedicated = 2,
+
+		/**
+		 * Creates a new panel whenever this task is executed.
+		 */
+		New = 3
+	}
+
+	/**
+	 * Controls how the task is presented in the UI.
+	 */
+	export interface TaskPresentationOptions {
+		/**
+		 * Controls whether the task output is reveal in the user interface.
+		 * Defaults to `RevealKind.Always`.
+		 */
+		reveal?: TaskRevealKind;
+
+		/**
+		 * Controls whether the command associated with the task is echoed
+		 * in the user interface.
+		 */
+		echo?: boolean;
+
+		/**
+		 * Controls whether the panel showing the task output is taking focus.
+		 */
+		focus?: boolean;
+
+		/**
+		 * Controls if the task panel is used for this task only (dedicated),
+		 * shared between tasks (shared) or if a new panel is created on
+		 * every task execution (new). Defaults to `TaskInstanceKind.Shared`
+		 */
+		panel?: TaskPanelKind;
+
+		/**
+		 * Controls whether to show the "Terminal will be reused by tasks, press any key to close it" message.
+		 */
+		showReuseMessage?: boolean;
+
+		/**
+		 * Controls whether the terminal is cleared before executing the task.
+		 */
+		clear?: boolean;
+	}
+
+	/**
+	 * A grouping for tasks. The editor by default supports the
+	 * 'Clean', 'Build', 'RebuildAll' and 'Test' group.
+	 */
+	export class TaskGroup {
+
+		/**
+		 * The clean task group;
+		 */
+		static Clean: TaskGroup;
+
+		/**
+		 * The build task group;
+		 */
+		static Build: TaskGroup;
+
+		/**
+		 * The rebuild all task group;
+		 */
+		static Rebuild: TaskGroup;
+
+		/**
+		 * The test all task group;
+		 */
+		static Test: TaskGroup;
+
+		private constructor(id: string, label: string);
+	}
+
+	/**
+	 * A structure that defines a task kind in the system.
+	 * The value must be JSON-stringifyable.
+	 */
+	export interface TaskDefinition {
+		/**
+		 * The task definition describing the task provided by an extension.
+		 * Usually a task provider defines more properties to identify
+		 * a task. They need to be defined in the package.json of the
+		 * extension under the 'taskDefinitions' extension point. The npm
+		 * task definition for example looks like this
+		 * ```typescript
+		 * interface NpmTaskDefinition extends TaskDefinition {
+		 *     script: string;
+		 * }
+		 * ```
+		 *
+		 * Note that type identifier starting with a '$' are reserved for internal
+		 * usages and shouldn't be used by extensions.
+		 */
+		readonly type: string;
+
+		/**
+		 * Additional attributes of a concrete task definition.
+		 */
+		[name: string]: any;
+	}
+
+	/**
+	 * Options for a process execution
+	 */
+	export interface ProcessExecutionOptions {
+		/**
+		 * The current working directory of the executed program or shell.
+		 * If omitted the tools current workspace root is used.
+		 */
+		cwd?: string;
+
+		/**
+		 * The additional environment of the executed program or shell. If omitted
+		 * the parent process' environment is used. If provided it is merged with
+		 * the parent process' environment.
+		 */
+		env?: { [key: string]: string };
+	}
+
+	/**
+	 * The execution of a task happens as an external process
+	 * without shell interaction.
+	 */
+	export class ProcessExecution {
+
+		/**
+		 * Creates a process execution.
+		 *
+		 * @param process The process to start.
+		 * @param options Optional options for the started process.
+		 */
+		constructor(process: string, options?: ProcessExecutionOptions);
+
+		/**
+		 * Creates a process execution.
+		 *
+		 * @param process The process to start.
+		 * @param args Arguments to be passed to the process.
+		 * @param options Optional options for the started process.
+		 */
+		constructor(process: string, args: string[], options?: ProcessExecutionOptions);
+
+		/**
+		 * The process to be executed.
+		 */
+		process: string;
+
+		/**
+		 * The arguments passed to the process. Defaults to an empty array.
+		 */
+		args: string[];
+
+		/**
+		 * The process options used when the process is executed.
+		 * Defaults to undefined.
+		 */
+		options?: ProcessExecutionOptions;
+	}
+
+	/**
+	 * The shell quoting options.
+	 */
+	export interface ShellQuotingOptions {
+
+		/**
+		 * The character used to do character escaping. If a string is provided only spaces
+		 * are escaped. If a `{ escapeChar, charsToEscape }` literal is provide all characters
+		 * in `charsToEscape` are escaped using the `escapeChar`.
+		 */
+		escape?: string | {
+			/**
+			 * The escape character.
+			 */
+			escapeChar: string;
+			/**
+			 * The characters to escape.
+			 */
+			charsToEscape: string;
+		};
+
+		/**
+		 * The character used for strong quoting. The string's length must be 1.
+		 */
+		strong?: string;
+
+		/**
+		 * The character used for weak quoting. The string's length must be 1.
+		 */
+		weak?: string;
+	}
+
+	/**
+	 * Options for a shell execution
+	 */
+	export interface ShellExecutionOptions {
+		/**
+		 * The shell executable.
+		 */
+		executable?: string;
+
+		/**
+		 * The arguments to be passed to the shell executable used to run the task. Most shells
+		 * require special arguments to execute a command. For  example `bash` requires the `-c`
+		 * argument to execute a command, `PowerShell` requires `-Command` and `cmd` requires both
+		 * `/d` and `/c`.
+		 */
+		shellArgs?: string[];
+
+		/**
+		 * The shell quotes supported by this shell.
+		 */
+		shellQuoting?: ShellQuotingOptions;
+
+		/**
+		 * The current working directory of the executed shell.
+		 * If omitted the tools current workspace root is used.
+		 */
+		cwd?: string;
+
+		/**
+		 * The additional environment of the executed shell. If omitted
+		 * the parent process' environment is used. If provided it is merged with
+		 * the parent process' environment.
+		 */
+		env?: { [key: string]: string };
+	}
+
+	/**
+	 * Defines how an argument should be quoted if it contains
+	 * spaces or unsupported characters.
+	 */
+	export enum ShellQuoting {
+
+		/**
+		 * Character escaping should be used. This for example
+		 * uses \ on bash and ` on PowerShell.
+		 */
+		Escape = 1,
+
+		/**
+		 * Strong string quoting should be used. This for example
+		 * uses " for Windows cmd and ' for bash and PowerShell.
+		 * Strong quoting treats arguments as literal strings.
+		 * Under PowerShell echo 'The value is $(2 * 3)' will
+		 * print `The value is $(2 * 3)`
+		 */
+		Strong = 2,
+
+		/**
+		 * Weak string quoting should be used. This for example
+		 * uses " for Windows cmd, bash and PowerShell. Weak quoting
+		 * still performs some kind of evaluation inside the quoted
+		 * string.  Under PowerShell echo "The value is $(2 * 3)"
+		 * will print `The value is 6`
+		 */
+		Weak = 3
+	}
+
+	/**
+	 * A string that will be quoted depending on the used shell.
+	 */
+	export interface ShellQuotedString {
+		/**
+		 * The actual string value.
+		 */
+		value: string;
+
+		/**
+		 * The quoting style to use.
+		 */
+		quoting: ShellQuoting;
+	}
+
+	export class ShellExecution {
+		/**
+		 * Creates a shell execution with a full command line.
+		 *
+		 * @param commandLine The command line to execute.
+		 * @param options Optional options for the started the shell.
+		 */
+		constructor(commandLine: string, options?: ShellExecutionOptions);
+
+		/**
+		 * Creates a shell execution with a command and arguments. For the real execution VS Code will
+		 * construct a command line from the command and the arguments. This is subject to interpretation
+		 * especially when it comes to quoting. If full control over the command line is needed please
+		 * use the constructor that creates a `ShellExecution` with the full command line.
+		 *
+		 * @param command The command to execute.
+		 * @param args The command arguments.
+		 * @param options Optional options for the started the shell.
+		 */
+		constructor(command: string | ShellQuotedString, args: (string | ShellQuotedString)[], options?: ShellExecutionOptions);
+
+		/**
+		 * The shell command line. Is `undefined` if created with a command and arguments.
+		 */
+		commandLine: string | undefined;
+
+		/**
+		 * The shell command. Is `undefined` if created with a full command line.
+		 */
+		command: string | ShellQuotedString;
+
+		/**
+		 * The shell args. Is `undefined` if created with a full command line.
+		 */
+		args: (string | ShellQuotedString)[];
+
+		/**
+		 * The shell options used when the command line is executed in a shell.
+		 * Defaults to undefined.
+		 */
+		options?: ShellExecutionOptions;
+	}
+
+	/**
+	 * Class used to execute an extension callback as a task.
+	 */
+	export class CustomExecution {
+		/**
+		 * Constructs a CustomExecution task object. The callback will be executed when the task is run, at which point the
+		 * extension should return the Pseudoterminal it will "run in". The task should wait to do further execution until
+		 * [Pseudoterminal.open](#Pseudoterminal.open) is called. Task cancellation should be handled using
+		 * [Pseudoterminal.close](#Pseudoterminal.close). When the task is complete fire
+		 * [Pseudoterminal.onDidClose](#Pseudoterminal.onDidClose).
+		 * @param callback The callback that will be called when the task is started by a user. Any ${} style variables that
+		 * were in the task definition will be resolved and passed into the callback as `resolvedDefinition`.
+		 */
+		constructor(callback: (resolvedDefinition: TaskDefinition) => Thenable<Pseudoterminal>);
+	}
+
+	/**
+	 * The scope of a task.
+	 */
+	export enum TaskScope {
+		/**
+		 * The task is a global task. Global tasks are currently not supported.
+		 */
+		Global = 1,
+
+		/**
+		 * The task is a workspace task
+		 */
+		Workspace = 2
+	}
+
+	/**
+	 * Run options for a task.
+	 */
+	export interface RunOptions {
+		/**
+		 * Controls whether task variables are re-evaluated on rerun.
+		 */
+		reevaluateOnRerun?: boolean;
+	}
+
+	/**
+	 * A task to execute
+	 */
+	export class Task {
+
+		/**
+		 * Creates a new task.
+		 *
+		 * @param definition The task definition as defined in the taskDefinitions extension point.
+		 * @param scope Specifies the task's scope. It is either a global or a workspace task or a task for a specific workspace folder. Global tasks are currently not supported.
+		 * @param name The task's name. Is presented in the user interface.
+		 * @param source The task's source (e.g. 'gulp', 'npm', ...). Is presented in the user interface.
+		 * @param execution The process or shell execution.
+		 * @param problemMatchers the names of problem matchers to use, like '$tsc'
+		 *  or '$eslint'. Problem matchers can be contributed by an extension using
+		 *  the `problemMatchers` extension point.
+		 */
+		constructor(taskDefinition: TaskDefinition, scope: WorkspaceFolder | TaskScope.Global | TaskScope.Workspace, name: string, source: string, execution?: ProcessExecution | ShellExecution | CustomExecution, problemMatchers?: string | string[]);
+
+		/**
+		 * Creates a new task.
+		 *
+		 * @deprecated Use the new constructors that allow specifying a scope for the task.
+		 *
+		 * @param definition The task definition as defined in the taskDefinitions extension point.
+		 * @param name The task's name. Is presented in the user interface.
+		 * @param source The task's source (e.g. 'gulp', 'npm', ...). Is presented in the user interface.
+		 * @param execution The process or shell execution.
+		 * @param problemMatchers the names of problem matchers to use, like '$tsc'
+		 *  or '$eslint'. Problem matchers can be contributed by an extension using
+		 *  the `problemMatchers` extension point.
+		 */
+		constructor(taskDefinition: TaskDefinition, name: string, source: string, execution?: ProcessExecution | ShellExecution, problemMatchers?: string | string[]);
+
+		/**
+		 * The task's definition.
+		 */
+		definition: TaskDefinition;
+
+		/**
+		 * The task's scope.
+		 */
+		readonly scope?: TaskScope.Global | TaskScope.Workspace | WorkspaceFolder;
+
+		/**
+		 * The task's name
+		 */
+		name: string;
+
+		/**
+		 * A human-readable string which is rendered less prominently on a separate line in places
+		 * where the task's name is displayed. Supports rendering of [theme icons](#ThemeIcon)
+		 * via the `$(<name>)`-syntax.
+		 */
+		detail?: string;
+
+		/**
+		 * The task's execution engine
+		 */
+		execution?: ProcessExecution | ShellExecution | CustomExecution;
+
+		/**
+		 * Whether the task is a background task or not.
+		 */
+		isBackground: boolean;
+
+		/**
+		 * A human-readable string describing the source of this shell task, e.g. 'gulp'
+		 * or 'npm'. Supports rendering of [theme icons](#ThemeIcon) via the `$(<name>)`-syntax.
+		 */
+		source: string;
+
+		/**
+		 * The task group this tasks belongs to. See TaskGroup
+		 * for a predefined set of available groups.
+		 * Defaults to undefined meaning that the task doesn't
+		 * belong to any special group.
+		 */
+		group?: TaskGroup;
+
+		/**
+		 * The presentation options. Defaults to an empty literal.
+		 */
+		presentationOptions: TaskPresentationOptions;
+
+		/**
+		 * The problem matchers attached to the task. Defaults to an empty
+		 * array.
+		 */
+		problemMatchers: string[];
+
+		/**
+		 * Run options for the task
+		 */
+		runOptions: RunOptions;
+	}
+
+	/**
+	 * A task provider allows to add tasks to the task service.
+	 * A task provider is registered via #tasks.registerTaskProvider.
+	 */
+	export interface TaskProvider<T extends Task = Task> {
+		/**
+		 * Provides tasks.
+		 * @param token A cancellation token.
+		 * @return an array of tasks
+		 */
+		provideTasks(token: CancellationToken): ProviderResult<T[]>;
+
+		/**
+		 * Resolves a task that has no [`execution`](#Task.execution) set. Tasks are
+		 * often created from information found in the `tasks.json`-file. Such tasks miss
+		 * the information on how to execute them and a task provider must fill in
+		 * the missing information in the `resolveTask`-method. This method will not be
+		 * called for tasks returned from the above `provideTasks` method since those
+		 * tasks are always fully resolved. A valid default implementation for the
+		 * `resolveTask` method is to return `undefined`.
+		 *
+		 * Note that when filling in the properties of `task`, you _must_ be sure to
+		 * use the exact same `TaskDefinition` and not create a new one. Other properties
+		 * may be changed.
+		 *
+		 * @param task The task to resolve.
+		 * @param token A cancellation token.
+		 * @return The resolved task
+		 */
+		resolveTask(task: T, token: CancellationToken): ProviderResult<T>;
+	}
+
+	/**
+	 * An object representing an executed Task. It can be used
+	 * to terminate a task.
+	 *
+	 * This interface is not intended to be implemented.
+	 */
+	export interface TaskExecution {
+		/**
+		 * The task that got started.
+		 */
+		task: Task;
+
+		/**
+		 * Terminates the task execution.
+		 */
+		terminate(): void;
+	}
+
+	/**
+	 * An event signaling the start of a task execution.
+	 *
+	 * This interface is not intended to be implemented.
+	 */
+	interface TaskStartEvent {
+		/**
+		 * The task item representing the task that got started.
+		 */
+		readonly execution: TaskExecution;
+	}
+
+	/**
+	 * An event signaling the end of an executed task.
+	 *
+	 * This interface is not intended to be implemented.
+	 */
+	interface TaskEndEvent {
+		/**
+		 * The task item representing the task that finished.
+		 */
+		readonly execution: TaskExecution;
+	}
+
+	/**
+	 * An event signaling the start of a process execution
+	 * triggered through a task
+	 */
+	export interface TaskProcessStartEvent {
+
+		/**
+		 * The task execution for which the process got started.
+		 */
+		readonly execution: TaskExecution;
+
+		/**
+		 * The underlying process id.
+		 */
+		readonly processId: number;
+	}
+
+	/**
+	 * An event signaling the end of a process execution
+	 * triggered through a task
+	 */
+	export interface TaskProcessEndEvent {
+
+		/**
+		 * The task execution for which the process got started.
+		 */
+		readonly execution: TaskExecution;
+
+		/**
+		 * The process's exit code. Will be `undefined` when the task is terminated.
+		 */
+		readonly exitCode: number | undefined;
+	}
+
+	export interface TaskFilter {
+		/**
+		 * The task version as used in the tasks.json file.
+		 * The string support the package.json semver notation.
+		 */
+		version?: string;
+
+		/**
+		 * The task type to return;
+		 */
+		type?: string;
+	}
+
+	/**
+	 * Namespace for tasks functionality.
+	 */
+	export namespace tasks {
+
+		/**
+		 * Register a task provider.
+		 *
+		 * @param type The task kind type this provider is registered for.
+		 * @param provider A task provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerTaskProvider(type: string, provider: TaskProvider): Disposable;
+
+		/**
+		 * Fetches all tasks available in the systems. This includes tasks
+		 * from `tasks.json` files as well as tasks from task providers
+		 * contributed through extensions.
+		 *
+		 * @param filter Optional filter to select tasks of a certain type or version.
+		 */
+		export function fetchTasks(filter?: TaskFilter): Thenable<Task[]>;
+
+		/**
+		 * Executes a task that is managed by VS Code. The returned
+		 * task execution can be used to terminate the task.
+		 *
+		 * @throws When running a ShellExecution or a ProcessExecution
+		 * task in an environment where a new process cannot be started.
+		 * In such an environment, only CustomExecution tasks can be run.
+		 *
+		 * @param task the task to execute
+		 */
+		export function executeTask(task: Task): Thenable<TaskExecution>;
+
+		/**
+		 * The currently active task executions or an empty array.
+		 */
+		export const taskExecutions: ReadonlyArray<TaskExecution>;
+
+		/**
+		 * Fires when a task starts.
+		 */
+		export const onDidStartTask: Event<TaskStartEvent>;
+
+		/**
+		 * Fires when a task ends.
+		 */
+		export const onDidEndTask: Event<TaskEndEvent>;
+
+		/**
+		 * Fires when the underlying process has been started.
+		 * This event will not fire for tasks that don't
+		 * execute an underlying process.
+		 */
+		export const onDidStartTaskProcess: Event<TaskProcessStartEvent>;
+
+		/**
+		 * Fires when the underlying process has ended.
+		 * This event will not fire for tasks that don't
+		 * execute an underlying process.
+		 */
+		export const onDidEndTaskProcess: Event<TaskProcessEndEvent>;
+	}
+
+	/**
+	 * Enumeration of file types. The types `File` and `Directory` can also be
+	 * a symbolic links, in that case use `FileType.File | FileType.SymbolicLink` and
+	 * `FileType.Directory | FileType.SymbolicLink`.
+	 */
+	export enum FileType {
+		/**
+		 * The file type is unknown.
+		 */
+		Unknown = 0,
+		/**
+		 * A regular file.
+		 */
+		File = 1,
+		/**
+		 * A directory.
+		 */
+		Directory = 2,
+		/**
+		 * A symbolic link to a file.
+		 */
+		SymbolicLink = 64
+	}
+
+	/**
+	 * The `FileStat`-type represents metadata about a file
+	 */
+	export interface FileStat {
+		/**
+		 * The type of the file, e.g. is a regular file, a directory, or symbolic link
+		 * to a file.
+		 *
+		 * *Note:* This value might be a bitmask, e.g. `FileType.File | FileType.SymbolicLink`.
+		 */
+		type: FileType;
+		/**
+		 * The creation timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.
+		 */
+		ctime: number;
+		/**
+		 * The modification timestamp in milliseconds elapsed since January 1, 1970 00:00:00 UTC.
+		 *
+		 * *Note:* If the file changed, it is important to provide an updated `mtime` that advanced
+		 * from the previous value. Otherwise there may be optimizations in place that will not show
+		 * the updated file contents in an editor for example.
+		 */
+		mtime: number;
+		/**
+		 * The size in bytes.
+		 *
+		 * *Note:* If the file changed, it is important to provide an updated `size`. Otherwise there
+		 * may be optimizations in place that will not show the updated file contents in an editor for
+		 * example.
+		 */
+		size: number;
+	}
+
+	/**
+	 * A type that filesystem providers should use to signal errors.
+	 *
+	 * This class has factory methods for common error-cases, like `FileNotFound` when
+	 * a file or folder doesn't exist, use them like so: `throw vscode.FileSystemError.FileNotFound(someUri);`
+	 */
+	export class FileSystemError extends Error {
+
+		/**
+		 * Create an error to signal that a file or folder wasn't found.
+		 * @param messageOrUri Message or uri.
+		 */
+		static FileNotFound(messageOrUri?: string | Uri): FileSystemError;
+
+		/**
+		 * Create an error to signal that a file or folder already exists, e.g. when
+		 * creating but not overwriting a file.
+		 * @param messageOrUri Message or uri.
+		 */
+		static FileExists(messageOrUri?: string | Uri): FileSystemError;
+
+		/**
+		 * Create an error to signal that a file is not a folder.
+		 * @param messageOrUri Message or uri.
+		 */
+		static FileNotADirectory(messageOrUri?: string | Uri): FileSystemError;
+
+		/**
+		 * Create an error to signal that a file is a folder.
+		 * @param messageOrUri Message or uri.
+		 */
+		static FileIsADirectory(messageOrUri?: string | Uri): FileSystemError;
+
+		/**
+		 * Create an error to signal that an operation lacks required permissions.
+		 * @param messageOrUri Message or uri.
+		 */
+		static NoPermissions(messageOrUri?: string | Uri): FileSystemError;
+
+		/**
+		 * Create an error to signal that the file system is unavailable or too busy to
+		 * complete a request.
+		 * @param messageOrUri Message or uri.
+		 */
+		static Unavailable(messageOrUri?: string | Uri): FileSystemError;
+
+		/**
+		 * Creates a new filesystem error.
+		 *
+		 * @param messageOrUri Message or uri.
+		 */
+		constructor(messageOrUri?: string | Uri);
+
+		/**
+		 * A code that identifies this error.
+		 *
+		 * Possible values are names of errors, like [`FileNotFound`](#FileSystemError.FileNotFound),
+		 * or `Unknown` for unspecified errors.
+		 */
+		readonly code: string;
+	}
+
+	/**
+	 * Enumeration of file change types.
+	 */
+	export enum FileChangeType {
+
+		/**
+		 * The contents or metadata of a file have changed.
+		 */
+		Changed = 1,
+
+		/**
+		 * A file has been created.
+		 */
+		Created = 2,
+
+		/**
+		 * A file has been deleted.
+		 */
+		Deleted = 3,
+	}
+
+	/**
+	 * The event filesystem providers must use to signal a file change.
+	 */
+	export interface FileChangeEvent {
+
+		/**
+		 * The type of change.
+		 */
+		readonly type: FileChangeType;
+
+		/**
+		 * The uri of the file that has changed.
+		 */
+		readonly uri: Uri;
+	}
+
+	/**
+	 * The filesystem provider defines what the editor needs to read, write, discover,
+	 * and to manage files and folders. It allows extensions to serve files from remote places,
+	 * like ftp-servers, and to seamlessly integrate those into the editor.
+	 *
+	 * * *Note 1:* The filesystem provider API works with [uris](#Uri) and assumes hierarchical
+	 * paths, e.g. `foo:/my/path` is a child of `foo:/my/` and a parent of `foo:/my/path/deeper`.
+	 * * *Note 2:* There is an activation event `onFileSystem:<scheme>` that fires when a file
+	 * or folder is being accessed.
+	 * * *Note 3:* The word 'file' is often used to denote all [kinds](#FileType) of files, e.g.
+	 * folders, symbolic links, and regular files.
+	 */
+	export interface FileSystemProvider {
+
+		/**
+		 * An event to signal that a resource has been created, changed, or deleted. This
+		 * event should fire for resources that are being [watched](#FileSystemProvider.watch)
+		 * by clients of this provider.
+		 *
+		 * *Note:* It is important that the metadata of the file that changed provides an
+		 * updated `mtime` that advanced from the previous value in the [stat](#FileStat) and a
+		 * correct `size` value. Otherwise there may be optimizations in place that will not show
+		 * the change in an editor for example.
+		 */
+		readonly onDidChangeFile: Event<FileChangeEvent[]>;
+
+		/**
+		 * Subscribe to events in the file or folder denoted by `uri`.
+		 *
+		 * The editor will call this function for files and folders. In the latter case, the
+		 * options differ from defaults, e.g. what files/folders to exclude from watching
+		 * and if subfolders, sub-subfolder, etc. should be watched (`recursive`).
+		 *
+		 * @param uri The uri of the file to be watched.
+		 * @param options Configures the watch.
+		 * @returns A disposable that tells the provider to stop watching the `uri`.
+		 */
+		watch(uri: Uri, options: { recursive: boolean; excludes: string[] }): Disposable;
+
+		/**
+		 * Retrieve metadata about a file.
+		 *
+		 * Note that the metadata for symbolic links should be the metadata of the file they refer to.
+		 * Still, the [SymbolicLink](#FileType.SymbolicLink)-type must be used in addition to the actual type, e.g.
+		 * `FileType.SymbolicLink | FileType.Directory`.
+		 *
+		 * @param uri The uri of the file to retrieve metadata about.
+		 * @return The file metadata about the file.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `uri` doesn't exist.
+		 */
+		stat(uri: Uri): FileStat | Thenable<FileStat>;
+
+		/**
+		 * Retrieve all entries of a [directory](#FileType.Directory).
+		 *
+		 * @param uri The uri of the folder.
+		 * @return An array of name/type-tuples or a thenable that resolves to such.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `uri` doesn't exist.
+		 */
+		readDirectory(uri: Uri): [string, FileType][] | Thenable<[string, FileType][]>;
+
+		/**
+		 * Create a new directory (Note, that new files are created via `write`-calls).
+		 *
+		 * @param uri The uri of the new folder.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when the parent of `uri` doesn't exist, e.g. no mkdirp-logic required.
+		 * @throws [`FileExists`](#FileSystemError.FileExists) when `uri` already exists.
+		 * @throws [`NoPermissions`](#FileSystemError.NoPermissions) when permissions aren't sufficient.
+		 */
+		createDirectory(uri: Uri): void | Thenable<void>;
+
+		/**
+		 * Read the entire contents of a file.
+		 *
+		 * @param uri The uri of the file.
+		 * @return An array of bytes or a thenable that resolves to such.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `uri` doesn't exist.
+		 */
+		readFile(uri: Uri): Uint8Array | Thenable<Uint8Array>;
+
+		/**
+		 * Write data to a file, replacing its entire contents.
+		 *
+		 * @param uri The uri of the file.
+		 * @param content The new content of the file.
+		 * @param options Defines if missing files should or must be created.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `uri` doesn't exist and `create` is not set.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when the parent of `uri` doesn't exist and `create` is set, e.g. no mkdirp-logic required.
+		 * @throws [`FileExists`](#FileSystemError.FileExists) when `uri` already exists, `create` is set but `overwrite` is not set.
+		 * @throws [`NoPermissions`](#FileSystemError.NoPermissions) when permissions aren't sufficient.
+		 */
+		writeFile(uri: Uri, content: Uint8Array, options: { create: boolean, overwrite: boolean }): void | Thenable<void>;
+
+		/**
+		 * Delete a file.
+		 *
+		 * @param uri The resource that is to be deleted.
+		 * @param options Defines if deletion of folders is recursive.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `uri` doesn't exist.
+		 * @throws [`NoPermissions`](#FileSystemError.NoPermissions) when permissions aren't sufficient.
+		 */
+		delete(uri: Uri, options: { recursive: boolean }): void | Thenable<void>;
+
+		/**
+		 * Rename a file or folder.
+		 *
+		 * @param oldUri The existing file.
+		 * @param newUri The new location.
+		 * @param options Defines if existing files should be overwritten.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `oldUri` doesn't exist.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when parent of `newUri` doesn't exist, e.g. no mkdirp-logic required.
+		 * @throws [`FileExists`](#FileSystemError.FileExists) when `newUri` exists and when the `overwrite` option is not `true`.
+		 * @throws [`NoPermissions`](#FileSystemError.NoPermissions) when permissions aren't sufficient.
+		 */
+		rename(oldUri: Uri, newUri: Uri, options: { overwrite: boolean }): void | Thenable<void>;
+
+		/**
+		 * Copy files or folders. Implementing this function is optional but it will speedup
+		 * the copy operation.
+		 *
+		 * @param source The existing file.
+		 * @param destination The destination location.
+		 * @param options Defines if existing files should be overwritten.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when `source` doesn't exist.
+		 * @throws [`FileNotFound`](#FileSystemError.FileNotFound) when parent of `destination` doesn't exist, e.g. no mkdirp-logic required.
+		 * @throws [`FileExists`](#FileSystemError.FileExists) when `destination` exists and when the `overwrite` option is not `true`.
+		 * @throws [`NoPermissions`](#FileSystemError.NoPermissions) when permissions aren't sufficient.
+		 */
+		copy?(source: Uri, destination: Uri, options: { overwrite: boolean }): void | Thenable<void>;
+	}
+
+	/**
+	 * The file system interface exposes the editor's built-in and contributed
+	 * [file system providers](#FileSystemProvider). It allows extensions to work
+	 * with files from the local disk as well as files from remote places, like the
+	 * remote extension host or ftp-servers.
+	 *
+	 * *Note* that an instance of this interface is available as [`workspace.fs`](#workspace.fs).
+	 */
+	export interface FileSystem {
+
+		/**
+		 * Retrieve metadata about a file.
+		 *
+		 * @param uri The uri of the file to retrieve metadata about.
+		 * @return The file metadata about the file.
+		 */
+		stat(uri: Uri): Thenable<FileStat>;
+
+		/**
+		 * Retrieve all entries of a [directory](#FileType.Directory).
+		 *
+		 * @param uri The uri of the folder.
+		 * @return An array of name/type-tuples or a thenable that resolves to such.
+		 */
+		readDirectory(uri: Uri): Thenable<[string, FileType][]>;
+
+		/**
+		 * Create a new directory (Note, that new files are created via `write`-calls).
+		 *
+		 * *Note* that missing directories are created automatically, e.g this call has
+		 * `mkdirp` semantics.
+		 *
+		 * @param uri The uri of the new folder.
+		 */
+		createDirectory(uri: Uri): Thenable<void>;
+
+		/**
+		 * Read the entire contents of a file.
+		 *
+		 * @param uri The uri of the file.
+		 * @return An array of bytes or a thenable that resolves to such.
+		 */
+		readFile(uri: Uri): Thenable<Uint8Array>;
+
+		/**
+		 * Write data to a file, replacing its entire contents.
+		 *
+		 * @param uri The uri of the file.
+		 * @param content The new content of the file.
+		 */
+		writeFile(uri: Uri, content: Uint8Array): Thenable<void>;
+
+		/**
+		 * Delete a file.
+		 *
+		 * @param uri The resource that is to be deleted.
+		 * @param options Defines if trash can should be used and if deletion of folders is recursive
+		 */
+		delete(uri: Uri, options?: { recursive?: boolean, useTrash?: boolean }): Thenable<void>;
+
+		/**
+		 * Rename a file or folder.
+		 *
+		 * @param oldUri The existing file.
+		 * @param newUri The new location.
+		 * @param options Defines if existing files should be overwritten.
+		 */
+		rename(source: Uri, target: Uri, options?: { overwrite?: boolean }): Thenable<void>;
+
+		/**
+		 * Copy files or folders.
+		 *
+		 * @param source The existing file.
+		 * @param destination The destination location.
+		 * @param options Defines if existing files should be overwritten.
+		 */
+		copy(source: Uri, target: Uri, options?: { overwrite?: boolean }): Thenable<void>;
+
+		/**
+		 * Check if a given file system supports writing files.
+		 *
+		 * Keep in mind that just because a file system supports writing, that does
+		 * not mean that writes will always succeed. There may be permissions issues
+		 * or other errors that prevent writing a file.
+		 *
+		 * @param scheme The scheme of the filesystem, for example `file` or `git`.
+		 *
+		 * @return `true` if the file system supports writing, `false` if it does not
+		 * support writing (i.e. it is readonly), and `undefined` if VS Code does not
+		 * know about the filesystem.
+		 */
+		isWritableFileSystem(scheme: string): boolean | undefined;
+	}
+
+	/**
+	 * Defines a port mapping used for localhost inside the webview.
+	 */
+	export interface WebviewPortMapping {
+		/**
+		 * Localhost port to remap inside the webview.
+		 */
+		readonly webviewPort: number;
+
+		/**
+		 * Destination port. The `webviewPort` is resolved to this port.
+		 */
+		readonly extensionHostPort: number;
+	}
+
+	/**
+	 * Content settings for a webview.
+	 */
+	export interface WebviewOptions {
+		/**
+		 * Controls whether scripts are enabled in the webview content or not.
+		 *
+		 * Defaults to false (scripts-disabled).
+		 */
+		readonly enableScripts?: boolean;
+
+		/**
+		 * Controls whether command uris are enabled in webview content or not.
+		 *
+		 * Defaults to false.
+		 */
+		readonly enableCommandUris?: boolean;
+
+		/**
+		 * Root paths from which the webview can load local (filesystem) resources using uris from `asWebviewUri`
+		 *
+		 * Default to the root folders of the current workspace plus the extension's install directory.
+		 *
+		 * Pass in an empty array to disallow access to any local resources.
+		 */
+		readonly localResourceRoots?: ReadonlyArray<Uri>;
+
+		/**
+		 * Mappings of localhost ports used inside the webview.
+		 *
+		 * Port mapping allow webviews to transparently define how localhost ports are resolved. This can be used
+		 * to allow using a static localhost port inside the webview that is resolved to random port that a service is
+		 * running on.
+		 *
+		 * If a webview accesses localhost content, we recommend that you specify port mappings even if
+		 * the `webviewPort` and `extensionHostPort` ports are the same.
+		 *
+		 * *Note* that port mappings only work for `http` or `https` urls. Websocket urls (e.g. `ws://localhost:3000`)
+		 * cannot be mapped to another port.
+		 */
+		readonly portMapping?: ReadonlyArray<WebviewPortMapping>;
+	}
+
+	/**
+	 * Displays html content, similarly to an iframe.
+	 */
+	export interface Webview {
+		/**
+		 * Content settings for the webview.
+		 */
+		options: WebviewOptions;
+
+		/**
+		 * HTML contents of the webview.
+		 *
+		 * This should be a complete, valid html document. Changing this property causes the webview to be reloaded.
+		 *
+		 * Webviews are sandboxed from normal extension process, so all communication with the webview must use
+		 * message passing. To send a message from the extension to the webview, use [`postMessage`](#Webview.postMessage).
+		 * To send message from the webview back to an extension, use the `acquireVsCodeApi` function inside the webview
+		 * to get a handle to VS Code's api and then call `.postMessage()`:
+		 *
+		 * ```html
+		 * <script>
+		 *     const vscode = acquireVsCodeApi(); // acquireVsCodeApi can only be invoked once
+		 *     vscode.postMessage({ message: 'hello!' });
+		 * </script>
+		 * ```
+		 *
+		 * To load a resources from the workspace inside a webview, use the `[asWebviewUri](#Webview.asWebviewUri)` method
+		 * and ensure the resource's directory is listed in [`WebviewOptions.localResourceRoots`](#WebviewOptions.localResourceRoots).
+		 *
+		 * Keep in mind that even though webviews are sandboxed, they still allow running scripts and loading arbitrary content,
+		 * so extensions must follow all standard web security best practices when working with webviews. This includes
+		 * properly sanitizing all untrusted input (including content from the workspace) and
+		 * setting a [content security policy](https://aka.ms/vscode-api-webview-csp).
+		 */
+		html: string;
+
+		/**
+		 * Fired when the webview content posts a message.
+		 *
+		 * Webview content can post strings or json serializable objects back to a VS Code extension. They cannot
+		 * post `Blob`, `File`, `ImageData` and other DOM specific objects since the extension that receives the
+		 * message does not run in a browser environment.
+		 */
+		readonly onDidReceiveMessage: Event<any>;
+
+		/**
+		 * Post a message to the webview content.
+		 *
+		 * Messages are only delivered if the webview is live (either visible or in the
+		 * background with `retainContextWhenHidden`).
+		 *
+		 * @param message Body of the message. This must be a string or other json serializable object.
+		 */
+		postMessage(message: any): Thenable<boolean>;
+
+		/**
+		 * Convert a uri for the local file system to one that can be used inside webviews.
+		 *
+		 * Webviews cannot directly load resources from the workspace or local file system using `file:` uris. The
+		 * `asWebviewUri` function takes a local `file:` uri and converts it into a uri that can be used inside of
+		 * a webview to load the same resource:
+		 *
+		 * ```ts
+		 * webview.html = `<img src="${webview.asWebviewUri(vscode.Uri.file('/Users/codey/workspace/cat.gif'))}">`
+		 * ```
+		 */
+		asWebviewUri(localResource: Uri): Uri;
+
+		/**
+		 * Content security policy source for webview resources.
+		 *
+		 * This is the origin that should be used in a content security policy rule:
+		 *
+		 * ```
+		 * img-src https: ${webview.cspSource} ...;
+		 * ```
+		 */
+		readonly cspSource: string;
+	}
+
+	/**
+	 * Content settings for a webview panel.
+	 */
+	export interface WebviewPanelOptions {
+		/**
+		 * Controls if the find widget is enabled in the panel.
+		 *
+		 * Defaults to false.
+		 */
+		readonly enableFindWidget?: boolean;
+
+		/**
+		 * Controls if the webview panel's content (iframe) is kept around even when the panel
+		 * is no longer visible.
+		 *
+		 * Normally the webview panel's html context is created when the panel becomes visible
+		 * and destroyed when it is hidden. Extensions that have complex state
+		 * or UI can set the `retainContextWhenHidden` to make VS Code keep the webview
+		 * context around, even when the webview moves to a background tab. When a webview using
+		 * `retainContextWhenHidden` becomes hidden, its scripts and other dynamic content are suspended.
+		 * When the panel becomes visible again, the context is automatically restored
+		 * in the exact same state it was in originally. You cannot send messages to a
+		 * hidden webview, even with `retainContextWhenHidden` enabled.
+		 *
+		 * `retainContextWhenHidden` has a high memory overhead and should only be used if
+		 * your panel's context cannot be quickly saved and restored.
+		 */
+		readonly retainContextWhenHidden?: boolean;
+	}
+
+	/**
+	 * A panel that contains a webview.
+	 */
+	interface WebviewPanel {
+		/**
+		 * Identifies the type of the webview panel, such as `'markdown.preview'`.
+		 */
+		readonly viewType: string;
+
+		/**
+		 * Title of the panel shown in UI.
+		 */
+		title: string;
+
+		/**
+		 * Icon for the panel shown in UI.
+		 */
+		iconPath?: Uri | { light: Uri; dark: Uri };
+
+		/**
+		 * [`Webview`](#Webview) belonging to the panel.
+		 */
+		readonly webview: Webview;
+
+		/**
+		 * Content settings for the webview panel.
+		 */
+		readonly options: WebviewPanelOptions;
+
+		/**
+		 * Editor position of the panel. This property is only set if the webview is in
+		 * one of the editor view columns.
+		 */
+		readonly viewColumn?: ViewColumn;
+
+		/**
+		 * Whether the panel is active (focused by the user).
+		 */
+		readonly active: boolean;
+
+		/**
+		 * Whether the panel is visible.
+		 */
+		readonly visible: boolean;
+
+		/**
+		 * Fired when the panel's view state changes.
+		 */
+		readonly onDidChangeViewState: Event<WebviewPanelOnDidChangeViewStateEvent>;
+
+		/**
+		 * Fired when the panel is disposed.
+		 *
+		 * This may be because the user closed the panel or because `.dispose()` was
+		 * called on it.
+		 *
+		 * Trying to use the panel after it has been disposed throws an exception.
+		 */
+		readonly onDidDispose: Event<void>;
+
+		/**
+		 * Show the webview panel in a given column.
+		 *
+		 * A webview panel may only show in a single column at a time. If it is already showing, this
+		 * method moves it to a new column.
+		 *
+		 * @param viewColumn View column to show the panel in. Shows in the current `viewColumn` if undefined.
+		 * @param preserveFocus When `true`, the webview will not take focus.
+		 */
+		reveal(viewColumn?: ViewColumn, preserveFocus?: boolean): void;
+
+		/**
+		 * Dispose of the webview panel.
+		 *
+		 * This closes the panel if it showing and disposes of the resources owned by the webview.
+		 * Webview panels are also disposed when the user closes the webview panel. Both cases
+		 * fire the `onDispose` event.
+		 */
+		dispose(): any;
+	}
+
+	/**
+	 * Event fired when a webview panel's view state changes.
+	 */
+	export interface WebviewPanelOnDidChangeViewStateEvent {
+		/**
+		 * Webview panel whose view state changed.
+		 */
+		readonly webviewPanel: WebviewPanel;
+	}
+
+	/**
+	 * Restore webview panels that have been persisted when vscode shuts down.
+	 *
+	 * There are two types of webview persistence:
+	 *
+	 * - Persistence within a session.
+	 * - Persistence across sessions (across restarts of VS Code).
+	 *
+	 * A `WebviewPanelSerializer` is only required for the second case: persisting a webview across sessions.
+	 *
+	 * Persistence within a session allows a webview to save its state when it becomes hidden
+	 * and restore its content from this state when it becomes visible again. It is powered entirely
+	 * by the webview content itself. To save off a persisted state, call `acquireVsCodeApi().setState()` with
+	 * any json serializable object. To restore the state again, call `getState()`
+	 *
+	 * ```js
+	 * // Within the webview
+	 * const vscode = acquireVsCodeApi();
+	 *
+	 * // Get existing state
+	 * const oldState = vscode.getState() || { value: 0 };
+	 *
+	 * // Update state
+	 * setState({ value: oldState.value + 1 })
+	 * ```
+	 *
+	 * A `WebviewPanelSerializer` extends this persistence across restarts of VS Code. When the editor is shutdown,
+	 * VS Code will save off the state from `setState` of all webviews that have a serializer. When the
+	 * webview first becomes visible after the restart, this state is passed to `deserializeWebviewPanel`.
+	 * The extension can then restore the old `WebviewPanel` from this state.
+	 *
+	 * @param T Type of the webview's state.
+	 */
+	interface WebviewPanelSerializer<T = unknown> {
+		/**
+		 * Restore a webview panel from its serialized `state`.
+		 *
+		 * Called when a serialized webview first becomes visible.
+		 *
+		 * @param webviewPanel Webview panel to restore. The serializer should take ownership of this panel. The
+		 * serializer must restore the webview's `.html` and hook up all webview events.
+		 * @param state Persisted state from the webview content.
+		 *
+		 * @return Thenable indicating that the webview has been fully restored.
+		 */
+		deserializeWebviewPanel(webviewPanel: WebviewPanel, state: T): Thenable<void>;
+	}
+
+	/**
+ * A webview based view.
+ */
+	export interface WebviewView {
+		/**
+		 * Identifies the type of the webview view, such as `'hexEditor.dataView'`.
+		 */
+		readonly viewType: string;
+
+		/**
+		 * The underlying webview for the view.
+		 */
+		readonly webview: Webview;
+
+		/**
+		 * View title displayed in the UI.
+		 *
+		 * The view title is initially taken from the extension `package.json` contribution.
+		 */
+		title?: string;
+
+		/**
+		 * Human-readable string which is rendered less prominently in the title.
+		 */
+		description?: string;
+
+		/**
+		 * Event fired when the view is disposed.
+		 *
+		 * Views are disposed when they are explicitly hidden by a user (this happens when a user
+		 * right clicks in a view and unchecks the webview view).
+		 *
+		 * Trying to use the view after it has been disposed throws an exception.
+		 */
+		readonly onDidDispose: Event<void>;
+
+		/**
+		 * Tracks if the webview is currently visible.
+		 *
+		 * Views are visible when they are on the screen and expanded.
+		 */
+		readonly visible: boolean;
+
+		/**
+		 * Event fired when the visibility of the view changes.
+		 *
+		 * Actions that trigger a visibility change:
+		 *
+		 * - The view is collapsed or expanded.
+		 * - The user switches to a different view group in the sidebar or panel.
+		 *
+		 * Note that hiding a view using the context menu instead disposes of the view and fires `onDidDispose`.
+		 */
+		readonly onDidChangeVisibility: Event<void>;
+
+		/**
+		 * Reveal the view in the UI.
+		 *
+		 * If the view is collapsed, this will expand it.
+		 *
+		 * @param preserveFocus When `true` the view will not take focus.
+		 */
+		show(preserveFocus?: boolean): void;
+	}
+
+	/**
+	 * Additional information the webview view being resolved.
+	 *
+	 * @param T Type of the webview's state.
+	 */
+	interface WebviewViewResolveContext<T = unknown> {
+		/**
+		 * Persisted state from the webview content.
+		 *
+		 * To save resources, VS Code normally deallocates webview documents (the iframe content) that are not visible.
+		 * For example, when the user collapse a view or switches to another top level activity in the sidebar, the
+		 * `WebviewView` itself is kept alive but the webview's underlying document is deallocated. It is recreated when
+		 * the view becomes visible again.
+		 *
+		 * You can prevent this behavior by setting `retainContextWhenHidden` in the `WebviewOptions`. However this
+		 * increases resource usage and should be avoided wherever possible. Instead, you can use persisted state to
+		 * save off a webview's state so that it can be quickly recreated as needed.
+		 *
+		 * To save off a persisted state, inside the webview call `acquireVsCodeApi().setState()` with
+		 * any json serializable object. To restore the state again, call `getState()`. For example:
+		 *
+		 * ```js
+		 * // Within the webview
+		 * const vscode = acquireVsCodeApi();
+		 *
+		 * // Get existing state
+		 * const oldState = vscode.getState() || { value: 0 };
+		 *
+		 * // Update state
+		 * setState({ value: oldState.value + 1 })
+		 * ```
+		 *
+		 * VS Code ensures that the persisted state is saved correctly when a webview is hidden and across
+		 * editor restarts.
+		 */
+		readonly state: T | undefined;
+	}
+
+	/**
+	 * Provider for creating `WebviewView` elements.
+	 */
+	export interface WebviewViewProvider {
+		/**
+		 * Revolves a webview view.
+		 *
+		 * `resolveWebviewView` is called when a view first becomes visible. This may happen when the view is
+		 * first loaded or when the user hides and then shows a view again.
+		 *
+		 * @param webviewView Webview view to restore. The provider should take ownership of this view. The
+		 *    provider must set the webview's `.html` and hook up all webview events it is interested in.
+		 * @param context Additional metadata about the view being resolved.
+		 * @param token Cancellation token indicating that the view being provided is no longer needed.
+		 *
+		 * @return Optional thenable indicating that the view has been fully resolved.
+		 */
+		resolveWebviewView(webviewView: WebviewView, context: WebviewViewResolveContext, token: CancellationToken): Thenable<void> | void;
+	}
+
+	/**
+	 * Provider for text based custom editors.
+	 *
+	 * Text based custom editors use a [`TextDocument`](#TextDocument) as their data model. This considerably simplifies
+	 * implementing a custom editor as it allows VS Code to handle many common operations such as
+	 * undo and backup. The provider is responsible for synchronizing text changes between the webview and the `TextDocument`.
+	 */
+	export interface CustomTextEditorProvider {
+
+		/**
+		 * Resolve a custom editor for a given text resource.
+		 *
+		 * This is called when a user first opens a resource for a `CustomTextEditorProvider`, or if they reopen an
+		 * existing editor using this `CustomTextEditorProvider`.
+		 *
+		 *
+		 * @param document Document for the resource to resolve.
+		 *
+		 * @param webviewPanel The webview panel used to display the editor UI for this resource.
+		 *
+		 * During resolve, the provider must fill in the initial html for the content webview panel and hook up all
+		 * the event listeners on it that it is interested in. The provider can also hold onto the `WebviewPanel` to
+		 * use later for example in a command. See [`WebviewPanel`](#WebviewPanel) for additional details.
+		 *
+		 * @param token A cancellation token that indicates the result is no longer needed.
+		 *
+		 * @return Thenable indicating that the custom editor has been resolved.
+		 */
+		resolveCustomTextEditor(document: TextDocument, webviewPanel: WebviewPanel, token: CancellationToken): Thenable<void> | void;
+	}
+
+	/**
+	 * Represents a custom document used by a [`CustomEditorProvider`](#CustomEditorProvider).
+	 *
+	 * Custom documents are only used within a given `CustomEditorProvider`. The lifecycle of a `CustomDocument` is
+	 * managed by VS Code. When no more references remain to a `CustomDocument`, it is disposed of.
+	 */
+	interface CustomDocument {
+		/**
+		 * The associated uri for this document.
+		 */
+		readonly uri: Uri;
+
+		/**
+		 * Dispose of the custom document.
+		 *
+		 * This is invoked by VS Code when there are no more references to a given `CustomDocument` (for example when
+		 * all editors associated with the document have been closed.)
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Event triggered by extensions to signal to VS Code that an edit has occurred on an [`CustomDocument`](#CustomDocument).
+	 *
+	 * @see [`CustomDocumentProvider.onDidChangeCustomDocument`](#CustomDocumentProvider.onDidChangeCustomDocument).
+	 */
+	interface CustomDocumentEditEvent<T extends CustomDocument = CustomDocument> {
+
+		/**
+		 * The document that the edit is for.
+		 */
+		readonly document: T;
+
+		/**
+		 * Undo the edit operation.
+		 *
+		 * This is invoked by VS Code when the user undoes this edit. To implement `undo`, your
+		 * extension should restore the document and editor to the state they were in just before this
+		 * edit was added to VS Code's internal edit stack by `onDidChangeCustomDocument`.
+		 */
+		undo(): Thenable<void> | void;
+
+		/**
+		 * Redo the edit operation.
+		 *
+		 * This is invoked by VS Code when the user redoes this edit. To implement `redo`, your
+		 * extension should restore the document and editor to the state they were in just after this
+		 * edit was added to VS Code's internal edit stack by `onDidChangeCustomDocument`.
+		 */
+		redo(): Thenable<void> | void;
+
+		/**
+		 * Display name describing the edit.
+		 *
+		 * This will be shown to users in the UI for undo/redo operations.
+		 */
+		readonly label?: string;
+	}
+
+	/**
+	 * Event triggered by extensions to signal to VS Code that the content of a [`CustomDocument`](#CustomDocument)
+	 * has changed.
+	 *
+	 * @see [`CustomDocumentProvider.onDidChangeCustomDocument`](#CustomDocumentProvider.onDidChangeCustomDocument).
+	 */
+	interface CustomDocumentContentChangeEvent<T extends CustomDocument = CustomDocument> {
+		/**
+		 * The document that the change is for.
+		 */
+		readonly document: T;
+	}
+
+	/**
+	 * A backup for an [`CustomDocument`](#CustomDocument).
+	 */
+	interface CustomDocumentBackup {
+		/**
+		 * Unique identifier for the backup.
+		 *
+		 * This id is passed back to your extension in `openCustomDocument` when opening a custom editor from a backup.
+		 */
+		readonly id: string;
+
+		/**
+		 * Delete the current backup.
+		 *
+		 * This is called by VS Code when it is clear the current backup is no longer needed, such as when a new backup
+		 * is made or when the file is saved.
+		 */
+		delete(): void;
+	}
+
+	/**
+	 * Additional information used to implement [`CustomEditableDocument.backup`](#CustomEditableDocument.backup).
+	 */
+	interface CustomDocumentBackupContext {
+		/**
+		 * Suggested file location to write the new backup.
+		 *
+		 * Note that your extension is free to ignore this and use its own strategy for backup.
+		 *
+		 * If the editor is for a resource from the current workspace, `destination` will point to a file inside
+		 * `ExtensionContext.storagePath`. The parent folder of `destination` may not exist, so make sure to created it
+		 * before writing the backup to this location.
+		 */
+		readonly destination: Uri;
+	}
+
+	/**
+	 * Additional information about the opening custom document.
+	 */
+	interface CustomDocumentOpenContext {
+		/**
+		 * The id of the backup to restore the document from or `undefined` if there is no backup.
+		 *
+		 * If this is provided, your extension should restore the editor from the backup instead of reading the file
+		 * from the user's workspace.
+		 */
+		readonly backupId?: string;
+
+		/**
+		 * If the URI is an untitled file, this will be populated with the byte data of that file
+		 *
+		 * If this is provided, your extension should utilize this byte data rather than executing fs APIs on the URI passed in
+		 */
+		readonly untitledDocumentData?: Uint8Array;
+	}
+
+	/**
+	 * Provider for readonly custom editors that use a custom document model.
+	 *
+	 * Custom editors use [`CustomDocument`](#CustomDocument) as their document model instead of a [`TextDocument`](#TextDocument).
+	 *
+	 * You should use this type of custom editor when dealing with binary files or more complex scenarios. For simple
+	 * text based documents, use [`CustomTextEditorProvider`](#CustomTextEditorProvider) instead.
+	 *
+	 * @param T Type of the custom document returned by this provider.
+	 */
+	export interface CustomReadonlyEditorProvider<T extends CustomDocument = CustomDocument> {
+
+		/**
+		 * Create a new document for a given resource.
+		 *
+		 * `openCustomDocument` is called when the first time an editor for a given resource is opened. The opened
+		 * document is then passed to `resolveCustomEditor` so that the editor can be shown to the user.
+		 *
+		 * Already opened `CustomDocument` are re-used if the user opened additional editors. When all editors for a
+		 * given resource are closed, the `CustomDocument` is disposed of. Opening an editor at this point will
+		 * trigger another call to `openCustomDocument`.
+		 *
+		 * @param uri Uri of the document to open.
+		 * @param openContext Additional information about the opening custom document.
+		 * @param token A cancellation token that indicates the result is no longer needed.
+		 *
+		 * @return The custom document.
+		 */
+		openCustomDocument(uri: Uri, openContext: CustomDocumentOpenContext, token: CancellationToken): Thenable<T> | T;
+
+		/**
+		 * Resolve a custom editor for a given resource.
+		 *
+		 * This is called whenever the user opens a new editor for this `CustomEditorProvider`.
+		 *
+		 * @param document Document for the resource being resolved.
+		 *
+		 * @param webviewPanel The webview panel used to display the editor UI for this resource.
+		 *
+		 * During resolve, the provider must fill in the initial html for the content webview panel and hook up all
+		 * the event listeners on it that it is interested in. The provider can also hold onto the `WebviewPanel` to
+		 * use later for example in a command. See [`WebviewPanel`](#WebviewPanel) for additional details.
+		 *
+		 * @param token A cancellation token that indicates the result is no longer needed.
+		 *
+		 * @return Optional thenable indicating that the custom editor has been resolved.
+		 */
+		resolveCustomEditor(document: T, webviewPanel: WebviewPanel, token: CancellationToken): Thenable<void> | void;
+	}
+
+	/**
+	 * Provider for editable custom editors that use a custom document model.
+	 *
+	 * Custom editors use [`CustomDocument`](#CustomDocument) as their document model instead of a [`TextDocument`](#TextDocument).
+	 * This gives extensions full control over actions such as edit, save, and backup.
+	 *
+	 * You should use this type of custom editor when dealing with binary files or more complex scenarios. For simple
+	 * text based documents, use [`CustomTextEditorProvider`](#CustomTextEditorProvider) instead.
+	 *
+	 * @param T Type of the custom document returned by this provider.
+	 */
+	export interface CustomEditorProvider<T extends CustomDocument = CustomDocument> extends CustomReadonlyEditorProvider<T> {
+		/**
+		 * Signal that an edit has occurred inside a custom editor.
+		 *
+		 * This event must be fired by your extension whenever an edit happens in a custom editor. An edit can be
+		 * anything from changing some text, to cropping an image, to reordering a list. Your extension is free to
+		 * define what an edit is and what data is stored on each edit.
+		 *
+		 * Firing `onDidChange` causes VS Code to mark the editors as being dirty. This is cleared when the user either
+		 * saves or reverts the file.
+		 *
+		 * Editors that support undo/redo must fire a `CustomDocumentEditEvent` whenever an edit happens. This allows
+		 * users to undo and redo the edit using VS Code's standard VS Code keyboard shortcuts. VS Code will also mark
+		 * the editor as no longer being dirty if the user undoes all edits to the last saved state.
+		 *
+		 * Editors that support editing but cannot use VS Code's standard undo/redo mechanism must fire a `CustomDocumentContentChangeEvent`.
+		 * The only way for a user to clear the dirty state of an editor that does not support undo/redo is to either
+		 * `save` or `revert` the file.
+		 *
+		 * An editor should only ever fire `CustomDocumentEditEvent` events, or only ever fire `CustomDocumentContentChangeEvent` events.
+		 */
+		readonly onDidChangeCustomDocument: Event<CustomDocumentEditEvent<T>> | Event<CustomDocumentContentChangeEvent<T>>;
+
+		/**
+		 * Save a custom document.
+		 *
+		 * This method is invoked by VS Code when the user saves a custom editor. This can happen when the user
+		 * triggers save while the custom editor is active, by commands such as `save all`, or by auto save if enabled.
+		 *
+		 * To implement `save`, the implementer must persist the custom editor. This usually means writing the
+		 * file data for the custom document to disk. After `save` completes, any associated editor instances will
+		 * no longer be marked as dirty.
+		 *
+		 * @param document Document to save.
+		 * @param cancellation Token that signals the save is no longer required (for example, if another save was triggered).
+		 *
+		 * @return Thenable signaling that saving has completed.
+		 */
+		saveCustomDocument(document: T, cancellation: CancellationToken): Thenable<void>;
+
+		/**
+		 * Save a custom document to a different location.
+		 *
+		 * This method is invoked by VS Code when the user triggers 'save as' on a custom editor. The implementer must
+		 * persist the custom editor to `destination`.
+		 *
+		 * When the user accepts save as, the current editor is be replaced by an non-dirty editor for the newly saved file.
+		 *
+		 * @param document Document to save.
+		 * @param destination Location to save to.
+		 * @param cancellation Token that signals the save is no longer required.
+		 *
+		 * @return Thenable signaling that saving has completed.
+		 */
+		saveCustomDocumentAs(document: T, destination: Uri, cancellation: CancellationToken): Thenable<void>;
+
+		/**
+		 * Revert a custom document to its last saved state.
+		 *
+		 * This method is invoked by VS Code when the user triggers `File: Revert File` in a custom editor. (Note that
+		 * this is only used using VS Code's `File: Revert File` command and not on a `git revert` of the file).
+		 *
+		 * To implement `revert`, the implementer must make sure all editor instances (webviews) for `document`
+		 * are displaying the document in the same state is saved in. This usually means reloading the file from the
+		 * workspace.
+		 *
+		 * @param document Document to revert.
+		 * @param cancellation Token that signals the revert is no longer required.
+		 *
+		 * @return Thenable signaling that the change has completed.
+		 */
+		revertCustomDocument(document: T, cancellation: CancellationToken): Thenable<void>;
+
+		/**
+		 * Back up a dirty custom document.
+		 *
+		 * Backups are used for hot exit and to prevent data loss. Your `backup` method should persist the resource in
+		 * its current state, i.e. with the edits applied. Most commonly this means saving the resource to disk in
+		 * the `ExtensionContext.storagePath`. When VS Code reloads and your custom editor is opened for a resource,
+		 * your extension should first check to see if any backups exist for the resource. If there is a backup, your
+		 * extension should load the file contents from there instead of from the resource in the workspace.
+		 *
+		 * `backup` is triggered approximately one second after the user stops editing the document. If the user
+		 * rapidly edits the document, `backup` will not be invoked until the editing stops.
+		 *
+		 * `backup` is not invoked when `auto save` is enabled (since auto save already persists the resource).
+		 *
+		 * @param document Document to backup.
+		 * @param context Information that can be used to backup the document.
+		 * @param cancellation Token that signals the current backup since a new backup is coming in. It is up to your
+		 * extension to decided how to respond to cancellation. If for example your extension is backing up a large file
+		 * in an operation that takes time to complete, your extension may decide to finish the ongoing backup rather
+		 * than cancelling it to ensure that VS Code has some valid backup.
+		 */
+		backupCustomDocument(document: T, context: CustomDocumentBackupContext, cancellation: CancellationToken): Thenable<CustomDocumentBackup>;
+	}
+
+	/**
+	 * The clipboard provides read and write access to the system's clipboard.
+	 */
+	export interface Clipboard {
+
+		/**
+		 * Read the current clipboard contents as text.
+		 * @returns A thenable that resolves to a string.
+		 */
+		readText(): Thenable<string>;
+
+		/**
+		 * Writes text into the clipboard.
+		 * @returns A thenable that resolves when writing happened.
+		 */
+		writeText(value: string): Thenable<void>;
+	}
+
+	/**
+	 * Possible kinds of UI that can use extensions.
+	 */
+	export enum UIKind {
+
+		/**
+		 * Extensions are accessed from a desktop application.
+		 */
+		Desktop = 1,
+
+		/**
+		 * Extensions are accessed from a web browser.
+		 */
+		Web = 2
+	}
+
+	/**
+	 * Namespace describing the environment the editor runs in.
+	 */
+	export namespace env {
+
+		/**
+		 * The application name of the editor, like 'VS Code'.
+		 */
+		export const appName: string;
+
+		/**
+		 * The application root folder from which the editor is running.
+		 *
+		 * *Note* that the value is the empty string when running in an
+		 * environment that has no representation of an application root folder.
+		 */
+		export const appRoot: string;
+
+		/**
+		 * The custom uri scheme the editor registers to in the operating system.
+		 */
+		export const uriScheme: string;
+
+		/**
+		 * Represents the preferred user-language, like `de-CH`, `fr`, or `en-US`.
+		 */
+		export const language: string;
+
+		/**
+		 * The system clipboard.
+		 */
+		export const clipboard: Clipboard;
+
+		/**
+		 * A unique identifier for the computer.
+		 */
+		export const machineId: string;
+
+		/**
+		 * A unique identifier for the current session.
+		 * Changes each time the editor is started.
+		 */
+		export const sessionId: string;
+
+		/**
+		 * Indicates that this is a fresh install of the application.
+		 * `true` if within the first day of installation otherwise `false`.
+		 */
+		export const isNewAppInstall: boolean;
+
+		/**
+		 * Indicates whether the users has telemetry enabled.
+		 * Can be observed to determine if the extension should send telemetry.
+		 */
+		export const isTelemetryEnabled: boolean;
+
+		/**
+		 * An [event](#Event) which fires when the user enabled or disables telemetry.
+		 * `true` if the user has enabled telemetry or `false` if the user has disabled telemetry.
+		 */
+		export const onDidChangeTelemetryEnabled: Event<boolean>;
+
+		/**
+		 * The name of a remote. Defined by extensions, popular samples are `wsl` for the Windows
+		 * Subsystem for Linux or `ssh-remote` for remotes using a secure shell.
+		 *
+		 * *Note* that the value is `undefined` when there is no remote extension host but that the
+		 * value is defined in all extension hosts (local and remote) in case a remote extension host
+		 * exists. Use [`Extension#extensionKind`](#Extension.extensionKind) to know if
+		 * a specific extension runs remote or not.
+		 */
+		export const remoteName: string | undefined;
+
+		/**
+		 * The detected default shell for the extension host, this is overridden by the
+		 * `terminal.integrated.shell` setting for the extension host's platform. Note that in
+		 * environments that do not support a shell the value is the empty string.
+		 */
+		export const shell: string;
+
+		/**
+		 * The UI kind property indicates from which UI extensions
+		 * are accessed from. For example, extensions could be accessed
+		 * from a desktop application or a web browser.
+		 */
+		export const uiKind: UIKind;
+
+		/**
+		 * Opens a link externally using the default application. Depending on the
+		 * used scheme this can be:
+		 * * a browser (`http:`, `https:`)
+		 * * a mail client (`mailto:`)
+		 * * VSCode itself (`vscode:` from `vscode.env.uriScheme`)
+		 *
+		 * *Note* that [`showTextDocument`](#window.showTextDocument) is the right
+		 * way to open a text document inside the editor, not this function.
+		 *
+		 * @param target The uri that should be opened.
+		 * @returns A promise indicating if open was successful.
+		 */
+		export function openExternal(target: Uri): Thenable<boolean>;
+
+		/**
+		 * Resolves a uri to form that is accessible externally. Currently only supports `https:`, `http:` and
+		 * `vscode.env.uriScheme` uris.
+		 *
+		 * #### `http:` or `https:` scheme
+		 *
+		 * Resolves an *external* uri, such as a `http:` or `https:` link, from where the extension is running to a
+		 * uri to the same resource on the client machine.
+		 *
+		 * This is a no-op if the extension is running on the client machine.
+		 *
+		 * If the extension is running remotely, this function automatically establishes a port forwarding tunnel
+		 * from the local machine to `target` on the remote and returns a local uri to the tunnel. The lifetime of
+		 * the port forwarding tunnel is managed by VS Code and the tunnel can be closed by the user.
+		 *
+		 * *Note* that uris passed through `openExternal` are automatically resolved and you should not call `asExternalUri` on them.
+		 *
+		 * #### `vscode.env.uriScheme`
+		 *
+		 * Creates a uri that - if opened in a browser (e.g. via `openExternal`) - will result in a registered [UriHandler](#UriHandler)
+		 * to trigger.
+		 *
+		 * Extensions should not make any assumptions about the resulting uri and should not alter it in anyway.
+		 * Rather, extensions can e.g. use this uri in an authentication flow, by adding the uri as callback query
+		 * argument to the server to authenticate to.
+		 *
+		 * *Note* that if the server decides to add additional query parameters to the uri (e.g. a token or secret), it
+		 * will appear in the uri that is passed to the [UriHandler](#UriHandler).
+		 *
+		 * **Example** of an authentication flow:
+		 * ```typescript
+		 * vscode.window.registerUriHandler({
+		 *   handleUri(uri: vscode.Uri): vscode.ProviderResult<void> {
+		 *     if (uri.path === '/did-authenticate') {
+		 *       console.log(uri.toString());
+		 *     }
+		 *   }
+		 * });
+		 *
+		 * const callableUri = await vscode.env.asExternalUri(vscode.Uri.parse(`${vscode.env.uriScheme}://my.extension/did-authenticate`));
+		 * await vscode.env.openExternal(callableUri);
+		 * ```
+		 *
+		 * *Note* that extensions should not cache the result of `asExternalUri` as the resolved uri may become invalid due to
+		 * a system or user action — for example, in remote cases, a user may close a port forwarding tunnel that was opened by
+		 * `asExternalUri`.
+		 *
+		 * @return A uri that can be used on the client machine.
+		 */
+		export function asExternalUri(target: Uri): Thenable<Uri>;
+	}
+
+	/**
+	 * Namespace for dealing with commands. In short, a command is a function with a
+	 * unique identifier. The function is sometimes also called _command handler_.
+	 *
+	 * Commands can be added to the editor using the [registerCommand](#commands.registerCommand)
+	 * and [registerTextEditorCommand](#commands.registerTextEditorCommand) functions. Commands
+	 * can be executed [manually](#commands.executeCommand) or from a UI gesture. Those are:
+	 *
+	 * * palette - Use the `commands`-section in `package.json` to make a command show in
+	 * the [command palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette).
+	 * * keybinding - Use the `keybindings`-section in `package.json` to enable
+	 * [keybindings](https://code.visualstudio.com/docs/getstarted/keybindings#_customizing-shortcuts)
+	 * for your extension.
+	 *
+	 * Commands from other extensions and from the editor itself are accessible to an extension. However,
+	 * when invoking an editor command not all argument types are supported.
+	 *
+	 * This is a sample that registers a command handler and adds an entry for that command to the palette. First
+	 * register a command handler with the identifier `extension.sayHello`.
+	 * ```javascript
+	 * commands.registerCommand('extension.sayHello', () => {
+	 * 	window.showInformationMessage('Hello World!');
+	 * });
+	 * ```
+	 * Second, bind the command identifier to a title under which it will show in the palette (`package.json`).
+	 * ```json
+	 * {
+	 * 	"contributes": {
+	 * 		"commands": [{
+	 * 			"command": "extension.sayHello",
+	 * 			"title": "Hello World"
+	 * 		}]
+	 * 	}
+	 * }
+	 * ```
+	 */
+	export namespace commands {
+
+		/**
+		 * Registers a command that can be invoked via a keyboard shortcut,
+		 * a menu item, an action, or directly.
+		 *
+		 * Registering a command with an existing command identifier twice
+		 * will cause an error.
+		 *
+		 * @param command A unique identifier for the command.
+		 * @param callback A command handler function.
+		 * @param thisArg The `this` context used when invoking the handler function.
+		 * @return Disposable which unregisters this command on disposal.
+		 */
+		export function registerCommand(command: string, callback: (...args: any[]) => any, thisArg?: any): Disposable;
+
+		/**
+		 * Registers a text editor command that can be invoked via a keyboard shortcut,
+		 * a menu item, an action, or directly.
+		 *
+		 * Text editor commands are different from ordinary [commands](#commands.registerCommand) as
+		 * they only execute when there is an active editor when the command is called. Also, the
+		 * command handler of an editor command has access to the active editor and to an
+		 * [edit](#TextEditorEdit)-builder. Note that the edit-builder is only valid while the
+		 * callback executes.
+		 *
+		 * @param command A unique identifier for the command.
+		 * @param callback A command handler function with access to an [editor](#TextEditor) and an [edit](#TextEditorEdit).
+		 * @param thisArg The `this` context used when invoking the handler function.
+		 * @return Disposable which unregisters this command on disposal.
+		 */
+		export function registerTextEditorCommand(command: string, callback: (textEditor: TextEditor, edit: TextEditorEdit, ...args: any[]) => void, thisArg?: any): Disposable;
+
+		/**
+		 * Executes the command denoted by the given command identifier.
+		 *
+		 * * *Note 1:* When executing an editor command not all types are allowed to
+		 * be passed as arguments. Allowed are the primitive types `string`, `boolean`,
+		 * `number`, `undefined`, and `null`, as well as [`Position`](#Position), [`Range`](#Range), [`Uri`](#Uri) and [`Location`](#Location).
+		 * * *Note 2:* There are no restrictions when executing commands that have been contributed
+		 * by extensions.
+		 *
+		 * @param command Identifier of the command to execute.
+		 * @param rest Parameters passed to the command function.
+		 * @return A thenable that resolves to the returned value of the given command. `undefined` when
+		 * the command handler function doesn't return anything.
+		 */
+		export function executeCommand<T>(command: string, ...rest: any[]): Thenable<T | undefined>;
+
+		/**
+		 * Retrieve the list of all available commands. Commands starting with an underscore are
+		 * treated as internal commands.
+		 *
+		 * @param filterInternal Set `true` to not see internal commands (starting with an underscore)
+		 * @return Thenable that resolves to a list of command ids.
+		 */
+		export function getCommands(filterInternal?: boolean): Thenable<string[]>;
+	}
+
+	/**
+	 * Represents the state of a window.
+	 */
+	export interface WindowState {
+
+		/**
+		 * Whether the current window is focused.
+		 */
+		readonly focused: boolean;
+	}
+
+	/**
+	 * A uri handler is responsible for handling system-wide [uris](#Uri).
+	 *
+	 * @see [window.registerUriHandler](#window.registerUriHandler).
+	 */
+	export interface UriHandler {
+
+		/**
+		 * Handle the provided system-wide [uri](#Uri).
+		 *
+		 * @see [window.registerUriHandler](#window.registerUriHandler).
+		 */
+		handleUri(uri: Uri): ProviderResult<void>;
+	}
+
+	/**
+	 * Namespace for dealing with the current window of the editor. That is visible
+	 * and active editors, as well as, UI elements to show messages, selections, and
+	 * asking for user input.
+	 */
+	export namespace window {
+
+		/**
+		 * The currently active editor or `undefined`. The active editor is the one
+		 * that currently has focus or, when none has focus, the one that has changed
+		 * input most recently.
+		 */
+		export let activeTextEditor: TextEditor | undefined;
+
+		/**
+		 * The currently visible editors or an empty array.
+		 */
+		export let visibleTextEditors: TextEditor[];
+
+		/**
+		 * An [event](#Event) which fires when the [active editor](#window.activeTextEditor)
+		 * has changed. *Note* that the event also fires when the active editor changes
+		 * to `undefined`.
+		 */
+		export const onDidChangeActiveTextEditor: Event<TextEditor | undefined>;
+
+		/**
+		 * An [event](#Event) which fires when the array of [visible editors](#window.visibleTextEditors)
+		 * has changed.
+		 */
+		export const onDidChangeVisibleTextEditors: Event<TextEditor[]>;
+
+		/**
+		 * An [event](#Event) which fires when the selection in an editor has changed.
+		 */
+		export const onDidChangeTextEditorSelection: Event<TextEditorSelectionChangeEvent>;
+
+		/**
+		 * An [event](#Event) which fires when the visible ranges of an editor has changed.
+		 */
+		export const onDidChangeTextEditorVisibleRanges: Event<TextEditorVisibleRangesChangeEvent>;
+
+		/**
+		 * An [event](#Event) which fires when the options of an editor have changed.
+		 */
+		export const onDidChangeTextEditorOptions: Event<TextEditorOptionsChangeEvent>;
+
+		/**
+		 * An [event](#Event) which fires when the view column of an editor has changed.
+		 */
+		export const onDidChangeTextEditorViewColumn: Event<TextEditorViewColumnChangeEvent>;
+
+		/**
+		 * The currently opened terminals or an empty array.
+		 */
+		export const terminals: ReadonlyArray<Terminal>;
+
+		/**
+		 * The currently active terminal or `undefined`. The active terminal is the one that
+		 * currently has focus or most recently had focus.
+		 */
+		export const activeTerminal: Terminal | undefined;
+
+		/**
+		 * An [event](#Event) which fires when the [active terminal](#window.activeTerminal)
+		 * has changed. *Note* that the event also fires when the active terminal changes
+		 * to `undefined`.
+		 */
+		export const onDidChangeActiveTerminal: Event<Terminal | undefined>;
+
+		/**
+		 * An [event](#Event) which fires when a terminal has been created, either through the
+		 * [createTerminal](#window.createTerminal) API or commands.
+		 */
+		export const onDidOpenTerminal: Event<Terminal>;
+
+		/**
+		 * An [event](#Event) which fires when a terminal is disposed.
+		 */
+		export const onDidCloseTerminal: Event<Terminal>;
+
+		/**
+		 * Represents the current window's state.
+		 */
+		export const state: WindowState;
+
+		/**
+		 * An [event](#Event) which fires when the focus state of the current window
+		 * changes. The value of the event represents whether the window is focused.
+		 */
+		export const onDidChangeWindowState: Event<WindowState>;
+
+		/**
+		 * Show the given document in a text editor. A [column](#ViewColumn) can be provided
+		 * to control where the editor is being shown. Might change the [active editor](#window.activeTextEditor).
+		 *
+		 * @param document A text document to be shown.
+		 * @param column A view column in which the [editor](#TextEditor) should be shown. The default is the [active](#ViewColumn.Active), other values
+		 * are adjusted to be `Min(column, columnCount + 1)`, the [active](#ViewColumn.Active)-column is not adjusted. Use [`ViewColumn.Beside`](#ViewColumn.Beside)
+		 * to open the editor to the side of the currently active one.
+		 * @param preserveFocus When `true` the editor will not take focus.
+		 * @return A promise that resolves to an [editor](#TextEditor).
+		 */
+		export function showTextDocument(document: TextDocument, column?: ViewColumn, preserveFocus?: boolean): Thenable<TextEditor>;
+
+		/**
+		 * Show the given document in a text editor. [Options](#TextDocumentShowOptions) can be provided
+		 * to control options of the editor is being shown. Might change the [active editor](#window.activeTextEditor).
+		 *
+		 * @param document A text document to be shown.
+		 * @param options [Editor options](#TextDocumentShowOptions) to configure the behavior of showing the [editor](#TextEditor).
+		 * @return A promise that resolves to an [editor](#TextEditor).
+		 */
+		export function showTextDocument(document: TextDocument, options?: TextDocumentShowOptions): Thenable<TextEditor>;
+
+		/**
+		 * A short-hand for `openTextDocument(uri).then(document => showTextDocument(document, options))`.
+		 *
+		 * @see [openTextDocument](#openTextDocument)
+		 *
+		 * @param uri A resource identifier.
+		 * @param options [Editor options](#TextDocumentShowOptions) to configure the behavior of showing the [editor](#TextEditor).
+		 * @return A promise that resolves to an [editor](#TextEditor).
+		 */
+		export function showTextDocument(uri: Uri, options?: TextDocumentShowOptions): Thenable<TextEditor>;
+
+		/**
+		 * Create a TextEditorDecorationType that can be used to add decorations to text editors.
+		 *
+		 * @param options Rendering options for the decoration type.
+		 * @return A new decoration type instance.
+		 */
+		export function createTextEditorDecorationType(options: DecorationRenderOptions): TextEditorDecorationType;
+
+		/**
+		 * Show an information message to users. Optionally provide an array of items which will be presented as
+		 * clickable buttons.
+		 *
+		 * @param message The message to show.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showInformationMessage(message: string, ...items: string[]): Thenable<string | undefined>;
+
+		/**
+		 * Show an information message to users. Optionally provide an array of items which will be presented as
+		 * clickable buttons.
+		 *
+		 * @param message The message to show.
+		 * @param options Configures the behaviour of the message.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showInformationMessage(message: string, options: MessageOptions, ...items: string[]): Thenable<string | undefined>;
+
+		/**
+		 * Show an information message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showInformationMessage<T extends MessageItem>(message: string, ...items: T[]): Thenable<T | undefined>;
+
+		/**
+		 * Show an information message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param options Configures the behaviour of the message.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showInformationMessage<T extends MessageItem>(message: string, options: MessageOptions, ...items: T[]): Thenable<T | undefined>;
+
+		/**
+		 * Show a warning message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showWarningMessage(message: string, ...items: string[]): Thenable<string | undefined>;
+
+		/**
+		 * Show a warning message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param options Configures the behaviour of the message.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showWarningMessage(message: string, options: MessageOptions, ...items: string[]): Thenable<string | undefined>;
+
+		/**
+		 * Show a warning message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showWarningMessage<T extends MessageItem>(message: string, ...items: T[]): Thenable<T | undefined>;
+
+		/**
+		 * Show a warning message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param options Configures the behaviour of the message.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showWarningMessage<T extends MessageItem>(message: string, options: MessageOptions, ...items: T[]): Thenable<T | undefined>;
+
+		/**
+		 * Show an error message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showErrorMessage(message: string, ...items: string[]): Thenable<string | undefined>;
+
+		/**
+		 * Show an error message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param options Configures the behaviour of the message.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showErrorMessage(message: string, options: MessageOptions, ...items: string[]): Thenable<string | undefined>;
+
+		/**
+		 * Show an error message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showErrorMessage<T extends MessageItem>(message: string, ...items: T[]): Thenable<T | undefined>;
+
+		/**
+		 * Show an error message.
+		 *
+		 * @see [showInformationMessage](#window.showInformationMessage)
+		 *
+		 * @param message The message to show.
+		 * @param options Configures the behaviour of the message.
+		 * @param items A set of items that will be rendered as actions in the message.
+		 * @return A thenable that resolves to the selected item or `undefined` when being dismissed.
+		 */
+		export function showErrorMessage<T extends MessageItem>(message: string, options: MessageOptions, ...items: T[]): Thenable<T | undefined>;
+
+		/**
+		 * Shows a selection list allowing multiple selections.
+		 *
+		 * @param items An array of strings, or a promise that resolves to an array of strings.
+		 * @param options Configures the behavior of the selection list.
+		 * @param token A token that can be used to signal cancellation.
+		 * @return A promise that resolves to the selected items or `undefined`.
+		 */
+		export function showQuickPick(items: string[] | Thenable<string[]>, options: QuickPickOptions & { canPickMany: true; }, token?: CancellationToken): Thenable<string[] | undefined>;
+
+		/**
+		 * Shows a selection list.
+		 *
+		 * @param items An array of strings, or a promise that resolves to an array of strings.
+		 * @param options Configures the behavior of the selection list.
+		 * @param token A token that can be used to signal cancellation.
+		 * @return A promise that resolves to the selection or `undefined`.
+		 */
+		export function showQuickPick(items: string[] | Thenable<string[]>, options?: QuickPickOptions, token?: CancellationToken): Thenable<string | undefined>;
+
+		/**
+		 * Shows a selection list allowing multiple selections.
+		 *
+		 * @param items An array of items, or a promise that resolves to an array of items.
+		 * @param options Configures the behavior of the selection list.
+		 * @param token A token that can be used to signal cancellation.
+		 * @return A promise that resolves to the selected items or `undefined`.
+		 */
+		export function showQuickPick<T extends QuickPickItem>(items: T[] | Thenable<T[]>, options: QuickPickOptions & { canPickMany: true; }, token?: CancellationToken): Thenable<T[] | undefined>;
+
+		/**
+		 * Shows a selection list.
+		 *
+		 * @param items An array of items, or a promise that resolves to an array of items.
+		 * @param options Configures the behavior of the selection list.
+		 * @param token A token that can be used to signal cancellation.
+		 * @return A promise that resolves to the selected item or `undefined`.
+		 */
+		export function showQuickPick<T extends QuickPickItem>(items: T[] | Thenable<T[]>, options?: QuickPickOptions, token?: CancellationToken): Thenable<T | undefined>;
+
+		/**
+		 * Shows a selection list of [workspace folders](#workspace.workspaceFolders) to pick from.
+		 * Returns `undefined` if no folder is open.
+		 *
+		 * @param options Configures the behavior of the workspace folder list.
+		 * @return A promise that resolves to the workspace folder or `undefined`.
+		 */
+		export function showWorkspaceFolderPick(options?: WorkspaceFolderPickOptions): Thenable<WorkspaceFolder | undefined>;
+
+		/**
+		 * Shows a file open dialog to the user which allows to select a file
+		 * for opening-purposes.
+		 *
+		 * @param options Options that control the dialog.
+		 * @returns A promise that resolves to the selected resources or `undefined`.
+		 */
+		export function showOpenDialog(options?: OpenDialogOptions): Thenable<Uri[] | undefined>;
+
+		/**
+		 * Shows a file save dialog to the user which allows to select a file
+		 * for saving-purposes.
+		 *
+		 * @param options Options that control the dialog.
+		 * @returns A promise that resolves to the selected resource or `undefined`.
+		 */
+		export function showSaveDialog(options?: SaveDialogOptions): Thenable<Uri | undefined>;
+
+		/**
+		 * Opens an input box to ask the user for input.
+		 *
+		 * The returned value will be `undefined` if the input box was canceled (e.g. pressing ESC). Otherwise the
+		 * returned value will be the string typed by the user or an empty string if the user did not type
+		 * anything but dismissed the input box with OK.
+		 *
+		 * @param options Configures the behavior of the input box.
+		 * @param token A token that can be used to signal cancellation.
+		 * @return A promise that resolves to a string the user provided or to `undefined` in case of dismissal.
+		 */
+		export function showInputBox(options?: InputBoxOptions, token?: CancellationToken): Thenable<string | undefined>;
+
+		/**
+		 * Creates a [QuickPick](#QuickPick) to let the user pick an item from a list
+		 * of items of type T.
+		 *
+		 * Note that in many cases the more convenient [window.showQuickPick](#window.showQuickPick)
+		 * is easier to use. [window.createQuickPick](#window.createQuickPick) should be used
+		 * when [window.showQuickPick](#window.showQuickPick) does not offer the required flexibility.
+		 *
+		 * @return A new [QuickPick](#QuickPick).
+		 */
+		export function createQuickPick<T extends QuickPickItem>(): QuickPick<T>;
+
+		/**
+		 * Creates a [InputBox](#InputBox) to let the user enter some text input.
+		 *
+		 * Note that in many cases the more convenient [window.showInputBox](#window.showInputBox)
+		 * is easier to use. [window.createInputBox](#window.createInputBox) should be used
+		 * when [window.showInputBox](#window.showInputBox) does not offer the required flexibility.
+		 *
+		 * @return A new [InputBox](#InputBox).
+		 */
+		export function createInputBox(): InputBox;
+
+		/**
+		 * Creates a new [output channel](#OutputChannel) with the given name.
+		 *
+		 * @param name Human-readable string which will be used to represent the channel in the UI.
+		 */
+		export function createOutputChannel(name: string): OutputChannel;
+
+		/**
+		 * Create and show a new webview panel.
+		 *
+		 * @param viewType Identifies the type of the webview panel.
+		 * @param title Title of the panel.
+		 * @param showOptions Where to show the webview in the editor. If preserveFocus is set, the new webview will not take focus.
+		 * @param options Settings for the new panel.
+		 *
+		 * @return New webview panel.
+		 */
+		export function createWebviewPanel(viewType: string, title: string, showOptions: ViewColumn | { viewColumn: ViewColumn, preserveFocus?: boolean }, options?: WebviewPanelOptions & WebviewOptions): WebviewPanel;
+
+		/**
+		 * Set a message to the status bar. This is a short hand for the more powerful
+		 * status bar [items](#window.createStatusBarItem).
+		 *
+		 * @param text The message to show, supports icon substitution as in status bar [items](#StatusBarItem.text).
+		 * @param hideAfterTimeout Timeout in milliseconds after which the message will be disposed.
+		 * @return A disposable which hides the status bar message.
+		 */
+		export function setStatusBarMessage(text: string, hideAfterTimeout: number): Disposable;
+
+		/**
+		 * Set a message to the status bar. This is a short hand for the more powerful
+		 * status bar [items](#window.createStatusBarItem).
+		 *
+		 * @param text The message to show, supports icon substitution as in status bar [items](#StatusBarItem.text).
+		 * @param hideWhenDone Thenable on which completion (resolve or reject) the message will be disposed.
+		 * @return A disposable which hides the status bar message.
+		 */
+		export function setStatusBarMessage(text: string, hideWhenDone: Thenable<any>): Disposable;
+
+		/**
+		 * Set a message to the status bar. This is a short hand for the more powerful
+		 * status bar [items](#window.createStatusBarItem).
+		 *
+		 * *Note* that status bar messages stack and that they must be disposed when no
+		 * longer used.
+		 *
+		 * @param text The message to show, supports icon substitution as in status bar [items](#StatusBarItem.text).
+		 * @return A disposable which hides the status bar message.
+		 */
+		export function setStatusBarMessage(text: string): Disposable;
+
+		/**
+		 * Show progress in the Source Control viewlet while running the given callback and while
+		 * its returned promise isn't resolve or rejected.
+		 *
+		 * @deprecated Use `withProgress` instead.
+		 *
+		 * @param task A callback returning a promise. Progress increments can be reported with
+		 * the provided [progress](#Progress)-object.
+		 * @return The thenable the task did return.
+		 */
+		export function withScmProgress<R>(task: (progress: Progress<number>) => Thenable<R>): Thenable<R>;
+
+		/**
+		 * Show progress in the editor. Progress is shown while running the given callback
+		 * and while the promise it returned isn't resolved nor rejected. The location at which
+		 * progress should show (and other details) is defined via the passed [`ProgressOptions`](#ProgressOptions).
+		 *
+		 * @param task A callback returning a promise. Progress state can be reported with
+		 * the provided [progress](#Progress)-object.
+		 *
+		 * To report discrete progress, use `increment` to indicate how much work has been completed. Each call with
+		 * a `increment` value will be summed up and reflected as overall progress until 100% is reached (a value of
+		 * e.g. `10` accounts for `10%` of work done).
+		 * Note that currently only `ProgressLocation.Notification` is capable of showing discrete progress.
+		 *
+		 * To monitor if the operation has been cancelled by the user, use the provided [`CancellationToken`](#CancellationToken).
+		 * Note that currently only `ProgressLocation.Notification` is supporting to show a cancel button to cancel the
+		 * long running operation.
+		 *
+		 * @return The thenable the task-callback returned.
+		 */
+		export function withProgress<R>(options: ProgressOptions, task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable<R>): Thenable<R>;
+
+		/**
+		 * Creates a status bar [item](#StatusBarItem).
+		 *
+		 * @param alignment The alignment of the item.
+		 * @param priority The priority of the item. Higher values mean the item should be shown more to the left.
+		 * @return A new status bar item.
+		 */
+		export function createStatusBarItem(alignment?: StatusBarAlignment, priority?: number): StatusBarItem;
+
+		/**
+		 * Creates a [Terminal](#Terminal) with a backing shell process. The cwd of the terminal will be the workspace
+		 * directory if it exists.
+		 *
+		 * @param name Optional human-readable string which will be used to represent the terminal in the UI.
+		 * @param shellPath Optional path to a custom shell executable to be used in the terminal.
+		 * @param shellArgs Optional args for the custom shell executable. A string can be used on Windows only which
+		 * allows specifying shell args in
+		 * [command-line format](https://msdn.microsoft.com/en-au/08dfcab2-eb6e-49a4-80eb-87d4076c98c6).
+		 * @return A new Terminal.
+		 * @throws When running in an environment where a new process cannot be started.
+		 */
+		export function createTerminal(name?: string, shellPath?: string, shellArgs?: string[] | string): Terminal;
+
+		/**
+		 * Creates a [Terminal](#Terminal) with a backing shell process.
+		 *
+		 * @param options A TerminalOptions object describing the characteristics of the new terminal.
+		 * @return A new Terminal.
+		 * @throws When running in an environment where a new process cannot be started.
+		 */
+		export function createTerminal(options: TerminalOptions): Terminal;
+
+		/**
+		 * Creates a [Terminal](#Terminal) where an extension controls its input and output.
+		 *
+		 * @param options An [ExtensionTerminalOptions](#ExtensionTerminalOptions) object describing
+		 * the characteristics of the new terminal.
+		 * @return A new Terminal.
+		 */
+		export function createTerminal(options: ExtensionTerminalOptions): Terminal;
+
+		/**
+		 * Register a [TreeDataProvider](#TreeDataProvider) for the view contributed using the extension point `views`.
+		 * This will allow you to contribute data to the [TreeView](#TreeView) and update if the data changes.
+		 *
+		 * **Note:** To get access to the [TreeView](#TreeView) and perform operations on it, use [createTreeView](#window.createTreeView).
+		 *
+		 * @param viewId Id of the view contributed using the extension point `views`.
+		 * @param treeDataProvider A [TreeDataProvider](#TreeDataProvider) that provides tree data for the view
+		 */
+		export function registerTreeDataProvider<T>(viewId: string, treeDataProvider: TreeDataProvider<T>): Disposable;
+
+		/**
+		 * Create a [TreeView](#TreeView) for the view contributed using the extension point `views`.
+		 * @param viewId Id of the view contributed using the extension point `views`.
+		 * @param options Options for creating the [TreeView](#TreeView)
+		 * @returns a [TreeView](#TreeView).
+		 */
+		export function createTreeView<T>(viewId: string, options: TreeViewOptions<T>): TreeView<T>;
+
+		/**
+		 * Registers a [uri handler](#UriHandler) capable of handling system-wide [uris](#Uri).
+		 * In case there are multiple windows open, the topmost window will handle the uri.
+		 * A uri handler is scoped to the extension it is contributed from; it will only
+		 * be able to handle uris which are directed to the extension itself. A uri must respect
+		 * the following rules:
+		 *
+		 * - The uri-scheme must be `vscode.env.uriScheme`;
+		 * - The uri-authority must be the extension id (e.g. `my.extension`);
+		 * - The uri-path, -query and -fragment parts are arbitrary.
+		 *
+		 * For example, if the `my.extension` extension registers a uri handler, it will only
+		 * be allowed to handle uris with the prefix `product-name://my.extension`.
+		 *
+		 * An extension can only register a single uri handler in its entire activation lifetime.
+		 *
+		 * * *Note:* There is an activation event `onUri` that fires when a uri directed for
+		 * the current extension is about to be handled.
+		 *
+		 * @param handler The uri handler to register for this extension.
+		 */
+		export function registerUriHandler(handler: UriHandler): Disposable;
+
+		/**
+		 * Registers a webview panel serializer.
+		 *
+		 * Extensions that support reviving should have an `"onWebviewPanel:viewType"` activation event and
+		 * make sure that [registerWebviewPanelSerializer](#registerWebviewPanelSerializer) is called during activation.
+		 *
+		 * Only a single serializer may be registered at a time for a given `viewType`.
+		 *
+		 * @param viewType Type of the webview panel that can be serialized.
+		 * @param serializer Webview serializer.
+		 */
+		export function registerWebviewPanelSerializer(viewType: string, serializer: WebviewPanelSerializer): Disposable;
+
+		/**
+		 * Register a new provider for webview views.
+		 *
+		 * @param viewId Unique id of the view. This should match the `id` from the
+		 *   `views` contribution in the package.json.
+		 * @param provider Provider for the webview views.
+		 *
+		 * @return Disposable that unregisters the provider.
+		 */
+		export function registerWebviewViewProvider(viewId: string, provider: WebviewViewProvider, options?: {
+			/**
+			 * Content settings for the webview created for this view.
+			 */
+			readonly webviewOptions?: {
+				/**
+				 * Controls if the webview element itself (iframe) is kept around even when the view
+				 * is no longer visible.
+				 *
+				 * Normally the webview's html context is created when the view becomes visible
+				 * and destroyed when it is hidden. Extensions that have complex state
+				 * or UI can set the `retainContextWhenHidden` to make VS Code keep the webview
+				 * context around, even when the webview moves to a background tab. When a webview using
+				 * `retainContextWhenHidden` becomes hidden, its scripts and other dynamic content are suspended.
+				 * When the view becomes visible again, the context is automatically restored
+				 * in the exact same state it was in originally. You cannot send messages to a
+				 * hidden webview, even with `retainContextWhenHidden` enabled.
+				 *
+				 * `retainContextWhenHidden` has a high memory overhead and should only be used if
+				 * your view's context cannot be quickly saved and restored.
+				 */
+				readonly retainContextWhenHidden?: boolean;
+			};
+		}): Disposable;
+
+		/**
+		 * Register a provider for custom editors for the `viewType` contributed by the `customEditors` extension point.
+		 *
+		 * When a custom editor is opened, VS Code fires an `onCustomEditor:viewType` activation event. Your extension
+		 * must register a [`CustomTextEditorProvider`](#CustomTextEditorProvider), [`CustomReadonlyEditorProvider`](#CustomReadonlyEditorProvider),
+		 * [`CustomEditorProvider`](#CustomEditorProvider)for `viewType` as part of activation.
+		 *
+		 * @param viewType Unique identifier for the custom editor provider. This should match the `viewType` from the
+		 *   `customEditors` contribution point.
+		 * @param provider Provider that resolves custom editors.
+		 * @param options Options for the provider.
+		 *
+		 * @return Disposable that unregisters the provider.
+		 */
+		export function registerCustomEditorProvider(viewType: string, provider: CustomTextEditorProvider | CustomReadonlyEditorProvider | CustomEditorProvider, options?: {
+			/**
+			 * Content settings for the webview panels created for this custom editor.
+			 */
+			readonly webviewOptions?: WebviewPanelOptions;
+
+			/**
+			 * Only applies to `CustomReadonlyEditorProvider | CustomEditorProvider`.
+			 *
+			 * Indicates that the provider allows multiple editor instances to be open at the same time for
+			 * the same resource.
+			 *
+			 * By default, VS Code only allows one editor instance to be open at a time for each resource. If the
+			 * user tries to open a second editor instance for the resource, the first one is instead moved to where
+			 * the second one was to be opened.
+			 *
+			 * When `supportsMultipleEditorsPerDocument` is enabled, users can split and create copies of the custom
+			 * editor. In this case, the custom editor must make sure it can properly synchronize the states of all
+			 * editor instances for a resource so that they are consistent.
+			 */
+			readonly supportsMultipleEditorsPerDocument?: boolean;
+		}): Disposable;
+
+		/**
+		 * Register provider that enables the detection and handling of links within the terminal.
+		 * @param provider The provider that provides the terminal links.
+		 * @return Disposable that unregisters the provider.
+		 */
+		export function registerTerminalLinkProvider(provider: TerminalLinkProvider): Disposable;
+
+		/**
+		 * Register a file decoration provider.
+		 *
+		 * @param provider A [FileDecorationProvider](#FileDecorationProvider).
+		 * @return A [disposable](#Disposable) that unregisters the provider.
+		 */
+		export function registerFileDecorationProvider(provider: FileDecorationProvider): Disposable;
+
+		/**
+		 * The currently active color theme as configured in the settings. The active
+		 * theme can be changed via the `workbench.colorTheme` setting.
+		 */
+		export let activeColorTheme: ColorTheme;
+
+		/**
+		 * An [event](#Event) which fires when the active color theme is changed or has changes.
+		 */
+		export const onDidChangeActiveColorTheme: Event<ColorTheme>;
+	}
+
+	/**
+	 * Options for creating a [TreeView](#TreeView)
+	 */
+	export interface TreeViewOptions<T> {
+
+		/**
+		 * A data provider that provides tree data.
+		 */
+		treeDataProvider: TreeDataProvider<T>;
+
+		/**
+		 * Whether to show collapse all action or not.
+		 */
+		showCollapseAll?: boolean;
+
+		/**
+		 * Whether the tree supports multi-select. When the tree supports multi-select and a command is executed from the tree,
+		 * the first argument to the command is the tree item that the command was executed on and the second argument is an
+		 * array containing all selected tree items.
+		 */
+		canSelectMany?: boolean;
+	}
+
+	/**
+	 * The event that is fired when an element in the [TreeView](#TreeView) is expanded or collapsed
+	 */
+	export interface TreeViewExpansionEvent<T> {
+
+		/**
+		 * Element that is expanded or collapsed.
+		 */
+		readonly element: T;
+
+	}
+
+	/**
+	 * The event that is fired when there is a change in [tree view's selection](#TreeView.selection)
+	 */
+	export interface TreeViewSelectionChangeEvent<T> {
+
+		/**
+		 * Selected elements.
+		 */
+		readonly selection: T[];
+
+	}
+
+	/**
+	 * The event that is fired when there is a change in [tree view's visibility](#TreeView.visible)
+	 */
+	export interface TreeViewVisibilityChangeEvent {
+
+		/**
+		 * `true` if the [tree view](#TreeView) is visible otherwise `false`.
+		 */
+		readonly visible: boolean;
+
+	}
+
+	/**
+	 * Represents a Tree view
+	 */
+	export interface TreeView<T> extends Disposable {
+
+		/**
+		 * Event that is fired when an element is expanded
+		 */
+		readonly onDidExpandElement: Event<TreeViewExpansionEvent<T>>;
+
+		/**
+		 * Event that is fired when an element is collapsed
+		 */
+		readonly onDidCollapseElement: Event<TreeViewExpansionEvent<T>>;
+
+		/**
+		 * Currently selected elements.
+		 */
+		readonly selection: T[];
+
+		/**
+		 * Event that is fired when the [selection](#TreeView.selection) has changed
+		 */
+		readonly onDidChangeSelection: Event<TreeViewSelectionChangeEvent<T>>;
+
+		/**
+		 * `true` if the [tree view](#TreeView) is visible otherwise `false`.
+		 */
+		readonly visible: boolean;
+
+		/**
+		 * Event that is fired when [visibility](#TreeView.visible) has changed
+		 */
+		readonly onDidChangeVisibility: Event<TreeViewVisibilityChangeEvent>;
+
+		/**
+		 * An optional human-readable message that will be rendered in the view.
+		 * Setting the message to null, undefined, or empty string will remove the message from the view.
+		 */
+		message?: string;
+
+		/**
+		 * The tree view title is initially taken from the extension package.json
+		 * Changes to the title property will be properly reflected in the UI in the title of the view.
+		 */
+		title?: string;
+
+		/**
+		 * An optional human-readable description which is rendered less prominently in the title of the view.
+		 * Setting the title description to null, undefined, or empty string will remove the description from the view.
+		 */
+		description?: string;
+
+		/**
+		 * Reveals the given element in the tree view.
+		 * If the tree view is not visible then the tree view is shown and element is revealed.
+		 *
+		 * By default revealed element is selected.
+		 * In order to not to select, set the option `select` to `false`.
+		 * In order to focus, set the option `focus` to `true`.
+		 * In order to expand the revealed element, set the option `expand` to `true`. To expand recursively set `expand` to the number of levels to expand.
+		 * **NOTE:** You can expand only to 3 levels maximum.
+		 *
+		 * **NOTE:** The [TreeDataProvider](#TreeDataProvider) that the `TreeView` [is registered with](#window.createTreeView) with must implement [getParent](#TreeDataProvider.getParent) method to access this API.
+		 */
+		reveal(element: T, options?: { select?: boolean, focus?: boolean, expand?: boolean | number }): Thenable<void>;
+	}
+
+	/**
+	 * A data provider that provides tree data
+	 */
+	export interface TreeDataProvider<T> {
+		/**
+		 * An optional event to signal that an element or root has changed.
+		 * This will trigger the view to update the changed element/root and its children recursively (if shown).
+		 * To signal that root has changed, do not pass any argument or pass `undefined` or `null`.
+		 */
+		onDidChangeTreeData?: Event<T | undefined | null | void>;
+
+		/**
+		 * Get [TreeItem](#TreeItem) representation of the `element`
+		 *
+		 * @param element The element for which [TreeItem](#TreeItem) representation is asked for.
+		 * @return [TreeItem](#TreeItem) representation of the element
+		 */
+		getTreeItem(element: T): TreeItem | Thenable<TreeItem>;
+
+		/**
+		 * Get the children of `element` or root if no element is passed.
+		 *
+		 * @param element The element from which the provider gets children. Can be `undefined`.
+		 * @return Children of `element` or root if no element is passed.
+		 */
+		getChildren(element?: T): ProviderResult<T[]>;
+
+		/**
+		 * Optional method to return the parent of `element`.
+		 * Return `null` or `undefined` if `element` is a child of root.
+		 *
+		 * **NOTE:** This method should be implemented in order to access [reveal](#TreeView.reveal) API.
+		 *
+		 * @param element The element for which the parent has to be returned.
+		 * @return Parent of `element`.
+		 */
+		getParent?(element: T): ProviderResult<T>;
+
+		/**
+		 * Called on hover to resolve the [TreeItem](#TreeItem.tooltip) property if it is undefined.
+		 * Called on tree item click/open to resolve the [TreeItem](#TreeItem.command) property if it is undefined.
+		 * Only properties that were undefined can be resolved in `resolveTreeItem`.
+		 * Functionality may be expanded later to include being called to resolve other missing
+		 * properties on selection and/or on open.
+		 *
+		 * Will only ever be called once per TreeItem.
+		 *
+		 * onDidChangeTreeData should not be triggered from within resolveTreeItem.
+		 *
+		 * *Note* that this function is called when tree items are already showing in the UI.
+		 * Because of that, no property that changes the presentation (label, description, etc.)
+		 * can be changed.
+		 *
+		 * @param item Undefined properties of `item` should be set then `item` should be returned.
+		 * @param element The object associated with the TreeItem.
+		 * @param token A cancellation token.
+		 * @return The resolved tree item or a thenable that resolves to such. It is OK to return the given
+		 * `item`. When no result is returned, the given `item` will be used.
+		 */
+		resolveTreeItem?(item: TreeItem, element: T, token: CancellationToken): ProviderResult<TreeItem>;
+	}
+
+	export class TreeItem {
+		/**
+		 * A human-readable string describing this item. When `falsy`, it is derived from [resourceUri](#TreeItem.resourceUri).
+		 */
+		label?: string | TreeItemLabel;
+
+		/**
+		 * Optional id for the tree item that has to be unique across tree. The id is used to preserve the selection and expansion state of the tree item.
+		 *
+		 * If not provided, an id is generated using the tree item's label. **Note** that when labels change, ids will change and that selection and expansion state cannot be kept stable anymore.
+		 */
+		id?: string;
+
+		/**
+		 * The icon path or [ThemeIcon](#ThemeIcon) for the tree item.
+		 * When `falsy`, [Folder Theme Icon](#ThemeIcon.Folder) is assigned, if item is collapsible otherwise [File Theme Icon](#ThemeIcon.File).
+		 * When a file or folder [ThemeIcon](#ThemeIcon) is specified, icon is derived from the current file icon theme for the specified theme icon using [resourceUri](#TreeItem.resourceUri) (if provided).
+		 */
+		iconPath?: string | Uri | { light: string | Uri; dark: string | Uri } | ThemeIcon;
+
+		/**
+		 * A human-readable string which is rendered less prominent.
+		 * When `true`, it is derived from [resourceUri](#TreeItem.resourceUri) and when `falsy`, it is not shown.
+		 */
+		description?: string | boolean;
+
+		/**
+		 * The [uri](#Uri) of the resource representing this item.
+		 *
+		 * Will be used to derive the [label](#TreeItem.label), when it is not provided.
+		 * Will be used to derive the icon from current file icon theme, when [iconPath](#TreeItem.iconPath) has [ThemeIcon](#ThemeIcon) value.
+		 */
+		resourceUri?: Uri;
+
+		/**
+		 * The tooltip text when you hover over this item.
+		 */
+		tooltip?: string | MarkdownString | undefined;
+
+		/**
+		 * The [command](#Command) that should be executed when the tree item is selected.
+		 *
+		 * Please use `vscode.open` or `vscode.diff` as command IDs when the tree item is opening
+		 * something in the editor. Using these commands ensures that the resulting editor will
+		 * appear consistent with how other built-in trees open editors.
+		 */
+		command?: Command;
+
+		/**
+		 * [TreeItemCollapsibleState](#TreeItemCollapsibleState) of the tree item.
+		 */
+		collapsibleState?: TreeItemCollapsibleState;
+
+		/**
+		 * Context value of the tree item. This can be used to contribute item specific actions in the tree.
+		 * For example, a tree item is given a context value as `folder`. When contributing actions to `view/item/context`
+		 * using `menus` extension point, you can specify context value for key `viewItem` in `when` expression like `viewItem == folder`.
+		 * ```
+		 *	"contributes": {
+		 *		"menus": {
+		 *			"view/item/context": [
+		 *				{
+		 *					"command": "extension.deleteFolder",
+		 *					"when": "viewItem == folder"
+		 *				}
+		 *			]
+		 *		}
+		 *	}
+		 * ```
+		 * This will show action `extension.deleteFolder` only for items with `contextValue` is `folder`.
+		 */
+		contextValue?: string;
+
+		/**
+		 * Accessibility information used when screen reader interacts with this tree item.
+		 * Generally, a TreeItem has no need to set the `role` of the accessibilityInformation;
+		 * however, there are cases where a TreeItem is not displayed in a tree-like way where setting the `role` may make sense.
+		 */
+		accessibilityInformation?: AccessibilityInformation;
+
+		/**
+		 * @param label A human-readable string describing this item
+		 * @param collapsibleState [TreeItemCollapsibleState](#TreeItemCollapsibleState) of the tree item. Default is [TreeItemCollapsibleState.None](#TreeItemCollapsibleState.None)
+		 */
+		constructor(label: string | TreeItemLabel, collapsibleState?: TreeItemCollapsibleState);
+
+		/**
+		 * @param resourceUri The [uri](#Uri) of the resource representing this item.
+		 * @param collapsibleState [TreeItemCollapsibleState](#TreeItemCollapsibleState) of the tree item. Default is [TreeItemCollapsibleState.None](#TreeItemCollapsibleState.None)
+		 */
+		constructor(resourceUri: Uri, collapsibleState?: TreeItemCollapsibleState);
+	}
+
+	/**
+	 * Collapsible state of the tree item
+	 */
+	export enum TreeItemCollapsibleState {
+		/**
+		 * Determines an item can be neither collapsed nor expanded. Implies it has no children.
+		 */
+		None = 0,
+		/**
+		 * Determines an item is collapsed
+		 */
+		Collapsed = 1,
+		/**
+		 * Determines an item is expanded
+		 */
+		Expanded = 2
+	}
+
+	/**
+	 * Label describing the [Tree item](#TreeItem)
+	 */
+	export interface TreeItemLabel {
+
+		/**
+		 * A human-readable string describing the [Tree item](#TreeItem).
+		 */
+		label: string;
+
+		/**
+		 * Ranges in the label to highlight. A range is defined as a tuple of two number where the
+		 * first is the inclusive start index and the second the exclusive end index
+		 */
+		highlights?: [number, number][];
+	}
+
+	/**
+	 * Value-object describing what options a terminal should use.
+	 */
+	export interface TerminalOptions {
+		/**
+		 * A human-readable string which will be used to represent the terminal in the UI.
+		 */
+		name?: string;
+
+		/**
+		 * A path to a custom shell executable to be used in the terminal.
+		 */
+		shellPath?: string;
+
+		/**
+		 * Args for the custom shell executable. A string can be used on Windows only which allows
+		 * specifying shell args in [command-line format](https://msdn.microsoft.com/en-au/08dfcab2-eb6e-49a4-80eb-87d4076c98c6).
+		 */
+		shellArgs?: string[] | string;
+
+		/**
+		 * A path or Uri for the current working directory to be used for the terminal.
+		 */
+		cwd?: string | Uri;
+
+		/**
+		 * Object with environment variables that will be added to the VS Code process.
+		 */
+		env?: { [key: string]: string | null | undefined };
+
+		/**
+		 * Whether the terminal process environment should be exactly as provided in
+		 * `TerminalOptions.env`. When this is false (default), the environment will be based on the
+		 * window's environment and also apply configured platform settings like
+		 * `terminal.integrated.windows.env` on top. When this is true, the complete environment
+		 * must be provided as nothing will be inherited from the process or any configuration.
+		 */
+		strictEnv?: boolean;
+
+		/**
+		 * When enabled the terminal will run the process as normal but not be surfaced to the user
+		 * until `Terminal.show` is called. The typical usage for this is when you need to run
+		 * something that may need interactivity but only want to tell the user about it when
+		 * interaction is needed. Note that the terminals will still be exposed to all extensions
+		 * as normal.
+		 */
+		hideFromUser?: boolean;
+	}
+
+	/**
+	 * Value-object describing what options a virtual process terminal should use.
+	 */
+	export interface ExtensionTerminalOptions {
+		/**
+		 * A human-readable string which will be used to represent the terminal in the UI.
+		 */
+		name: string;
+
+		/**
+		 * An implementation of [Pseudoterminal](#Pseudoterminal) that allows an extension to
+		 * control a terminal.
+		 */
+		pty: Pseudoterminal;
+	}
+
+	/**
+	 * Defines the interface of a terminal pty, enabling extensions to control a terminal.
+	 */
+	interface Pseudoterminal {
+		/**
+		 * An event that when fired will write data to the terminal. Unlike
+		 * [Terminal.sendText](#Terminal.sendText) which sends text to the underlying child
+		 * pseudo-device (the child), this will write the text to parent pseudo-device (the
+		 * _terminal_ itself).
+		 *
+		 * Note writing `\n` will just move the cursor down 1 row, you need to write `\r` as well
+		 * to move the cursor to the left-most cell.
+		 *
+		 * **Example:** Write red text to the terminal
+		 * ```typescript
+		 * const writeEmitter = new vscode.EventEmitter<string>();
+		 * const pty: vscode.Pseudoterminal = {
+		 *   onDidWrite: writeEmitter.event,
+		 *   open: () => writeEmitter.fire('\x1b[31mHello world\x1b[0m'),
+		 *   close: () => {}
+		 * };
+		 * vscode.window.createTerminal({ name: 'My terminal', pty });
+		 * ```
+		 *
+		 * **Example:** Move the cursor to the 10th row and 20th column and write an asterisk
+		 * ```typescript
+		 * writeEmitter.fire('\x1b[10;20H*');
+		 * ```
+		 */
+		onDidWrite: Event<string>;
+
+		/**
+		 * An event that when fired allows overriding the [dimensions](#Pseudoterminal.setDimensions) of the
+		 * terminal. Note that when set, the overridden dimensions will only take effect when they
+		 * are lower than the actual dimensions of the terminal (ie. there will never be a scroll
+		 * bar). Set to `undefined` for the terminal to go back to the regular dimensions (fit to
+		 * the size of the panel).
+		 *
+		 * **Example:** Override the dimensions of a terminal to 20 columns and 10 rows
+		 * ```typescript
+		 * const dimensionsEmitter = new vscode.EventEmitter<vscode.TerminalDimensions>();
+		 * const pty: vscode.Pseudoterminal = {
+		 *   onDidWrite: writeEmitter.event,
+		 *   onDidOverrideDimensions: dimensionsEmitter.event,
+		 *   open: () => {
+		 *     dimensionsEmitter.fire({
+		 *       columns: 20,
+		 *       rows: 10
+		 *     });
+		 *   },
+		 *   close: () => {}
+		 * };
+		 * vscode.window.createTerminal({ name: 'My terminal', pty });
+		 * ```
+		 */
+		onDidOverrideDimensions?: Event<TerminalDimensions | undefined>;
+
+		/**
+		 * An event that when fired will signal that the pty is closed and dispose of the terminal.
+		 *
+		 * A number can be used to provide an exit code for the terminal. Exit codes must be
+		 * positive and a non-zero exit codes signals failure which shows a notification for a
+		 * regular terminal and allows dependent tasks to proceed when used with the
+		 * `CustomExecution` API.
+		 *
+		 * **Example:** Exit the terminal when "y" is pressed, otherwise show a notification.
+		 * ```typescript
+		 * const writeEmitter = new vscode.EventEmitter<string>();
+		 * const closeEmitter = new vscode.EventEmitter<vscode.TerminalDimensions>();
+		 * const pty: vscode.Pseudoterminal = {
+		 *   onDidWrite: writeEmitter.event,
+		 *   onDidClose: closeEmitter.event,
+		 *   open: () => writeEmitter.fire('Press y to exit successfully'),
+		 *   close: () => {},
+		 *   handleInput: data => {
+		 *     if (data !== 'y') {
+		 *       vscode.window.showInformationMessage('Something went wrong');
+		 *     }
+		 *     closeEmitter.fire();
+		 *   }
+		 * };
+		 * vscode.window.createTerminal({ name: 'Exit example', pty });
+		 * ```
+		 */
+		onDidClose?: Event<void | number>;
+
+		/**
+		 * Implement to handle when the pty is open and ready to start firing events.
+		 *
+		 * @param initialDimensions The dimensions of the terminal, this will be undefined if the
+		 * terminal panel has not been opened before this is called.
+		 */
+		open(initialDimensions: TerminalDimensions | undefined): void;
+
+		/**
+		 * Implement to handle when the terminal is closed by an act of the user.
+		 */
+		close(): void;
+
+		/**
+		 * Implement to handle incoming keystrokes in the terminal or when an extension calls
+		 * [Terminal.sendText](#Terminal.sendText). `data` contains the keystrokes/text serialized into
+		 * their corresponding VT sequence representation.
+		 *
+		 * @param data The incoming data.
+		 *
+		 * **Example:** Echo input in the terminal. The sequence for enter (`\r`) is translated to
+		 * CRLF to go to a new line and move the cursor to the start of the line.
+		 * ```typescript
+		 * const writeEmitter = new vscode.EventEmitter<string>();
+		 * const pty: vscode.Pseudoterminal = {
+		 *   onDidWrite: writeEmitter.event,
+		 *   open: () => {},
+		 *   close: () => {},
+		 *   handleInput: data => writeEmitter.fire(data === '\r' ? '\r\n' : data)
+		 * };
+		 * vscode.window.createTerminal({ name: 'Local echo', pty });
+		 * ```
+		 */
+		handleInput?(data: string): void;
+
+		/**
+		 * Implement to handle when the number of rows and columns that fit into the terminal panel
+		 * changes, for example when font size changes or when the panel is resized. The initial
+		 * state of a terminal's dimensions should be treated as `undefined` until this is triggered
+		 * as the size of a terminal isn't known until it shows up in the user interface.
+		 *
+		 * When dimensions are overridden by
+		 * [onDidOverrideDimensions](#Pseudoterminal.onDidOverrideDimensions), `setDimensions` will
+		 * continue to be called with the regular panel dimensions, allowing the extension continue
+		 * to react dimension changes.
+		 *
+		 * @param dimensions The new dimensions.
+		 */
+		setDimensions?(dimensions: TerminalDimensions): void;
+	}
+
+	/**
+	 * Represents the dimensions of a terminal.
+	 */
+	export interface TerminalDimensions {
+		/**
+		 * The number of columns in the terminal.
+		 */
+		readonly columns: number;
+
+		/**
+		 * The number of rows in the terminal.
+		 */
+		readonly rows: number;
+	}
+
+	/**
+	 * Represents how a terminal exited.
+	 */
+	export interface TerminalExitStatus {
+		/**
+		 * The exit code that a terminal exited with, it can have the following values:
+		 * - Zero: the terminal process or custom execution succeeded.
+		 * - Non-zero: the terminal process or custom execution failed.
+		 * - `undefined`: the user forcibly closed the terminal or a custom execution exited
+		 *   without providing an exit code.
+		 */
+		readonly code: number | undefined;
+	}
+
+	/**
+	 * A type of mutation that can be applied to an environment variable.
+	 */
+	export enum EnvironmentVariableMutatorType {
+		/**
+		 * Replace the variable's existing value.
+		 */
+		Replace = 1,
+		/**
+		 * Append to the end of the variable's existing value.
+		 */
+		Append = 2,
+		/**
+		 * Prepend to the start of the variable's existing value.
+		 */
+		Prepend = 3
+	}
+
+	/**
+	 * A type of mutation and its value to be applied to an environment variable.
+	 */
+	export interface EnvironmentVariableMutator {
+		/**
+		 * The type of mutation that will occur to the variable.
+		 */
+		readonly type: EnvironmentVariableMutatorType;
+
+		/**
+		 * The value to use for the variable.
+		 */
+		readonly value: string;
+	}
+
+	/**
+	 * A collection of mutations that an extension can apply to a process environment.
+	 */
+	export interface EnvironmentVariableCollection {
+		/**
+		 * Whether the collection should be cached for the workspace and applied to the terminal
+		 * across window reloads. When true the collection will be active immediately such when the
+		 * window reloads. Additionally, this API will return the cached version if it exists. The
+		 * collection will be invalidated when the extension is uninstalled or when the collection
+		 * is cleared. Defaults to true.
+		 */
+		persistent: boolean;
+
+		/**
+		 * Replace an environment variable with a value.
+		 *
+		 * Note that an extension can only make a single change to any one variable, so this will
+		 * overwrite any previous calls to replace, append or prepend.
+		 *
+		 * @param variable The variable to replace.
+		 * @param value The value to replace the variable with.
+		 */
+		replace(variable: string, value: string): void;
+
+		/**
+		 * Append a value to an environment variable.
+		 *
+		 * Note that an extension can only make a single change to any one variable, so this will
+		 * overwrite any previous calls to replace, append or prepend.
+		 *
+		 * @param variable The variable to append to.
+		 * @param value The value to append to the variable.
+		 */
+		append(variable: string, value: string): void;
+
+		/**
+		 * Prepend a value to an environment variable.
+		 *
+		 * Note that an extension can only make a single change to any one variable, so this will
+		 * overwrite any previous calls to replace, append or prepend.
+		 *
+		 * @param variable The variable to prepend.
+		 * @param value The value to prepend to the variable.
+		 */
+		prepend(variable: string, value: string): void;
+
+		/**
+		 * Gets the mutator that this collection applies to a variable, if any.
+		 *
+		 * @param variable The variable to get the mutator for.
+		 */
+		get(variable: string): EnvironmentVariableMutator | undefined;
+
+		/**
+		 * Iterate over each mutator in this collection.
+		 *
+		 * @param callback Function to execute for each entry.
+		 * @param thisArg The `this` context used when invoking the handler function.
+		 */
+		forEach(callback: (variable: string, mutator: EnvironmentVariableMutator, collection: EnvironmentVariableCollection) => any, thisArg?: any): void;
+
+		/**
+		 * Deletes this collection's mutator for a variable.
+		 *
+		 * @param variable The variable to delete the mutator for.
+		 */
+		delete(variable: string): void;
+
+		/**
+		 * Clears all mutators from this collection.
+		 */
+		clear(): void;
+	}
+
+	/**
+	 * A location in the editor at which progress information can be shown. It depends on the
+	 * location how progress is visually represented.
+	 */
+	export enum ProgressLocation {
+
+		/**
+		 * Show progress for the source control viewlet, as overlay for the icon and as progress bar
+		 * inside the viewlet (when visible). Neither supports cancellation nor discrete progress.
+		 */
+		SourceControl = 1,
+
+		/**
+		 * Show progress in the status bar of the editor. Neither supports cancellation nor discrete progress.
+		 */
+		Window = 10,
+
+		/**
+		 * Show progress as notification with an optional cancel button. Supports to show infinite and discrete progress.
+		 */
+		Notification = 15
+	}
+
+	/**
+	 * Value-object describing where and how progress should show.
+	 */
+	export interface ProgressOptions {
+
+		/**
+		 * The location at which progress should show.
+		 */
+		location: ProgressLocation | { viewId: string };
+
+		/**
+		 * A human-readable string which will be used to describe the
+		 * operation.
+		 */
+		title?: string;
+
+		/**
+		 * Controls if a cancel button should show to allow the user to
+		 * cancel the long running operation.  Note that currently only
+		 * `ProgressLocation.Notification` is supporting to show a cancel
+		 * button.
+		 */
+		cancellable?: boolean;
+	}
+
+	/**
+	 * A light-weight user input UI that is initially not visible. After
+	 * configuring it through its properties the extension can make it
+	 * visible by calling [QuickInput.show](#QuickInput.show).
+	 *
+	 * There are several reasons why this UI might have to be hidden and
+	 * the extension will be notified through [QuickInput.onDidHide](#QuickInput.onDidHide).
+	 * (Examples include: an explicit call to [QuickInput.hide](#QuickInput.hide),
+	 * the user pressing Esc, some other input UI opening, etc.)
+	 *
+	 * A user pressing Enter or some other gesture implying acceptance
+	 * of the current state does not automatically hide this UI component.
+	 * It is up to the extension to decide whether to accept the user's input
+	 * and if the UI should indeed be hidden through a call to [QuickInput.hide](#QuickInput.hide).
+	 *
+	 * When the extension no longer needs this input UI, it should
+	 * [QuickInput.dispose](#QuickInput.dispose) it to allow for freeing up
+	 * any resources associated with it.
+	 *
+	 * See [QuickPick](#QuickPick) and [InputBox](#InputBox) for concrete UIs.
+	 */
+	export interface QuickInput {
+
+		/**
+		 * An optional title.
+		 */
+		title: string | undefined;
+
+		/**
+		 * An optional current step count.
+		 */
+		step: number | undefined;
+
+		/**
+		 * An optional total step count.
+		 */
+		totalSteps: number | undefined;
+
+		/**
+		 * If the UI should allow for user input. Defaults to true.
+		 *
+		 * Change this to false, e.g., while validating user input or
+		 * loading data for the next step in user input.
+		 */
+		enabled: boolean;
+
+		/**
+		 * If the UI should show a progress indicator. Defaults to false.
+		 *
+		 * Change this to true, e.g., while loading more data or validating
+		 * user input.
+		 */
+		busy: boolean;
+
+		/**
+		 * If the UI should stay open even when loosing UI focus. Defaults to false.
+		 */
+		ignoreFocusOut: boolean;
+
+		/**
+		 * Makes the input UI visible in its current configuration. Any other input
+		 * UI will first fire an [QuickInput.onDidHide](#QuickInput.onDidHide) event.
+		 */
+		show(): void;
+
+		/**
+		 * Hides this input UI. This will also fire an [QuickInput.onDidHide](#QuickInput.onDidHide)
+		 * event.
+		 */
+		hide(): void;
+
+		/**
+		 * An event signaling when this input UI is hidden.
+		 *
+		 * There are several reasons why this UI might have to be hidden and
+		 * the extension will be notified through [QuickInput.onDidHide](#QuickInput.onDidHide).
+		 * (Examples include: an explicit call to [QuickInput.hide](#QuickInput.hide),
+		 * the user pressing Esc, some other input UI opening, etc.)
+		 */
+		onDidHide: Event<void>;
+
+		/**
+		 * Dispose of this input UI and any associated resources. If it is still
+		 * visible, it is first hidden. After this call the input UI is no longer
+		 * functional and no additional methods or properties on it should be
+		 * accessed. Instead a new input UI should be created.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * A concrete [QuickInput](#QuickInput) to let the user pick an item from a
+	 * list of items of type T. The items can be filtered through a filter text field and
+	 * there is an option [canSelectMany](#QuickPick.canSelectMany) to allow for
+	 * selecting multiple items.
+	 *
+	 * Note that in many cases the more convenient [window.showQuickPick](#window.showQuickPick)
+	 * is easier to use. [window.createQuickPick](#window.createQuickPick) should be used
+	 * when [window.showQuickPick](#window.showQuickPick) does not offer the required flexibility.
+	 */
+	export interface QuickPick<T extends QuickPickItem> extends QuickInput {
+
+		/**
+		 * Current value of the filter text.
+		 */
+		value: string;
+
+		/**
+		 * Optional placeholder in the filter text.
+		 */
+		placeholder: string | undefined;
+
+		/**
+		 * An event signaling when the value of the filter text has changed.
+		 */
+		readonly onDidChangeValue: Event<string>;
+
+		/**
+		 * An event signaling when the user indicated acceptance of the selected item(s).
+		 */
+		readonly onDidAccept: Event<void>;
+
+		/**
+		 * Buttons for actions in the UI.
+		 */
+		buttons: ReadonlyArray<QuickInputButton>;
+
+		/**
+		 * An event signaling when a button was triggered.
+		 */
+		readonly onDidTriggerButton: Event<QuickInputButton>;
+
+		/**
+		 * Items to pick from.
+		 */
+		items: ReadonlyArray<T>;
+
+		/**
+		 * If multiple items can be selected at the same time. Defaults to false.
+		 */
+		canSelectMany: boolean;
+
+		/**
+		 * If the filter text should also be matched against the description of the items. Defaults to false.
+		 */
+		matchOnDescription: boolean;
+
+		/**
+		 * If the filter text should also be matched against the detail of the items. Defaults to false.
+		 */
+		matchOnDetail: boolean;
+
+		/**
+		 * Active items. This can be read and updated by the extension.
+		 */
+		activeItems: ReadonlyArray<T>;
+
+		/**
+		 * An event signaling when the active items have changed.
+		 */
+		readonly onDidChangeActive: Event<T[]>;
+
+		/**
+		 * Selected items. This can be read and updated by the extension.
+		 */
+		selectedItems: ReadonlyArray<T>;
+
+		/**
+		 * An event signaling when the selected items have changed.
+		 */
+		readonly onDidChangeSelection: Event<T[]>;
+	}
+
+	/**
+	 * A concrete [QuickInput](#QuickInput) to let the user input a text value.
+	 *
+	 * Note that in many cases the more convenient [window.showInputBox](#window.showInputBox)
+	 * is easier to use. [window.createInputBox](#window.createInputBox) should be used
+	 * when [window.showInputBox](#window.showInputBox) does not offer the required flexibility.
+	 */
+	export interface InputBox extends QuickInput {
+
+		/**
+		 * Current input value.
+		 */
+		value: string;
+
+		/**
+		 * Optional placeholder in the filter text.
+		 */
+		placeholder: string | undefined;
+
+		/**
+		 * If the input value should be hidden. Defaults to false.
+		 */
+		password: boolean;
+
+		/**
+		 * An event signaling when the value has changed.
+		 */
+		readonly onDidChangeValue: Event<string>;
+
+		/**
+		 * An event signaling when the user indicated acceptance of the input value.
+		 */
+		readonly onDidAccept: Event<void>;
+
+		/**
+		 * Buttons for actions in the UI.
+		 */
+		buttons: ReadonlyArray<QuickInputButton>;
+
+		/**
+		 * An event signaling when a button was triggered.
+		 */
+		readonly onDidTriggerButton: Event<QuickInputButton>;
+
+		/**
+		 * An optional prompt text providing some ask or explanation to the user.
+		 */
+		prompt: string | undefined;
+
+		/**
+		 * An optional validation message indicating a problem with the current input value.
+		 */
+		validationMessage: string | undefined;
+	}
+
+	/**
+	 * Button for an action in a [QuickPick](#QuickPick) or [InputBox](#InputBox).
+	 */
+	export interface QuickInputButton {
+
+		/**
+		 * Icon for the button.
+		 */
+		readonly iconPath: Uri | { light: Uri; dark: Uri } | ThemeIcon;
+
+		/**
+		 * An optional tooltip.
+		 */
+		readonly tooltip?: string | undefined;
+	}
+
+	/**
+	 * Predefined buttons for [QuickPick](#QuickPick) and [InputBox](#InputBox).
+	 */
+	export class QuickInputButtons {
+
+		/**
+		 * A back button for [QuickPick](#QuickPick) and [InputBox](#InputBox).
+		 *
+		 * When a navigation 'back' button is needed this one should be used for consistency.
+		 * It comes with a predefined icon, tooltip and location.
+		 */
+		static readonly Back: QuickInputButton;
+
+		/**
+		 * @hidden
+		 */
+		private constructor();
+	}
+
+	/**
+	 * An event describing an individual change in the text of a [document](#TextDocument).
+	 */
+	export interface TextDocumentContentChangeEvent {
+		/**
+		 * The range that got replaced.
+		 */
+		readonly range: Range;
+		/**
+		 * The offset of the range that got replaced.
+		 */
+		readonly rangeOffset: number;
+		/**
+		 * The length of the range that got replaced.
+		 */
+		readonly rangeLength: number;
+		/**
+		 * The new text for the range.
+		 */
+		readonly text: string;
+	}
+
+	/**
+	 * An event describing a transactional [document](#TextDocument) change.
+	 */
+	export interface TextDocumentChangeEvent {
+
+		/**
+		 * The affected document.
+		 */
+		readonly document: TextDocument;
+
+		/**
+		 * An array of content changes.
+		 */
+		readonly contentChanges: ReadonlyArray<TextDocumentContentChangeEvent>;
+	}
+
+	/**
+	 * Represents reasons why a text document is saved.
+	 */
+	export enum TextDocumentSaveReason {
+
+		/**
+		 * Manually triggered, e.g. by the user pressing save, by starting debugging,
+		 * or by an API call.
+		 */
+		Manual = 1,
+
+		/**
+		 * Automatic after a delay.
+		 */
+		AfterDelay = 2,
+
+		/**
+		 * When the editor lost focus.
+		 */
+		FocusOut = 3
+	}
+
+	/**
+	 * An event that is fired when a [document](#TextDocument) will be saved.
+	 *
+	 * To make modifications to the document before it is being saved, call the
+	 * [`waitUntil`](#TextDocumentWillSaveEvent.waitUntil)-function with a thenable
+	 * that resolves to an array of [text edits](#TextEdit).
+	 */
+	export interface TextDocumentWillSaveEvent {
+
+		/**
+		 * The document that will be saved.
+		 */
+		readonly document: TextDocument;
+
+		/**
+		 * The reason why save was triggered.
+		 */
+		readonly reason: TextDocumentSaveReason;
+
+		/**
+		 * Allows to pause the event loop and to apply [pre-save-edits](#TextEdit).
+		 * Edits of subsequent calls to this function will be applied in order. The
+		 * edits will be *ignored* if concurrent modifications of the document happened.
+		 *
+		 * *Note:* This function can only be called during event dispatch and not
+		 * in an asynchronous manner:
+		 *
+		 * ```ts
+		 * workspace.onWillSaveTextDocument(event => {
+		 * 	// async, will *throw* an error
+		 * 	setTimeout(() => event.waitUntil(promise));
+		 *
+		 * 	// sync, OK
+		 * 	event.waitUntil(promise);
+		 * })
+		 * ```
+		 *
+		 * @param thenable A thenable that resolves to [pre-save-edits](#TextEdit).
+		 */
+		waitUntil(thenable: Thenable<TextEdit[]>): void;
+
+		/**
+		 * Allows to pause the event loop until the provided thenable resolved.
+		 *
+		 * *Note:* This function can only be called during event dispatch.
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<any>): void;
+	}
+
+	/**
+	 * An event that is fired when files are going to be created.
+	 *
+	 * To make modifications to the workspace before the files are created,
+	 * call the [`waitUntil](#FileWillCreateEvent.waitUntil)-function with a
+	 * thenable that resolves to a [workspace edit](#WorkspaceEdit).
+	 */
+	export interface FileWillCreateEvent {
+
+		/**
+		 * The files that are going to be created.
+		 */
+		readonly files: ReadonlyArray<Uri>;
+
+		/**
+		 * Allows to pause the event and to apply a [workspace edit](#WorkspaceEdit).
+		 *
+		 * *Note:* This function can only be called during event dispatch and not
+		 * in an asynchronous manner:
+		 *
+		 * ```ts
+		 * workspace.onWillCreateFiles(event => {
+		 * 	// async, will *throw* an error
+		 * 	setTimeout(() => event.waitUntil(promise));
+		 *
+		 * 	// sync, OK
+		 * 	event.waitUntil(promise);
+		 * })
+		 * ```
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<WorkspaceEdit>): void;
+
+		/**
+		 * Allows to pause the event until the provided thenable resolves.
+		 *
+		 * *Note:* This function can only be called during event dispatch.
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<any>): void;
+	}
+
+	/**
+	 * An event that is fired after files are created.
+	 */
+	export interface FileCreateEvent {
+
+		/**
+		 * The files that got created.
+		 */
+		readonly files: ReadonlyArray<Uri>;
+	}
+
+	/**
+	 * An event that is fired when files are going to be deleted.
+	 *
+	 * To make modifications to the workspace before the files are deleted,
+	 * call the [`waitUntil](#FileWillCreateEvent.waitUntil)-function with a
+	 * thenable that resolves to a [workspace edit](#WorkspaceEdit).
+	 */
+	export interface FileWillDeleteEvent {
+
+		/**
+		 * The files that are going to be deleted.
+		 */
+		readonly files: ReadonlyArray<Uri>;
+
+		/**
+		 * Allows to pause the event and to apply a [workspace edit](#WorkspaceEdit).
+		 *
+		 * *Note:* This function can only be called during event dispatch and not
+		 * in an asynchronous manner:
+		 *
+		 * ```ts
+		 * workspace.onWillCreateFiles(event => {
+		 * 	// async, will *throw* an error
+		 * 	setTimeout(() => event.waitUntil(promise));
+		 *
+		 * 	// sync, OK
+		 * 	event.waitUntil(promise);
+		 * })
+		 * ```
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<WorkspaceEdit>): void;
+
+		/**
+		 * Allows to pause the event until the provided thenable resolves.
+		 *
+		 * *Note:* This function can only be called during event dispatch.
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<any>): void;
+	}
+
+	/**
+	 * An event that is fired after files are deleted.
+	 */
+	export interface FileDeleteEvent {
+
+		/**
+		 * The files that got deleted.
+		 */
+		readonly files: ReadonlyArray<Uri>;
+	}
+
+	/**
+	 * An event that is fired when files are going to be renamed.
+	 *
+	 * To make modifications to the workspace before the files are renamed,
+	 * call the [`waitUntil](#FileWillCreateEvent.waitUntil)-function with a
+	 * thenable that resolves to a [workspace edit](#WorkspaceEdit).
+	 */
+	export interface FileWillRenameEvent {
+
+		/**
+		 * The files that are going to be renamed.
+		 */
+		readonly files: ReadonlyArray<{ oldUri: Uri, newUri: Uri }>;
+
+		/**
+		 * Allows to pause the event and to apply a [workspace edit](#WorkspaceEdit).
+		 *
+		 * *Note:* This function can only be called during event dispatch and not
+		 * in an asynchronous manner:
+		 *
+		 * ```ts
+		 * workspace.onWillCreateFiles(event => {
+		 * 	// async, will *throw* an error
+		 * 	setTimeout(() => event.waitUntil(promise));
+		 *
+		 * 	// sync, OK
+		 * 	event.waitUntil(promise);
+		 * })
+		 * ```
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<WorkspaceEdit>): void;
+
+		/**
+		 * Allows to pause the event until the provided thenable resolves.
+		 *
+		 * *Note:* This function can only be called during event dispatch.
+		 *
+		 * @param thenable A thenable that delays saving.
+		 */
+		waitUntil(thenable: Thenable<any>): void;
+	}
+
+	/**
+	 * An event that is fired after files are renamed.
+	 */
+	export interface FileRenameEvent {
+
+		/**
+		 * The files that got renamed.
+		 */
+		readonly files: ReadonlyArray<{ oldUri: Uri, newUri: Uri }>;
+	}
+
+	/**
+	 * An event describing a change to the set of [workspace folders](#workspace.workspaceFolders).
+	 */
+	export interface WorkspaceFoldersChangeEvent {
+		/**
+		 * Added workspace folders.
+		 */
+		readonly added: ReadonlyArray<WorkspaceFolder>;
+
+		/**
+		 * Removed workspace folders.
+		 */
+		readonly removed: ReadonlyArray<WorkspaceFolder>;
+	}
+
+	/**
+	 * A workspace folder is one of potentially many roots opened by the editor. All workspace folders
+	 * are equal which means there is no notion of an active or primary workspace folder.
+	 */
+	export interface WorkspaceFolder {
+
+		/**
+		 * The associated uri for this workspace folder.
+		 *
+		 * *Note:* The [Uri](#Uri)-type was intentionally chosen such that future releases of the editor can support
+		 * workspace folders that are not stored on the local disk, e.g. `ftp://server/workspaces/foo`.
+		 */
+		readonly uri: Uri;
+
+		/**
+		 * The name of this workspace folder. Defaults to
+		 * the basename of its [uri-path](#Uri.path)
+		 */
+		readonly name: string;
+
+		/**
+		 * The ordinal number of this workspace folder.
+		 */
+		readonly index: number;
+	}
+
+	/**
+	 * Namespace for dealing with the current workspace. A workspace is the collection of one
+	 * or more folders that are opened in a VS Code window (instance).
+	 *
+	 * It is also possible to open VS Code without a workspace. For example, when you open a
+	 * new VS Code window by selecting a file from your platform's File menu, you will not be
+	 * inside a workspace. In this mode, some of VS Code's capabilities are reduced but you can
+	 * still open text files and edit them.
+	 *
+	 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information on
+	 * the concept of workspaces in VS Code.
+	 *
+	 * The workspace offers support for [listening](#workspace.createFileSystemWatcher) to fs
+	 * events and for [finding](#workspace.findFiles) files. Both perform well and run _outside_
+	 * the editor-process so that they should be always used instead of nodejs-equivalents.
+	 */
+	export namespace workspace {
+
+		/**
+		 * A [file system](#FileSystem) instance that allows to interact with local and remote
+		 * files, e.g. `vscode.workspace.fs.readDirectory(someUri)` allows to retrieve all entries
+		 * of a directory or `vscode.workspace.fs.stat(anotherUri)` returns the meta data for a
+		 * file.
+		 */
+		export const fs: FileSystem;
+
+		/**
+		 * The workspace folder that is open in VS Code. `undefined` when no workspace
+		 * has been opened.
+		 *
+		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information
+		 * on workspaces in VS Code.
+		 *
+		 * @deprecated Use [`workspaceFolders`](#workspace.workspaceFolders) instead.
+		 */
+		export const rootPath: string | undefined;
+
+		/**
+		 * List of workspace folders that are open in VS Code. `undefined when no workspace
+		 * has been opened.
+		 *
+		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information
+		 * on workspaces in VS Code.
+		 *
+		 * *Note* that the first entry corresponds to the value of `rootPath`.
+		 */
+		export const workspaceFolders: ReadonlyArray<WorkspaceFolder> | undefined;
+
+		/**
+		 * The name of the workspace. `undefined` when no workspace
+		 * has been opened.
+		 *
+		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information on
+		 * the concept of workspaces in VS Code.
+		 */
+		export const name: string | undefined;
+
+		/**
+		 * The location of the workspace file, for example:
+		 *
+		 * `file:///Users/name/Development/myProject.code-workspace`
+		 *
+		 * or
+		 *
+		 * `untitled:1555503116870`
+		 *
+		 * for a workspace that is untitled and not yet saved.
+		 *
+		 * Depending on the workspace that is opened, the value will be:
+		 *  * `undefined` when no workspace is opened
+		 *  * the path of the workspace file as `Uri` otherwise. if the workspace
+		 * is untitled, the returned URI will use the `untitled:` scheme
+		 *
+		 * The location can e.g. be used with the `vscode.openFolder` command to
+		 * open the workspace again after it has been closed.
+		 *
+		 * **Example:**
+		 * ```typescript
+		 * vscode.commands.executeCommand('vscode.openFolder', uriOfWorkspace);
+		 * ```
+		 *
+		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information on
+		 * the concept of workspaces in VS Code.
+		 *
+		 * **Note:** it is not advised to use `workspace.workspaceFile` to write
+		 * configuration data into the file. You can use `workspace.getConfiguration().update()`
+		 * for that purpose which will work both when a single folder is opened as
+		 * well as an untitled or saved workspace.
+		 */
+		export const workspaceFile: Uri | undefined;
+
+		/**
+		 * An event that is emitted when a workspace folder is added or removed.
+		 */
+		export const onDidChangeWorkspaceFolders: Event<WorkspaceFoldersChangeEvent>;
+
+		/**
+		 * Returns the [workspace folder](#WorkspaceFolder) that contains a given uri.
+		 * * returns `undefined` when the given uri doesn't match any workspace folder
+		 * * returns the *input* when the given uri is a workspace folder itself
+		 *
+		 * @param uri An uri.
+		 * @return A workspace folder or `undefined`
+		 */
+		export function getWorkspaceFolder(uri: Uri): WorkspaceFolder | undefined;
+
+		/**
+		 * Returns a path that is relative to the workspace folder or folders.
+		 *
+		 * When there are no [workspace folders](#workspace.workspaceFolders) or when the path
+		 * is not contained in them, the input is returned.
+		 *
+		 * @param pathOrUri A path or uri. When a uri is given its [fsPath](#Uri.fsPath) is used.
+		 * @param includeWorkspaceFolder When `true` and when the given path is contained inside a
+		 * workspace folder the name of the workspace is prepended. Defaults to `true` when there are
+		 * multiple workspace folders and `false` otherwise.
+		 * @return A path relative to the root or the input.
+		 */
+		export function asRelativePath(pathOrUri: string | Uri, includeWorkspaceFolder?: boolean): string;
+
+		/**
+		 * This method replaces `deleteCount` [workspace folders](#workspace.workspaceFolders) starting at index `start`
+		 * by an optional set of `workspaceFoldersToAdd` on the `vscode.workspace.workspaceFolders` array. This "splice"
+		 * behavior can be used to add, remove and change workspace folders in a single operation.
+		 *
+		 * If the first workspace folder is added, removed or changed, the currently executing extensions (including the
+		 * one that called this method) will be terminated and restarted so that the (deprecated) `rootPath` property is
+		 * updated to point to the first workspace folder.
+		 *
+		 * Use the [`onDidChangeWorkspaceFolders()`](#onDidChangeWorkspaceFolders) event to get notified when the
+		 * workspace folders have been updated.
+		 *
+		 * **Example:** adding a new workspace folder at the end of workspace folders
+		 * ```typescript
+		 * workspace.updateWorkspaceFolders(workspace.workspaceFolders ? workspace.workspaceFolders.length : 0, null, { uri: ...});
+		 * ```
+		 *
+		 * **Example:** removing the first workspace folder
+		 * ```typescript
+		 * workspace.updateWorkspaceFolders(0, 1);
+		 * ```
+		 *
+		 * **Example:** replacing an existing workspace folder with a new one
+		 * ```typescript
+		 * workspace.updateWorkspaceFolders(0, 1, { uri: ...});
+		 * ```
+		 *
+		 * It is valid to remove an existing workspace folder and add it again with a different name
+		 * to rename that folder.
+		 *
+		 * **Note:** it is not valid to call [updateWorkspaceFolders()](#updateWorkspaceFolders) multiple times
+		 * without waiting for the [`onDidChangeWorkspaceFolders()`](#onDidChangeWorkspaceFolders) to fire.
+		 *
+		 * @param start the zero-based location in the list of currently opened [workspace folders](#WorkspaceFolder)
+		 * from which to start deleting workspace folders.
+		 * @param deleteCount the optional number of workspace folders to remove.
+		 * @param workspaceFoldersToAdd the optional variable set of workspace folders to add in place of the deleted ones.
+		 * Each workspace is identified with a mandatory URI and an optional name.
+		 * @return true if the operation was successfully started and false otherwise if arguments were used that would result
+		 * in invalid workspace folder state (e.g. 2 folders with the same URI).
+		 */
+		export function updateWorkspaceFolders(start: number, deleteCount: number | undefined | null, ...workspaceFoldersToAdd: { uri: Uri, name?: string }[]): boolean;
+
+		/**
+		 * Creates a file system watcher.
+		 *
+		 * A glob pattern that filters the file events on their absolute path must be provided. Optionally,
+		 * flags to ignore certain kinds of events can be provided. To stop listening to events the watcher must be disposed.
+		 *
+		 * *Note* that only files within the current [workspace folders](#workspace.workspaceFolders) can be watched.
+		 * *Note* that when watching for file changes such as '**​/*.js', notifications will not be sent when a parent folder is
+		 * moved or deleted (this is a known limitation of the current implementation and may change in the future).
+		 *
+		 * @param globPattern A [glob pattern](#GlobPattern) that is applied to the absolute paths of created, changed,
+		 * and deleted files. Use a [relative pattern](#RelativePattern) to limit events to a certain [workspace folder](#WorkspaceFolder).
+		 * @param ignoreCreateEvents Ignore when files have been created.
+		 * @param ignoreChangeEvents Ignore when files have been changed.
+		 * @param ignoreDeleteEvents Ignore when files have been deleted.
+		 * @return A new file system watcher instance.
+		 */
+		export function createFileSystemWatcher(globPattern: GlobPattern, ignoreCreateEvents?: boolean, ignoreChangeEvents?: boolean, ignoreDeleteEvents?: boolean): FileSystemWatcher;
+
+		/**
+		 * Find files across all [workspace folders](#workspace.workspaceFolders) in the workspace.
+		 *
+		 * @example
+		 * findFiles('**​/*.js', '**​/node_modules/**', 10)
+		 *
+		 * @param include A [glob pattern](#GlobPattern) that defines the files to search for. The glob pattern
+		 * will be matched against the file paths of resulting matches relative to their workspace. Use a [relative pattern](#RelativePattern)
+		 * to restrict the search results to a [workspace folder](#WorkspaceFolder).
+		 * @param exclude  A [glob pattern](#GlobPattern) that defines files and folders to exclude. The glob pattern
+		 * will be matched against the file paths of resulting matches relative to their workspace. When `undefined` only default excludes will
+		 * apply, when `null` no excludes will apply.
+		 * @param maxResults An upper-bound for the result.
+		 * @param token A token that can be used to signal cancellation to the underlying search engine.
+		 * @return A thenable that resolves to an array of resource identifiers. Will return no results if no
+		 * [workspace folders](#workspace.workspaceFolders) are opened.
+		 */
+		export function findFiles(include: GlobPattern, exclude?: GlobPattern | null, maxResults?: number, token?: CancellationToken): Thenable<Uri[]>;
+
+		/**
+		 * Save all dirty files.
+		 *
+		 * @param includeUntitled Also save files that have been created during this session.
+		 * @return A thenable that resolves when the files have been saved.
+		 */
+		export function saveAll(includeUntitled?: boolean): Thenable<boolean>;
+
+		/**
+		 * Make changes to one or many resources or create, delete, and rename resources as defined by the given
+		 * [workspace edit](#WorkspaceEdit).
+		 *
+		 * All changes of a workspace edit are applied in the same order in which they have been added. If
+		 * multiple textual inserts are made at the same position, these strings appear in the resulting text
+		 * in the order the 'inserts' were made, unless that are interleaved with resource edits. Invalid sequences
+		 * like 'delete file a' -> 'insert text in file a' cause failure of the operation.
+		 *
+		 * When applying a workspace edit that consists only of text edits an 'all-or-nothing'-strategy is used.
+		 * A workspace edit with resource creations or deletions aborts the operation, e.g. consecutive edits will
+		 * not be attempted, when a single edit fails.
+		 *
+		 * @param edit A workspace edit.
+		 * @return A thenable that resolves when the edit could be applied.
+		 */
+		export function applyEdit(edit: WorkspaceEdit): Thenable<boolean>;
+
+		/**
+		 * All text documents currently known to the system.
+		 */
+		export const textDocuments: ReadonlyArray<TextDocument>;
+
+		/**
+		 * Opens a document. Will return early if this document is already open. Otherwise
+		 * the document is loaded and the [didOpen](#workspace.onDidOpenTextDocument)-event fires.
+		 *
+		 * The document is denoted by an [uri](#Uri). Depending on the [scheme](#Uri.scheme) the
+		 * following rules apply:
+		 * * `file`-scheme: Open a file on disk, will be rejected if the file does not exist or cannot be loaded.
+		 * * `untitled`-scheme: A new file that should be saved on disk, e.g. `untitled:c:\frodo\new.js`. The language
+		 * will be derived from the file name.
+		 * * For all other schemes contributed [text document content providers](#TextDocumentContentProvider) and
+		 * [file system providers](#FileSystemProvider) are consulted.
+		 *
+		 * *Note* that the lifecycle of the returned document is owned by the editor and not by the extension. That means an
+		 * [`onDidClose`](#workspace.onDidCloseTextDocument)-event can occur at any time after opening it.
+		 *
+		 * @param uri Identifies the resource to open.
+		 * @return A promise that resolves to a [document](#TextDocument).
+		 */
+		export function openTextDocument(uri: Uri): Thenable<TextDocument>;
+
+		/**
+		 * A short-hand for `openTextDocument(Uri.file(fileName))`.
+		 *
+		 * @see [openTextDocument](#openTextDocument)
+		 * @param fileName A name of a file on disk.
+		 * @return A promise that resolves to a [document](#TextDocument).
+		 */
+		export function openTextDocument(fileName: string): Thenable<TextDocument>;
+
+		/**
+		 * Opens an untitled text document. The editor will prompt the user for a file
+		 * path when the document is to be saved. The `options` parameter allows to
+		 * specify the *language* and/or the *content* of the document.
+		 *
+		 * @param options Options to control how the document will be created.
+		 * @return A promise that resolves to a [document](#TextDocument).
+		 */
+		export function openTextDocument(options?: { language?: string; content?: string; }): Thenable<TextDocument>;
+
+		/**
+		 * Register a text document content provider.
+		 *
+		 * Only one provider can be registered per scheme.
+		 *
+		 * @param scheme The uri-scheme to register for.
+		 * @param provider A content provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerTextDocumentContentProvider(scheme: string, provider: TextDocumentContentProvider): Disposable;
+
+		/**
+		 * An event that is emitted when a [text document](#TextDocument) is opened or when the language id
+		 * of a text document [has been changed](#languages.setTextDocumentLanguage).
+		 *
+		 * To add an event listener when a visible text document is opened, use the [TextEditor](#TextEditor) events in the
+		 * [window](#window) namespace. Note that:
+		 *
+		 * - The event is emitted before the [document](#TextDocument) is updated in the
+		 * [active text editor](#window.activeTextEditor)
+		 * - When a [text document](#TextDocument) is already open (e.g.: open in another [visible text editor](#window.visibleTextEditors)) this event is not emitted
+		 *
+		 */
+		export const onDidOpenTextDocument: Event<TextDocument>;
+
+		/**
+		 * An event that is emitted when a [text document](#TextDocument) is disposed or when the language id
+		 * of a text document [has been changed](#languages.setTextDocumentLanguage).
+		 *
+		 * *Note 1:* There is no guarantee that this event fires when an editor tab is closed, use the
+		 * [`onDidChangeVisibleTextEditors`](#window.onDidChangeVisibleTextEditors)-event to know when editors change.
+		 *
+		 * *Note 2:* A document can be open but not shown in an editor which means this event can fire
+		 * for a document that has not been shown in an editor.
+		 */
+		export const onDidCloseTextDocument: Event<TextDocument>;
+
+		/**
+		 * An event that is emitted when a [text document](#TextDocument) is changed. This usually happens
+		 * when the [contents](#TextDocument.getText) changes but also when other things like the
+		 * [dirty](#TextDocument.isDirty)-state changes.
+		 */
+		export const onDidChangeTextDocument: Event<TextDocumentChangeEvent>;
+
+		/**
+		 * An event that is emitted when a [text document](#TextDocument) will be saved to disk.
+		 *
+		 * *Note 1:* Subscribers can delay saving by registering asynchronous work. For the sake of data integrity the editor
+		 * might save without firing this event. For instance when shutting down with dirty files.
+		 *
+		 * *Note 2:* Subscribers are called sequentially and they can [delay](#TextDocumentWillSaveEvent.waitUntil) saving
+		 * by registering asynchronous work. Protection against misbehaving listeners is implemented as such:
+		 *  * there is an overall time budget that all listeners share and if that is exhausted no further listener is called
+		 *  * listeners that take a long time or produce errors frequently will not be called anymore
+		 *
+		 * The current thresholds are 1.5 seconds as overall time budget and a listener can misbehave 3 times before being ignored.
+		 */
+		export const onWillSaveTextDocument: Event<TextDocumentWillSaveEvent>;
+
+		/**
+		 * An event that is emitted when a [text document](#TextDocument) is saved to disk.
+		 */
+		export const onDidSaveTextDocument: Event<TextDocument>;
+
+		/**
+		 * An event that is emitted when files are being created.
+		 *
+		 * *Note 1:* This event is triggered by user gestures, like creating a file from the
+		 * explorer, or from the [`workspace.applyEdit`](#workspace.applyEdit)-api. This event is *not* fired when
+		 * files change on disk, e.g triggered by another application, or when using the
+		 * [`workspace.fs`](#FileSystem)-api.
+		 *
+		 * *Note 2:* When this event is fired, edits to files that are are being created cannot be applied.
+		 */
+		export const onWillCreateFiles: Event<FileWillCreateEvent>;
+
+		/**
+		 * An event that is emitted when files have been created.
+		 *
+		 * *Note:* This event is triggered by user gestures, like creating a file from the
+		 * explorer, or from the [`workspace.applyEdit`](#workspace.applyEdit)-api, but this event is *not* fired when
+		 * files change on disk, e.g triggered by another application, or when using the
+		 * [`workspace.fs`](#FileSystem)-api.
+		 */
+		export const onDidCreateFiles: Event<FileCreateEvent>;
+
+		/**
+		 * An event that is emitted when files are being deleted.
+		 *
+		 * *Note 1:* This event is triggered by user gestures, like deleting a file from the
+		 * explorer, or from the [`workspace.applyEdit`](#workspace.applyEdit)-api, but this event is *not* fired when
+		 * files change on disk, e.g triggered by another application, or when using the
+		 * [`workspace.fs`](#FileSystem)-api.
+		 *
+		 * *Note 2:* When deleting a folder with children only one event is fired.
+		 */
+		export const onWillDeleteFiles: Event<FileWillDeleteEvent>;
+
+		/**
+		 * An event that is emitted when files have been deleted.
+		 *
+		 * *Note 1:* This event is triggered by user gestures, like deleting a file from the
+		 * explorer, or from the [`workspace.applyEdit`](#workspace.applyEdit)-api, but this event is *not* fired when
+		 * files change on disk, e.g triggered by another application, or when using the
+		 * [`workspace.fs`](#FileSystem)-api.
+		 *
+		 * *Note 2:* When deleting a folder with children only one event is fired.
+		 */
+		export const onDidDeleteFiles: Event<FileDeleteEvent>;
+
+		/**
+		 * An event that is emitted when files are being renamed.
+		 *
+		 * *Note 1:* This event is triggered by user gestures, like renaming a file from the
+		 * explorer, and from the [`workspace.applyEdit`](#workspace.applyEdit)-api, but this event is *not* fired when
+		 * files change on disk, e.g triggered by another application, or when using the
+		 * [`workspace.fs`](#FileSystem)-api.
+		 *
+		 * *Note 2:* When renaming a folder with children only one event is fired.
+		 */
+		export const onWillRenameFiles: Event<FileWillRenameEvent>;
+
+		/**
+		 * An event that is emitted when files have been renamed.
+		 *
+		 * *Note 1:* This event is triggered by user gestures, like renaming a file from the
+		 * explorer, and from the [`workspace.applyEdit`](#workspace.applyEdit)-api, but this event is *not* fired when
+		 * files change on disk, e.g triggered by another application, or when using the
+		 * [`workspace.fs`](#FileSystem)-api.
+		 *
+		 * *Note 2:* When renaming a folder with children only one event is fired.
+		 */
+		export const onDidRenameFiles: Event<FileRenameEvent>;
+
+		/**
+		 * Get a workspace configuration object.
+		 *
+		 * When a section-identifier is provided only that part of the configuration
+		 * is returned. Dots in the section-identifier are interpreted as child-access,
+		 * like `{ myExt: { setting: { doIt: true }}}` and `getConfiguration('myExt.setting').get('doIt') === true`.
+		 *
+		 * When a scope is provided configuration confined to that scope is returned. Scope can be a resource or a language identifier or both.
+		 *
+		 * @param section A dot-separated identifier.
+		 * @param scope A scope for which the configuration is asked for.
+		 * @return The full configuration or a subset.
+		 */
+		export function getConfiguration(section?: string | undefined, scope?: ConfigurationScope | null): WorkspaceConfiguration;
+
+		/**
+		 * An event that is emitted when the [configuration](#WorkspaceConfiguration) changed.
+		 */
+		export const onDidChangeConfiguration: Event<ConfigurationChangeEvent>;
+
+		/**
+		 * Register a task provider.
+		 *
+		 * @deprecated Use the corresponding function on the `tasks` namespace instead
+		 *
+		 * @param type The task kind type this provider is registered for.
+		 * @param provider A task provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerTaskProvider(type: string, provider: TaskProvider): Disposable;
+
+		/**
+		 * Register a filesystem provider for a given scheme, e.g. `ftp`.
+		 *
+		 * There can only be one provider per scheme and an error is being thrown when a scheme
+		 * has been claimed by another provider or when it is reserved.
+		 *
+		 * @param scheme The uri-[scheme](#Uri.scheme) the provider registers for.
+		 * @param provider The filesystem provider.
+		 * @param options Immutable metadata about the provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider, options?: { readonly isCaseSensitive?: boolean, readonly isReadonly?: boolean }): Disposable;
+	}
+
+	/**
+	 * The configuration scope which can be a
+	 * a 'resource' or a languageId or both or
+	 * a '[TextDocument](#TextDocument)' or
+	 * a '[WorkspaceFolder](#WorkspaceFolder)'
+	 */
+	export type ConfigurationScope = Uri | TextDocument | WorkspaceFolder | { uri?: Uri, languageId: string };
+
+	/**
+	 * An event describing the change in Configuration
+	 */
+	export interface ConfigurationChangeEvent {
+
+		/**
+		 * Checks if the given section has changed.
+		 * If scope is provided, checks if the section has changed for resources under the given scope.
+		 *
+		 * @param section Configuration name, supports _dotted_ names.
+		 * @param scope A scope in which to check.
+		 * @return `true` if the given section has changed.
+		 */
+		affectsConfiguration(section: string, scope?: ConfigurationScope): boolean;
+	}
+
+	/**
+	 * Namespace for participating in language-specific editor [features](https://code.visualstudio.com/docs/editor/editingevolved),
+	 * like IntelliSense, code actions, diagnostics etc.
+	 *
+	 * Many programming languages exist and there is huge variety in syntaxes, semantics, and paradigms. Despite that, features
+	 * like automatic word-completion, code navigation, or code checking have become popular across different tools for different
+	 * programming languages.
+	 *
+	 * The editor provides an API that makes it simple to provide such common features by having all UI and actions already in place and
+	 * by allowing you to participate by providing data only. For instance, to contribute a hover all you have to do is provide a function
+	 * that can be called with a [TextDocument](#TextDocument) and a [Position](#Position) returning hover info. The rest, like tracking the
+	 * mouse, positioning the hover, keeping the hover stable etc. is taken care of by the editor.
+	 *
+	 * ```javascript
+	 * languages.registerHoverProvider('javascript', {
+	 * 	provideHover(document, position, token) {
+	 * 		return new Hover('I am a hover!');
+	 * 	}
+	 * });
+	 * ```
+	 *
+	 * Registration is done using a [document selector](#DocumentSelector) which is either a language id, like `javascript` or
+	 * a more complex [filter](#DocumentFilter) like `{ language: 'typescript', scheme: 'file' }`. Matching a document against such
+	 * a selector will result in a [score](#languages.match) that is used to determine if and how a provider shall be used. When
+	 * scores are equal the provider that came last wins. For features that allow full arity, like [hover](#languages.registerHoverProvider),
+	 * the score is only checked to be `>0`, for other features, like [IntelliSense](#languages.registerCompletionItemProvider) the
+	 * score is used for determining the order in which providers are asked to participate.
+	 */
+	export namespace languages {
+
+		/**
+		 * Return the identifiers of all known languages.
+		 * @return Promise resolving to an array of identifier strings.
+		 */
+		export function getLanguages(): Thenable<string[]>;
+
+		/**
+		 * Set (and change) the [language](#TextDocument.languageId) that is associated
+		 * with the given document.
+		 *
+		 * *Note* that calling this function will trigger the [`onDidCloseTextDocument`](#workspace.onDidCloseTextDocument) event
+		 * followed by the [`onDidOpenTextDocument`](#workspace.onDidOpenTextDocument) event.
+		 *
+		 * @param document The document which language is to be changed
+		 * @param languageId The new language identifier.
+		 * @returns A thenable that resolves with the updated document.
+		 */
+		export function setTextDocumentLanguage(document: TextDocument, languageId: string): Thenable<TextDocument>;
+
+		/**
+		 * Compute the match between a document [selector](#DocumentSelector) and a document. Values
+		 * greater than zero mean the selector matches the document.
+		 *
+		 * A match is computed according to these rules:
+		 * 1. When [`DocumentSelector`](#DocumentSelector) is an array, compute the match for each contained `DocumentFilter` or language identifier and take the maximum value.
+		 * 2. A string will be desugared to become the `language`-part of a [`DocumentFilter`](#DocumentFilter), so `"fooLang"` is like `{ language: "fooLang" }`.
+		 * 3. A [`DocumentFilter`](#DocumentFilter) will be matched against the document by comparing its parts with the document. The following rules apply:
+		 *  1. When the `DocumentFilter` is empty (`{}`) the result is `0`
+		 *  2. When `scheme`, `language`, or `pattern` are defined but one doesn’t match, the result is `0`
+		 *  3. Matching against `*` gives a score of `5`, matching via equality or via a glob-pattern gives a score of `10`
+		 *  4. The result is the maximum value of each match
+		 *
+		 * Samples:
+		 * ```js
+		 * // default document from disk (file-scheme)
+		 * doc.uri; //'file:///my/file.js'
+		 * doc.languageId; // 'javascript'
+		 * match('javascript', doc); // 10;
+		 * match({language: 'javascript'}, doc); // 10;
+		 * match({language: 'javascript', scheme: 'file'}, doc); // 10;
+		 * match('*', doc); // 5
+		 * match('fooLang', doc); // 0
+		 * match(['fooLang', '*'], doc); // 5
+		 *
+		 * // virtual document, e.g. from git-index
+		 * doc.uri; // 'git:/my/file.js'
+		 * doc.languageId; // 'javascript'
+		 * match('javascript', doc); // 10;
+		 * match({language: 'javascript', scheme: 'git'}, doc); // 10;
+		 * match('*', doc); // 5
+		 * ```
+		 *
+		 * @param selector A document selector.
+		 * @param document A text document.
+		 * @return A number `>0` when the selector matches and `0` when the selector does not match.
+		 */
+		export function match(selector: DocumentSelector, document: TextDocument): number;
+
+		/**
+		 * An [event](#Event) which fires when the global set of diagnostics changes. This is
+		 * newly added and removed diagnostics.
+		 */
+		export const onDidChangeDiagnostics: Event<DiagnosticChangeEvent>;
+
+		/**
+		 * Get all diagnostics for a given resource.
+		 *
+		 * @param resource A resource
+		 * @returns An array of [diagnostics](#Diagnostic) objects or an empty array.
+		 */
+		export function getDiagnostics(resource: Uri): Diagnostic[];
+
+		/**
+		 * Get all diagnostics.
+		 *
+		 * @returns An array of uri-diagnostics tuples or an empty array.
+		 */
+		export function getDiagnostics(): [Uri, Diagnostic[]][];
+
+		/**
+		 * Create a diagnostics collection.
+		 *
+		 * @param name The [name](#DiagnosticCollection.name) of the collection.
+		 * @return A new diagnostic collection.
+		 */
+		export function createDiagnosticCollection(name?: string): DiagnosticCollection;
+
+		/**
+		 * Register a completion provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and groups of equal score are sequentially asked for
+		 * completion items. The process stops when one or many providers of a group return a
+		 * result. A failing provider (rejected promise or exception) will not fail the whole
+		 * operation.
+		 *
+		 * A completion item provider can be associated with a set of `triggerCharacters`. When trigger
+		 * characters are being typed, completions are requested but only from providers that registered
+		 * the typed character. Because of that trigger characters should be different than [word characters](#LanguageConfiguration.wordPattern),
+		 * a common trigger character is `.` to trigger member completions.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A completion provider.
+		 * @param triggerCharacters Trigger completion when the user types one of the characters.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerCompletionItemProvider(selector: DocumentSelector, provider: CompletionItemProvider, ...triggerCharacters: string[]): Disposable;
+
+		/**
+		 * Register a code action provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A code action provider.
+		 * @param metadata Metadata about the kind of code actions the provider provides.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerCodeActionsProvider(selector: DocumentSelector, provider: CodeActionProvider, metadata?: CodeActionProviderMetadata): Disposable;
+
+		/**
+		 * Register a code lens provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A code lens provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerCodeLensProvider(selector: DocumentSelector, provider: CodeLensProvider): Disposable;
+
+		/**
+		 * Register a definition provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A definition provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDefinitionProvider(selector: DocumentSelector, provider: DefinitionProvider): Disposable;
+
+		/**
+		 * Register an implementation provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider An implementation provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerImplementationProvider(selector: DocumentSelector, provider: ImplementationProvider): Disposable;
+
+		/**
+		 * Register a type definition provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A type definition provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerTypeDefinitionProvider(selector: DocumentSelector, provider: TypeDefinitionProvider): Disposable;
+
+		/**
+		 * Register a declaration provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A declaration provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDeclarationProvider(selector: DocumentSelector, provider: DeclarationProvider): Disposable;
+
+		/**
+		 * Register a hover provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A hover provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerHoverProvider(selector: DocumentSelector, provider: HoverProvider): Disposable;
+
+		/**
+		 * Register a provider that locates evaluatable expressions in text documents.
+		 * VS Code will evaluate the expression in the active debug session and will show the result in the debug hover.
+		 *
+		 * If multiple providers are registered for a language an arbitrary provider will be used.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider An evaluatable expression provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerEvaluatableExpressionProvider(selector: DocumentSelector, provider: EvaluatableExpressionProvider): Disposable;
+
+		/**
+		 * Register a provider that returns data for the debugger's 'inline value' feature.
+		 * Whenever the generic VS Code debugger has stopped in a source file, providers registered for the language of the file
+		 * are called to return textual data that will be shown in the editor at the end of lines.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider An inline values provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerInlineValuesProvider(selector: DocumentSelector, provider: InlineValuesProvider): Disposable;
+
+		/**
+		 * Register a document highlight provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and groups sequentially asked for document highlights.
+		 * The process stops when a provider returns a `non-falsy` or `non-failure` result.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document highlight provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentHighlightProvider(selector: DocumentSelector, provider: DocumentHighlightProvider): Disposable;
+
+		/**
+		 * Register a document symbol provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document symbol provider.
+		 * @param metaData metadata about the provider
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentSymbolProvider(selector: DocumentSelector, provider: DocumentSymbolProvider, metaData?: DocumentSymbolProviderMetadata): Disposable;
+
+		/**
+		 * Register a workspace symbol provider.
+		 *
+		 * Multiple providers can be registered. In that case providers are asked in parallel and
+		 * the results are merged. A failing provider (rejected promise or exception) will not cause
+		 * a failure of the whole operation.
+		 *
+		 * @param provider A workspace symbol provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerWorkspaceSymbolProvider(provider: WorkspaceSymbolProvider): Disposable;
+
+		/**
+		 * Register a reference provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A reference provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerReferenceProvider(selector: DocumentSelector, provider: ReferenceProvider): Disposable;
+
+		/**
+		 * Register a rename provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and asked in sequence. The first provider producing a result
+		 * defines the result of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A rename provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerRenameProvider(selector: DocumentSelector, provider: RenameProvider): Disposable;
+
+		/**
+		 * Register a semantic tokens provider for a whole document.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and the best-matching provider is used. Failure
+		 * of the selected provider will cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document semantic tokens provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentSemanticTokensProvider(selector: DocumentSelector, provider: DocumentSemanticTokensProvider, legend: SemanticTokensLegend): Disposable;
+
+		/**
+		 * Register a semantic tokens provider for a document range.
+		 *
+		 * *Note:* If a document has both a `DocumentSemanticTokensProvider` and a `DocumentRangeSemanticTokensProvider`,
+		 * the range provider will be invoked only initially, for the time in which the full document provider takes
+		 * to resolve the first request. Once the full document provider resolves the first request, the semantic tokens
+		 * provided via the range provider will be discarded and from that point forward, only the document provider
+		 * will be used.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and the best-matching provider is used. Failure
+		 * of the selected provider will cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document range semantic tokens provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentRangeSemanticTokensProvider(selector: DocumentSelector, provider: DocumentRangeSemanticTokensProvider, legend: SemanticTokensLegend): Disposable;
+
+		/**
+		 * Register a formatting provider for a document.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and the best-matching provider is used. Failure
+		 * of the selected provider will cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document formatting edit provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentFormattingEditProvider(selector: DocumentSelector, provider: DocumentFormattingEditProvider): Disposable;
+
+		/**
+		 * Register a formatting provider for a document range.
+		 *
+		 * *Note:* A document range provider is also a [document formatter](#DocumentFormattingEditProvider)
+		 * which means there is no need to [register](#languages.registerDocumentFormattingEditProvider) a document
+		 * formatter when also registering a range provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and the best-matching provider is used. Failure
+		 * of the selected provider will cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document range formatting edit provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentRangeFormattingEditProvider(selector: DocumentSelector, provider: DocumentRangeFormattingEditProvider): Disposable;
+
+		/**
+		 * Register a formatting provider that works on type. The provider is active when the user enables the setting `editor.formatOnType`.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and the best-matching provider is used. Failure
+		 * of the selected provider will cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider An on type formatting edit provider.
+		 * @param firstTriggerCharacter A character on which formatting should be triggered, like `}`.
+		 * @param moreTriggerCharacter More trigger characters.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerOnTypeFormattingEditProvider(selector: DocumentSelector, provider: OnTypeFormattingEditProvider, firstTriggerCharacter: string, ...moreTriggerCharacter: string[]): Disposable;
+
+		/**
+		 * Register a signature help provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and called sequentially until a provider returns a
+		 * valid result.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A signature help provider.
+		 * @param triggerCharacters Trigger signature help when the user types one of the characters, like `,` or `(`.
+		 * @param metadata Information about the provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerSignatureHelpProvider(selector: DocumentSelector, provider: SignatureHelpProvider, ...triggerCharacters: string[]): Disposable;
+		export function registerSignatureHelpProvider(selector: DocumentSelector, provider: SignatureHelpProvider, metadata: SignatureHelpProviderMetadata): Disposable;
+
+		/**
+		 * Register a document link provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A document link provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDocumentLinkProvider(selector: DocumentSelector, provider: DocumentLinkProvider): Disposable;
+
+		/**
+		 * Register a color provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A color provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerColorProvider(selector: DocumentSelector, provider: DocumentColorProvider): Disposable;
+
+		/**
+		 * Register a folding range provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged.
+		 * If multiple folding ranges start at the same position, only the range of the first registered provider is used.
+		 * If a folding range overlaps with an other range that has a smaller position, it is also ignored.
+		 *
+		 * A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A folding range provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerFoldingRangeProvider(selector: DocumentSelector, provider: FoldingRangeProvider): Disposable;
+
+		/**
+		 * Register a selection range provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are asked in
+		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
+		 * not cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A selection range provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerSelectionRangeProvider(selector: DocumentSelector, provider: SelectionRangeProvider): Disposable;
+
+		/**
+		 * Register a call hierarchy provider.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A call hierarchy provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerCallHierarchyProvider(selector: DocumentSelector, provider: CallHierarchyProvider): Disposable;
+
+		/**
+		 * Register a linked editing range provider.
+		 *
+		 * Multiple providers can be registered for a language. In that case providers are sorted
+		 * by their [score](#languages.match) and the best-matching provider that has a result is used. Failure
+		 * of the selected provider will cause a failure of the whole operation.
+		 *
+		 * @param selector A selector that defines the documents this provider is applicable to.
+		 * @param provider A linked editing range provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerLinkedEditingRangeProvider(selector: DocumentSelector, provider: LinkedEditingRangeProvider): Disposable;
+
+		/**
+		 * Set a [language configuration](#LanguageConfiguration) for a language.
+		 *
+		 * @param language A language identifier like `typescript`.
+		 * @param configuration Language configuration.
+		 * @return A [disposable](#Disposable) that unsets this configuration.
+		 */
+		export function setLanguageConfiguration(language: string, configuration: LanguageConfiguration): Disposable;
+
+	}
+
+	/**
+	 * Represents the input box in the Source Control viewlet.
+	 */
+	export interface SourceControlInputBox {
+
+		/**
+		 * Setter and getter for the contents of the input box.
+		 */
+		value: string;
+
+		/**
+		 * A string to show as placeholder in the input box to guide the user.
+		 */
+		placeholder: string;
+
+		/**
+		 * Controls whether the input box is visible (default is `true`).
+		 */
+		visible: boolean;
+	}
+
+	interface QuickDiffProvider {
+
+		/**
+		 * Provide a [uri](#Uri) to the original resource of any given resource uri.
+		 *
+		 * @param uri The uri of the resource open in a text editor.
+		 * @param token A cancellation token.
+		 * @return A thenable that resolves to uri of the matching original resource.
+		 */
+		provideOriginalResource?(uri: Uri, token: CancellationToken): ProviderResult<Uri>;
+	}
+
+	/**
+	 * The theme-aware decorations for a
+	 * [source control resource state](#SourceControlResourceState).
+	 */
+	export interface SourceControlResourceThemableDecorations {
+
+		/**
+		 * The icon path for a specific
+		 * [source control resource state](#SourceControlResourceState).
+		 */
+		readonly iconPath?: string | Uri;
+	}
+
+	/**
+	 * The decorations for a [source control resource state](#SourceControlResourceState).
+	 * Can be independently specified for light and dark themes.
+	 */
+	export interface SourceControlResourceDecorations extends SourceControlResourceThemableDecorations {
+
+		/**
+		 * Whether the [source control resource state](#SourceControlResourceState) should
+		 * be striked-through in the UI.
+		 */
+		readonly strikeThrough?: boolean;
+
+		/**
+		 * Whether the [source control resource state](#SourceControlResourceState) should
+		 * be faded in the UI.
+		 */
+		readonly faded?: boolean;
+
+		/**
+		 * The title for a specific
+		 * [source control resource state](#SourceControlResourceState).
+		 */
+		readonly tooltip?: string;
+
+		/**
+		 * The light theme decorations.
+		 */
+		readonly light?: SourceControlResourceThemableDecorations;
+
+		/**
+		 * The dark theme decorations.
+		 */
+		readonly dark?: SourceControlResourceThemableDecorations;
+	}
+
+	/**
+	 * An source control resource state represents the state of an underlying workspace
+	 * resource within a certain [source control group](#SourceControlResourceGroup).
+	 */
+	export interface SourceControlResourceState {
+
+		/**
+		 * The [uri](#Uri) of the underlying resource inside the workspace.
+		 */
+		readonly resourceUri: Uri;
+
+		/**
+		 * The [command](#Command) which should be run when the resource
+		 * state is open in the Source Control viewlet.
+		 */
+		readonly command?: Command;
+
+		/**
+		 * The [decorations](#SourceControlResourceDecorations) for this source control
+		 * resource state.
+		 */
+		readonly decorations?: SourceControlResourceDecorations;
+
+		/**
+		 * Context value of the resource state. This can be used to contribute resource specific actions.
+		 * For example, if a resource is given a context value as `diffable`. When contributing actions to `scm/resourceState/context`
+		 * using `menus` extension point, you can specify context value for key `scmResourceState` in `when` expressions, like `scmResourceState == diffable`.
+		 * ```
+		 *	"contributes": {
+		 *		"menus": {
+		 *			"scm/resourceState/context": [
+		 *				{
+		 *					"command": "extension.diff",
+		 *					"when": "scmResourceState == diffable"
+		 *				}
+		 *			]
+		 *		}
+		 *	}
+		 * ```
+		 * This will show action `extension.diff` only for resources with `contextValue` is `diffable`.
+		 */
+		readonly contextValue?: string;
+	}
+
+	/**
+	 * A source control resource group is a collection of
+	 * [source control resource states](#SourceControlResourceState).
+	 */
+	export interface SourceControlResourceGroup {
+
+		/**
+		 * The id of this source control resource group.
+		 */
+		readonly id: string;
+
+		/**
+		 * The label of this source control resource group.
+		 */
+		label: string;
+
+		/**
+		 * Whether this source control resource group is hidden when it contains
+		 * no [source control resource states](#SourceControlResourceState).
+		 */
+		hideWhenEmpty?: boolean;
+
+		/**
+		 * This group's collection of
+		 * [source control resource states](#SourceControlResourceState).
+		 */
+		resourceStates: SourceControlResourceState[];
+
+		/**
+		 * Dispose this source control resource group.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * An source control is able to provide [resource states](#SourceControlResourceState)
+	 * to the editor and interact with the editor in several source control related ways.
+	 */
+	export interface SourceControl {
+
+		/**
+		 * The id of this source control.
+		 */
+		readonly id: string;
+
+		/**
+		 * The human-readable label of this source control.
+		 */
+		readonly label: string;
+
+		/**
+		 * The (optional) Uri of the root of this source control.
+		 */
+		readonly rootUri: Uri | undefined;
+
+		/**
+		 * The [input box](#SourceControlInputBox) for this source control.
+		 */
+		readonly inputBox: SourceControlInputBox;
+
+		/**
+		 * The UI-visible count of [resource states](#SourceControlResourceState) of
+		 * this source control.
+		 *
+		 * Equals to the total number of [resource state](#SourceControlResourceState)
+		 * of this source control, if undefined.
+		 */
+		count?: number;
+
+		/**
+		 * An optional [quick diff provider](#QuickDiffProvider).
+		 */
+		quickDiffProvider?: QuickDiffProvider;
+
+		/**
+		 * Optional commit template string.
+		 *
+		 * The Source Control viewlet will populate the Source Control
+		 * input with this value when appropriate.
+		 */
+		commitTemplate?: string;
+
+		/**
+		 * Optional accept input command.
+		 *
+		 * This command will be invoked when the user accepts the value
+		 * in the Source Control input.
+		 */
+		acceptInputCommand?: Command;
+
+		/**
+		 * Optional status bar commands.
+		 *
+		 * These commands will be displayed in the editor's status bar.
+		 */
+		statusBarCommands?: Command[];
+
+		/**
+		 * Create a new [resource group](#SourceControlResourceGroup).
+		 */
+		createResourceGroup(id: string, label: string): SourceControlResourceGroup;
+
+		/**
+		 * Dispose this source control.
+		 */
+		dispose(): void;
+	}
+
+	export namespace scm {
+
+		/**
+		 * The [input box](#SourceControlInputBox) for the last source control
+		 * created by the extension.
+		 *
+		 * @deprecated Use SourceControl.inputBox instead
+		 */
+		export const inputBox: SourceControlInputBox;
+
+		/**
+		 * Creates a new [source control](#SourceControl) instance.
+		 *
+		 * @param id An `id` for the source control. Something short, e.g.: `git`.
+		 * @param label A human-readable string for the source control. E.g.: `Git`.
+		 * @param rootUri An optional Uri of the root of the source control. E.g.: `Uri.parse(workspaceRoot)`.
+		 * @return An instance of [source control](#SourceControl).
+		 */
+		export function createSourceControl(id: string, label: string, rootUri?: Uri): SourceControl;
+	}
+
+	/**
+	 * A DebugProtocolMessage is an opaque stand-in type for the [ProtocolMessage](https://microsoft.github.io/debug-adapter-protocol/specification#Base_Protocol_ProtocolMessage) type defined in the Debug Adapter Protocol.
+	 */
+	export interface DebugProtocolMessage {
+		// Properties: see details [here](https://microsoft.github.io/debug-adapter-protocol/specification#Base_Protocol_ProtocolMessage).
+	}
+
+	/**
+	 * A DebugProtocolSource is an opaque stand-in type for the [Source](https://microsoft.github.io/debug-adapter-protocol/specification#Types_Source) type defined in the Debug Adapter Protocol.
+	 */
+	export interface DebugProtocolSource {
+		// Properties: see details [here](https://microsoft.github.io/debug-adapter-protocol/specification#Types_Source).
+	}
+
+	/**
+	 * A DebugProtocolBreakpoint is an opaque stand-in type for the [Breakpoint](https://microsoft.github.io/debug-adapter-protocol/specification#Types_Breakpoint) type defined in the Debug Adapter Protocol.
+	 */
+	export interface DebugProtocolBreakpoint {
+		// Properties: see details [here](https://microsoft.github.io/debug-adapter-protocol/specification#Types_Breakpoint).
+	}
+
+	/**
+	 * Configuration for a debug session.
+	 */
+	export interface DebugConfiguration {
+		/**
+		 * The type of the debug session.
+		 */
+		type: string;
+
+		/**
+		 * The name of the debug session.
+		 */
+		name: string;
+
+		/**
+		 * The request type of the debug session.
+		 */
+		request: string;
+
+		/**
+		 * Additional debug type specific properties.
+		 */
+		[key: string]: any;
+	}
+
+	/**
+	 * A debug session.
+	 */
+	export interface DebugSession {
+
+		/**
+		 * The unique ID of this debug session.
+		 */
+		readonly id: string;
+
+		/**
+		 * The debug session's type from the [debug configuration](#DebugConfiguration).
+		 */
+		readonly type: string;
+
+		/**
+		 * The debug session's name is initially taken from the [debug configuration](#DebugConfiguration).
+		 * Any changes will be properly reflected in the UI.
+		 */
+		name: string;
+
+		/**
+		 * The workspace folder of this session or `undefined` for a folderless setup.
+		 */
+		readonly workspaceFolder: WorkspaceFolder | undefined;
+
+		/**
+		 * The "resolved" [debug configuration](#DebugConfiguration) of this session.
+		 * "Resolved" means that
+		 * - all variables have been substituted and
+		 * - platform specific attribute sections have been "flattened" for the matching platform and removed for non-matching platforms.
+		 */
+		readonly configuration: DebugConfiguration;
+
+		/**
+		 * Send a custom request to the debug adapter.
+		 */
+		customRequest(command: string, args?: any): Thenable<any>;
+
+		/**
+		 * Maps a VS Code breakpoint to the corresponding Debug Adapter Protocol (DAP) breakpoint that is managed by the debug adapter of the debug session.
+		 * If no DAP breakpoint exists (either because the VS Code breakpoint was not yet registered or because the debug adapter is not interested in the breakpoint), the value `undefined` is returned.
+		 *
+		 * @param breakpoint A VS Code [breakpoint](#Breakpoint).
+		 * @return A promise that resolves to the Debug Adapter Protocol breakpoint or `undefined`.
+		 */
+		getDebugProtocolBreakpoint(breakpoint: Breakpoint): Thenable<DebugProtocolBreakpoint | undefined>;
+	}
+
+	/**
+	 * A custom Debug Adapter Protocol event received from a [debug session](#DebugSession).
+	 */
+	export interface DebugSessionCustomEvent {
+		/**
+		 * The [debug session](#DebugSession) for which the custom event was received.
+		 */
+		readonly session: DebugSession;
+
+		/**
+		 * Type of event.
+		 */
+		readonly event: string;
+
+		/**
+		 * Event specific information.
+		 */
+		readonly body?: any;
+	}
+
+	/**
+	 * A debug configuration provider allows to add debug configurations to the debug service
+	 * and to resolve launch configurations before they are used to start a debug session.
+	 * A debug configuration provider is registered via #debug.registerDebugConfigurationProvider.
+	 */
+	export interface DebugConfigurationProvider {
+		/**
+		 * Provides [debug configuration](#DebugConfiguration) to the debug service. If more than one debug configuration provider is
+		 * registered for the same type, debug configurations are concatenated in arbitrary order.
+		 *
+		 * @param folder The workspace folder for which the configurations are used or `undefined` for a folderless setup.
+		 * @param token A cancellation token.
+		 * @return An array of [debug configurations](#DebugConfiguration).
+		 */
+		provideDebugConfigurations?(folder: WorkspaceFolder | undefined, token?: CancellationToken): ProviderResult<DebugConfiguration[]>;
+
+		/**
+		 * Resolves a [debug configuration](#DebugConfiguration) by filling in missing values or by adding/changing/removing attributes.
+		 * If more than one debug configuration provider is registered for the same type, the resolveDebugConfiguration calls are chained
+		 * in arbitrary order and the initial debug configuration is piped through the chain.
+		 * Returning the value 'undefined' prevents the debug session from starting.
+		 * Returning the value 'null' prevents the debug session from starting and opens the underlying debug configuration instead.
+		 *
+		 * @param folder The workspace folder from which the configuration originates from or `undefined` for a folderless setup.
+		 * @param debugConfiguration The [debug configuration](#DebugConfiguration) to resolve.
+		 * @param token A cancellation token.
+		 * @return The resolved debug configuration or undefined or null.
+		 */
+		resolveDebugConfiguration?(folder: WorkspaceFolder | undefined, debugConfiguration: DebugConfiguration, token?: CancellationToken): ProviderResult<DebugConfiguration>;
+
+		/**
+		 * This hook is directly called after 'resolveDebugConfiguration' but with all variables substituted.
+		 * It can be used to resolve or verify a [debug configuration](#DebugConfiguration) by filling in missing values or by adding/changing/removing attributes.
+		 * If more than one debug configuration provider is registered for the same type, the 'resolveDebugConfigurationWithSubstitutedVariables' calls are chained
+		 * in arbitrary order and the initial debug configuration is piped through the chain.
+		 * Returning the value 'undefined' prevents the debug session from starting.
+		 * Returning the value 'null' prevents the debug session from starting and opens the underlying debug configuration instead.
+		 *
+		 * @param folder The workspace folder from which the configuration originates from or `undefined` for a folderless setup.
+		 * @param debugConfiguration The [debug configuration](#DebugConfiguration) to resolve.
+		 * @param token A cancellation token.
+		 * @return The resolved debug configuration or undefined or null.
+		 */
+		resolveDebugConfigurationWithSubstitutedVariables?(folder: WorkspaceFolder | undefined, debugConfiguration: DebugConfiguration, token?: CancellationToken): ProviderResult<DebugConfiguration>;
+	}
+
+	/**
+	 * Represents a debug adapter executable and optional arguments and runtime options passed to it.
+	 */
+	export class DebugAdapterExecutable {
+
+		/**
+		 * Creates a description for a debug adapter based on an executable program.
+		 *
+		 * @param command The command or executable path that implements the debug adapter.
+		 * @param args Optional arguments to be passed to the command or executable.
+		 * @param options Optional options to be used when starting the command or executable.
+		 */
+		constructor(command: string, args?: string[], options?: DebugAdapterExecutableOptions);
+
+		/**
+		 * The command or path of the debug adapter executable.
+		 * A command must be either an absolute path of an executable or the name of an command to be looked up via the PATH environment variable.
+		 * The special value 'node' will be mapped to VS Code's built-in Node.js runtime.
+		 */
+		readonly command: string;
+
+		/**
+		 * The arguments passed to the debug adapter executable. Defaults to an empty array.
+		 */
+		readonly args: string[];
+
+		/**
+		 * Optional options to be used when the debug adapter is started.
+		 * Defaults to undefined.
+		 */
+		readonly options?: DebugAdapterExecutableOptions;
+	}
+
+	/**
+	 * Options for a debug adapter executable.
+	 */
+	export interface DebugAdapterExecutableOptions {
+
+		/**
+		 * The additional environment of the executed program or shell. If omitted
+		 * the parent process' environment is used. If provided it is merged with
+		 * the parent process' environment.
+		 */
+		env?: { [key: string]: string };
+
+		/**
+		 * The current working directory for the executed debug adapter.
+		 */
+		cwd?: string;
+	}
+
+	/**
+	 * Represents a debug adapter running as a socket based server.
+	 */
+	export class DebugAdapterServer {
+
+		/**
+		 * The port.
+		 */
+		readonly port: number;
+
+		/**
+		 * The host.
+		 */
+		readonly host?: string;
+
+		/**
+		 * Create a description for a debug adapter running as a socket based server.
+		 */
+		constructor(port: number, host?: string);
+	}
+
+	/**
+	 * Represents a debug adapter running as a Named Pipe (on Windows)/UNIX Domain Socket (on non-Windows) based server.
+	 */
+	export class DebugAdapterNamedPipeServer {
+		/**
+		 * The path to the NamedPipe/UNIX Domain Socket.
+		 */
+		readonly path: string;
+
+		/**
+		 * Create a description for a debug adapter running as a Named Pipe (on Windows)/UNIX Domain Socket (on non-Windows) based server.
+		 */
+		constructor(path: string);
+	}
+
+	/**
+	 * A debug adapter that implements the Debug Adapter Protocol can be registered with VS Code if it implements the DebugAdapter interface.
+	 */
+	export interface DebugAdapter extends Disposable {
+
+		/**
+		 * An event which fires after the debug adapter has sent a Debug Adapter Protocol message to VS Code.
+		 * Messages can be requests, responses, or events.
+		 */
+		readonly onDidSendMessage: Event<DebugProtocolMessage>;
+
+		/**
+		 * Handle a Debug Adapter Protocol message.
+		 * Messages can be requests, responses, or events.
+		 * Results or errors are returned via onSendMessage events.
+		 * @param message A Debug Adapter Protocol message
+		 */
+		handleMessage(message: DebugProtocolMessage): void;
+	}
+
+	/**
+	 * A debug adapter descriptor for an inline implementation.
+	 */
+	export class DebugAdapterInlineImplementation {
+
+		/**
+		 * Create a descriptor for an inline implementation of a debug adapter.
+		 */
+		constructor(implementation: DebugAdapter);
+	}
+
+	export type DebugAdapterDescriptor = DebugAdapterExecutable | DebugAdapterServer | DebugAdapterNamedPipeServer | DebugAdapterInlineImplementation;
+
+	export interface DebugAdapterDescriptorFactory {
+		/**
+		 * 'createDebugAdapterDescriptor' is called at the start of a debug session to provide details about the debug adapter to use.
+		 * These details must be returned as objects of type [DebugAdapterDescriptor](#DebugAdapterDescriptor).
+		 * Currently two types of debug adapters are supported:
+		 * - a debug adapter executable is specified as a command path and arguments (see [DebugAdapterExecutable](#DebugAdapterExecutable)),
+		 * - a debug adapter server reachable via a communication port (see [DebugAdapterServer](#DebugAdapterServer)).
+		 * If the method is not implemented the default behavior is this:
+		 *   createDebugAdapter(session: DebugSession, executable: DebugAdapterExecutable) {
+		 *      if (typeof session.configuration.debugServer === 'number') {
+		 *         return new DebugAdapterServer(session.configuration.debugServer);
+		 *      }
+		 *      return executable;
+		 *   }
+		 * @param session The [debug session](#DebugSession) for which the debug adapter will be used.
+		 * @param executable The debug adapter's executable information as specified in the package.json (or undefined if no such information exists).
+		 * @return a [debug adapter descriptor](#DebugAdapterDescriptor) or undefined.
+		 */
+		createDebugAdapterDescriptor(session: DebugSession, executable: DebugAdapterExecutable | undefined): ProviderResult<DebugAdapterDescriptor>;
+	}
+
+	/**
+	 * A Debug Adapter Tracker is a means to track the communication between VS Code and a Debug Adapter.
+	 */
+	export interface DebugAdapterTracker {
+		/**
+		 * A session with the debug adapter is about to be started.
+		 */
+		onWillStartSession?(): void;
+		/**
+		 * The debug adapter is about to receive a Debug Adapter Protocol message from VS Code.
+		 */
+		onWillReceiveMessage?(message: any): void;
+		/**
+		 * The debug adapter has sent a Debug Adapter Protocol message to VS Code.
+		 */
+		onDidSendMessage?(message: any): void;
+		/**
+		 * The debug adapter session is about to be stopped.
+		 */
+		onWillStopSession?(): void;
+		/**
+		 * An error with the debug adapter has occurred.
+		 */
+		onError?(error: Error): void;
+		/**
+		 * The debug adapter has exited with the given exit code or signal.
+		 */
+		onExit?(code: number | undefined, signal: string | undefined): void;
+	}
+
+	export interface DebugAdapterTrackerFactory {
+		/**
+		 * The method 'createDebugAdapterTracker' is called at the start of a debug session in order
+		 * to return a "tracker" object that provides read-access to the communication between VS Code and a debug adapter.
+		 *
+		 * @param session The [debug session](#DebugSession) for which the debug adapter tracker will be used.
+		 * @return A [debug adapter tracker](#DebugAdapterTracker) or undefined.
+		 */
+		createDebugAdapterTracker(session: DebugSession): ProviderResult<DebugAdapterTracker>;
+	}
+
+	/**
+	 * Represents the debug console.
+	 */
+	export interface DebugConsole {
+		/**
+		 * Append the given value to the debug console.
+		 *
+		 * @param value A string, falsy values will not be printed.
+		 */
+		append(value: string): void;
+
+		/**
+		 * Append the given value and a line feed character
+		 * to the debug console.
+		 *
+		 * @param value A string, falsy values will be printed.
+		 */
+		appendLine(value: string): void;
+	}
+
+	/**
+	 * An event describing the changes to the set of [breakpoints](#Breakpoint).
+	 */
+	export interface BreakpointsChangeEvent {
+		/**
+		 * Added breakpoints.
+		 */
+		readonly added: ReadonlyArray<Breakpoint>;
+
+		/**
+		 * Removed breakpoints.
+		 */
+		readonly removed: ReadonlyArray<Breakpoint>;
+
+		/**
+		 * Changed breakpoints.
+		 */
+		readonly changed: ReadonlyArray<Breakpoint>;
+	}
+
+	/**
+	 * The base class of all breakpoint types.
+	 */
+	export class Breakpoint {
+		/**
+		 * The unique ID of the breakpoint.
+		 */
+		readonly id: string;
+		/**
+		 * Is breakpoint enabled.
+		 */
+		readonly enabled: boolean;
+		/**
+		 * An optional expression for conditional breakpoints.
+		 */
+		readonly condition?: string;
+		/**
+		 * An optional expression that controls how many hits of the breakpoint are ignored.
+		 */
+		readonly hitCondition?: string;
+		/**
+		 * An optional message that gets logged when this breakpoint is hit. Embedded expressions within {} are interpolated by the debug adapter.
+		 */
+		readonly logMessage?: string;
+
+		protected constructor(enabled?: boolean, condition?: string, hitCondition?: string, logMessage?: string);
+	}
+
+	/**
+	 * A breakpoint specified by a source location.
+	 */
+	export class SourceBreakpoint extends Breakpoint {
+		/**
+		 * The source and line position of this breakpoint.
+		 */
+		readonly location: Location;
+
+		/**
+		 * Create a new breakpoint for a source location.
+		 */
+		constructor(location: Location, enabled?: boolean, condition?: string, hitCondition?: string, logMessage?: string);
+	}
+
+	/**
+	 * A breakpoint specified by a function name.
+	 */
+	export class FunctionBreakpoint extends Breakpoint {
+		/**
+		 * The name of the function to which this breakpoint is attached.
+		 */
+		readonly functionName: string;
+
+		/**
+		 * Create a new function breakpoint.
+		 */
+		constructor(functionName: string, enabled?: boolean, condition?: string, hitCondition?: string, logMessage?: string);
+	}
+
+	/**
+	 * Debug console mode used by debug session, see [options](#DebugSessionOptions).
+	 */
+	export enum DebugConsoleMode {
+		/**
+		 * Debug session should have a separate debug console.
+		 */
+		Separate = 0,
+
+		/**
+		 * Debug session should share debug console with its parent session.
+		 * This value has no effect for sessions which do not have a parent session.
+		 */
+		MergeWithParent = 1
+	}
+
+	/**
+	 * Options for [starting a debug session](#debug.startDebugging).
+	 */
+	export interface DebugSessionOptions {
+
+		/**
+		 * When specified the newly created debug session is registered as a "child" session of this
+		 * "parent" debug session.
+		 */
+		parentSession?: DebugSession;
+
+		/**
+		 * Controls whether this session should have a separate debug console or share it
+		 * with the parent session. Has no effect for sessions which do not have a parent session.
+		 * Defaults to Separate.
+		 */
+		consoleMode?: DebugConsoleMode;
+
+		/**
+		 * Controls whether this session should run without debugging, thus ignoring breakpoints.
+		 * When this property is not specified, the value from the parent session (if there is one) is used.
+		 */
+		noDebug?: boolean;
+
+		/**
+		 * Controls if the debug session's parent session is shown in the CALL STACK view even if it has only a single child.
+		 * By default, the debug session will never hide its parent.
+		 * If compact is true, debug sessions with a single child are hidden in the CALL STACK view to make the tree more compact.
+		 */
+		compact?: boolean;
+	}
+
+	/**
+	 * A DebugConfigurationProviderTriggerKind specifies when the `provideDebugConfigurations` method of a `DebugConfigurationProvider` is triggered.
+	 * Currently there are two situations: to provide the initial debug configurations for a newly created launch.json or
+	 * to provide dynamically generated debug configurations when the user asks for them through the UI (e.g. via the "Select and Start Debugging" command).
+	 * A trigger kind is used when registering a `DebugConfigurationProvider` with #debug.registerDebugConfigurationProvider.
+	 */
+	export enum DebugConfigurationProviderTriggerKind {
+		/**
+		 *	`DebugConfigurationProvider.provideDebugConfigurations` is called to provide the initial debug configurations for a newly created launch.json.
+		 */
+		Initial = 1,
+		/**
+		 * `DebugConfigurationProvider.provideDebugConfigurations` is called to provide dynamically generated debug configurations when the user asks for them through the UI (e.g. via the "Select and Start Debugging" command).
+		 */
+		Dynamic = 2
+	}
+
+	/**
+	 * Namespace for debug functionality.
+	 */
+	export namespace debug {
+
+		/**
+		 * The currently active [debug session](#DebugSession) or `undefined`. The active debug session is the one
+		 * represented by the debug action floating window or the one currently shown in the drop down menu of the debug action floating window.
+		 * If no debug session is active, the value is `undefined`.
+		 */
+		export let activeDebugSession: DebugSession | undefined;
+
+		/**
+		 * The currently active [debug console](#DebugConsole).
+		 * If no debug session is active, output sent to the debug console is not shown.
+		 */
+		export let activeDebugConsole: DebugConsole;
+
+		/**
+		 * List of breakpoints.
+		 */
+		export let breakpoints: Breakpoint[];
+
+		/**
+		 * An [event](#Event) which fires when the [active debug session](#debug.activeDebugSession)
+		 * has changed. *Note* that the event also fires when the active debug session changes
+		 * to `undefined`.
+		 */
+		export const onDidChangeActiveDebugSession: Event<DebugSession | undefined>;
+
+		/**
+		 * An [event](#Event) which fires when a new [debug session](#DebugSession) has been started.
+		 */
+		export const onDidStartDebugSession: Event<DebugSession>;
+
+		/**
+		 * An [event](#Event) which fires when a custom DAP event is received from the [debug session](#DebugSession).
+		 */
+		export const onDidReceiveDebugSessionCustomEvent: Event<DebugSessionCustomEvent>;
+
+		/**
+		 * An [event](#Event) which fires when a [debug session](#DebugSession) has terminated.
+		 */
+		export const onDidTerminateDebugSession: Event<DebugSession>;
+
+		/**
+		 * An [event](#Event) that is emitted when the set of breakpoints is added, removed, or changed.
+		 */
+		export const onDidChangeBreakpoints: Event<BreakpointsChangeEvent>;
+
+		/**
+		 * Register a [debug configuration provider](#DebugConfigurationProvider) for a specific debug type.
+		 * The optional [triggerKind](#DebugConfigurationProviderTriggerKind) can be used to specify when the `provideDebugConfigurations` method of the provider is triggered.
+		 * Currently two trigger kinds are possible: with the value `Initial` (or if no trigger kind argument is given) the `provideDebugConfigurations` method is used to provide the initial debug configurations to be copied into a newly created launch.json.
+		 * With the trigger kind `Dynamic` the `provideDebugConfigurations` method is used to dynamically determine debug configurations to be presented to the user (in addition to the static configurations from the launch.json).
+		 * Please note that the `triggerKind` argument only applies to the `provideDebugConfigurations` method: so the `resolveDebugConfiguration` methods are not affected at all.
+		 * Registering a single provider with resolve methods for different trigger kinds, results in the same resolve methods called multiple times.
+		 * More than one provider can be registered for the same type.
+		 *
+		 * @param type The debug type for which the provider is registered.
+		 * @param provider The [debug configuration provider](#DebugConfigurationProvider) to register.
+		 * @param triggerKind The [trigger](#DebugConfigurationProviderTrigger) for which the 'provideDebugConfiguration' method of the provider is registered. If `triggerKind` is missing, the value `DebugConfigurationProviderTriggerKind.Initial` is assumed.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerDebugConfigurationProvider(debugType: string, provider: DebugConfigurationProvider, triggerKind?: DebugConfigurationProviderTriggerKind): Disposable;
+
+		/**
+		 * Register a [debug adapter descriptor factory](#DebugAdapterDescriptorFactory) for a specific debug type.
+		 * An extension is only allowed to register a DebugAdapterDescriptorFactory for the debug type(s) defined by the extension. Otherwise an error is thrown.
+		 * Registering more than one DebugAdapterDescriptorFactory for a debug type results in an error.
+		 *
+		 * @param debugType The debug type for which the factory is registered.
+		 * @param factory The [debug adapter descriptor factory](#DebugAdapterDescriptorFactory) to register.
+		 * @return A [disposable](#Disposable) that unregisters this factory when being disposed.
+		 */
+		export function registerDebugAdapterDescriptorFactory(debugType: string, factory: DebugAdapterDescriptorFactory): Disposable;
+
+		/**
+		 * Register a debug adapter tracker factory for the given debug type.
+		 *
+		 * @param debugType The debug type for which the factory is registered or '*' for matching all debug types.
+		 * @param factory The [debug adapter tracker factory](#DebugAdapterTrackerFactory) to register.
+		 * @return A [disposable](#Disposable) that unregisters this factory when being disposed.
+		 */
+		export function registerDebugAdapterTrackerFactory(debugType: string, factory: DebugAdapterTrackerFactory): Disposable;
+
+		/**
+		 * Start debugging by using either a named launch or named compound configuration,
+		 * or by directly passing a [DebugConfiguration](#DebugConfiguration).
+		 * The named configurations are looked up in '.vscode/launch.json' found in the given folder.
+		 * Before debugging starts, all unsaved files are saved and the launch configurations are brought up-to-date.
+		 * Folder specific variables used in the configuration (e.g. '${workspaceFolder}') are resolved against the given folder.
+		 * @param folder The [workspace folder](#WorkspaceFolder) for looking up named configurations and resolving variables or `undefined` for a non-folder setup.
+		 * @param nameOrConfiguration Either the name of a debug or compound configuration or a [DebugConfiguration](#DebugConfiguration) object.
+		 * @param parentSessionOrOptions Debug session options. When passed a parent [debug session](#DebugSession), assumes options with just this parent session.
+		 * @return A thenable that resolves when debugging could be successfully started.
+		 */
+		export function startDebugging(folder: WorkspaceFolder | undefined, nameOrConfiguration: string | DebugConfiguration, parentSessionOrOptions?: DebugSession | DebugSessionOptions): Thenable<boolean>;
+
+		/**
+		 * Stop the given debug session or stop all debug sessions if session is omitted.
+		 * @param session The [debug session](#DebugSession) to stop; if omitted all sessions are stopped.
+		 */
+		export function stopDebugging(session?: DebugSession): Thenable<void>;
+
+		/**
+		 * Add breakpoints.
+		 * @param breakpoints The breakpoints to add.
+		*/
+		export function addBreakpoints(breakpoints: Breakpoint[]): void;
+
+		/**
+		 * Remove breakpoints.
+		 * @param breakpoints The breakpoints to remove.
+		 */
+		export function removeBreakpoints(breakpoints: Breakpoint[]): void;
+
+		/**
+		 * Converts a "Source" descriptor object received via the Debug Adapter Protocol into a Uri that can be used to load its contents.
+		 * If the source descriptor is based on a path, a file Uri is returned.
+		 * If the source descriptor uses a reference number, a specific debug Uri (scheme 'debug') is constructed that requires a corresponding VS Code ContentProvider and a running debug session
+		 *
+		 * If the "Source" descriptor has insufficient information for creating the Uri, an error is thrown.
+		 *
+		 * @param source An object conforming to the [Source](https://microsoft.github.io/debug-adapter-protocol/specification#Types_Source) type defined in the Debug Adapter Protocol.
+		 * @param session An optional debug session that will be used when the source descriptor uses a reference number to load the contents from an active debug session.
+		 * @return A uri that can be used to load the contents of the source.
+		 */
+		export function asDebugSourceUri(source: DebugProtocolSource, session?: DebugSession): Uri;
+	}
+
+	/**
+	 * Namespace for dealing with installed extensions. Extensions are represented
+	 * by an [extension](#Extension)-interface which enables reflection on them.
+	 *
+	 * Extension writers can provide APIs to other extensions by returning their API public
+	 * surface from the `activate`-call.
+	 *
+	 * ```javascript
+	 * export function activate(context: vscode.ExtensionContext) {
+	 * 	let api = {
+	 * 		sum(a, b) {
+	 * 			return a + b;
+	 * 		},
+	 * 		mul(a, b) {
+	 * 			return a * b;
+	 * 		}
+	 * 	};
+	 * 	// 'export' public api-surface
+	 * 	return api;
+	 * }
+	 * ```
+	 * When depending on the API of another extension add an `extensionDependencies`-entry
+	 * to `package.json`, and use the [getExtension](#extensions.getExtension)-function
+	 * and the [exports](#Extension.exports)-property, like below:
+	 *
+	 * ```javascript
+	 * let mathExt = extensions.getExtension('genius.math');
+	 * let importedApi = mathExt.exports;
+	 *
+	 * console.log(importedApi.mul(42, 1));
+	 * ```
+	 */
+	export namespace extensions {
+
+		/**
+		 * Get an extension by its full identifier in the form of: `publisher.name`.
+		 *
+		 * @param extensionId An extension identifier.
+		 * @return An extension or `undefined`.
+		 */
+		export function getExtension(extensionId: string): Extension<any> | undefined;
+
+		/**
+		 * Get an extension by its full identifier in the form of: `publisher.name`.
+		 *
+		 * @param extensionId An extension identifier.
+		 * @return An extension or `undefined`.
+		 */
+		export function getExtension<T>(extensionId: string): Extension<T> | undefined;
+
+		/**
+		 * All extensions currently known to the system.
+		 */
+		export const all: ReadonlyArray<Extension<any>>;
+
+		/**
+		 * An event which fires when `extensions.all` changes. This can happen when extensions are
+		 * installed, uninstalled, enabled or disabled.
+		 */
+		export const onDidChange: Event<void>;
+	}
+
+	/**
+	 * Collapsible state of a [comment thread](#CommentThread)
+	 */
+	export enum CommentThreadCollapsibleState {
+		/**
+		 * Determines an item is collapsed
+		 */
+		Collapsed = 0,
+
+		/**
+		 * Determines an item is expanded
+		 */
+		Expanded = 1
+	}
+
+	/**
+	 * Comment mode of a [comment](#Comment)
+	 */
+	export enum CommentMode {
+		/**
+		 * Displays the comment editor
+		 */
+		Editing = 0,
+
+		/**
+		 * Displays the preview of the comment
+		 */
+		Preview = 1
+	}
+
+	/**
+	 * A collection of [comments](#Comment) representing a conversation at a particular range in a document.
+	 */
+	export interface CommentThread {
+		/**
+		 * The uri of the document the thread has been created on.
+		 */
+		readonly uri: Uri;
+
+		/**
+		 * The range the comment thread is located within the document. The thread icon will be shown
+		 * at the first line of the range.
+		 */
+		range: Range;
+
+		/**
+		 * The ordered comments of the thread.
+		 */
+		comments: ReadonlyArray<Comment>;
+
+		/**
+		 * Whether the thread should be collapsed or expanded when opening the document.
+		 * Defaults to Collapsed.
+		 */
+		collapsibleState: CommentThreadCollapsibleState;
+
+		/**
+		 * Whether the thread supports reply.
+		 * Defaults to true.
+		 */
+		canReply: boolean;
+
+		/**
+		 * Context value of the comment thread. This can be used to contribute thread specific actions.
+		 * For example, a comment thread is given a context value as `editable`. When contributing actions to `comments/commentThread/title`
+		 * using `menus` extension point, you can specify context value for key `commentThread` in `when` expression like `commentThread == editable`.
+		 * ```
+		 *	"contributes": {
+		 *		"menus": {
+		 *			"comments/commentThread/title": [
+		 *				{
+		 *					"command": "extension.deleteCommentThread",
+		 *					"when": "commentThread == editable"
+		 *				}
+		 *			]
+		 *		}
+		 *	}
+		 * ```
+		 * This will show action `extension.deleteCommentThread` only for comment threads with `contextValue` is `editable`.
+		 */
+		contextValue?: string;
+
+		/**
+		 * The optional human-readable label describing the [Comment Thread](#CommentThread)
+		 */
+		label?: string;
+
+		/**
+		 * Dispose this comment thread.
+		 *
+		 * Once disposed, this comment thread will be removed from visible editors and Comment Panel when appropriate.
+		 */
+		dispose(): void;
+	}
+
+	/**
+	 * Author information of a [comment](#Comment)
+	 */
+	export interface CommentAuthorInformation {
+		/**
+		 * The display name of the author of the comment
+		 */
+		name: string;
+
+		/**
+		 * The optional icon path for the author
+		 */
+		iconPath?: Uri;
+	}
+
+	/**
+	 * Reactions of a [comment](#Comment)
+	 */
+	export interface CommentReaction {
+		/**
+		 * The human-readable label for the reaction
+		 */
+		readonly label: string;
+
+		/**
+		 * Icon for the reaction shown in UI.
+		 */
+		readonly iconPath: string | Uri;
+
+		/**
+		 * The number of users who have reacted to this reaction
+		 */
+		readonly count: number;
+
+		/**
+		 * Whether the [author](CommentAuthorInformation) of the comment has reacted to this reaction
+		 */
+		readonly authorHasReacted: boolean;
+	}
+
+	/**
+	 * A comment is displayed within the editor or the Comments Panel, depending on how it is provided.
+	 */
+	export interface Comment {
+		/**
+		 * The human-readable comment body
+		 */
+		body: string | MarkdownString;
+
+		/**
+		 * [Comment mode](#CommentMode) of the comment
+		 */
+		mode: CommentMode;
+
+		/**
+		 * The [author information](#CommentAuthorInformation) of the comment
+		 */
+		author: CommentAuthorInformation;
+
+		/**
+		 * Context value of the comment. This can be used to contribute comment specific actions.
+		 * For example, a comment is given a context value as `editable`. When contributing actions to `comments/comment/title`
+		 * using `menus` extension point, you can specify context value for key `comment` in `when` expression like `comment == editable`.
+		 * ```json
+		 *	"contributes": {
+		 *		"menus": {
+		 *			"comments/comment/title": [
+		 *				{
+		 *					"command": "extension.deleteComment",
+		 *					"when": "comment == editable"
+		 *				}
+		 *			]
+		 *		}
+		 *	}
+		 * ```
+		 * This will show action `extension.deleteComment` only for comments with `contextValue` is `editable`.
+		 */
+		contextValue?: string;
+
+		/**
+		 * Optional reactions of the [comment](#Comment)
+		 */
+		reactions?: CommentReaction[];
+
+		/**
+		 * Optional label describing the [Comment](#Comment)
+		 * Label will be rendered next to authorName if exists.
+		 */
+		label?: string;
+	}
+
+	/**
+	 * Command argument for actions registered in `comments/commentThread/context`.
+	 */
+	export interface CommentReply {
+		/**
+		 * The active [comment thread](#CommentThread)
+		 */
+		thread: CommentThread;
+
+		/**
+		 * The value in the comment editor
+		 */
+		text: string;
+	}
+
+	/**
+	 * Commenting range provider for a [comment controller](#CommentController).
+	 */
+	export interface CommentingRangeProvider {
+		/**
+		 * Provide a list of ranges which allow new comment threads creation or null for a given document
+		 */
+		provideCommentingRanges(document: TextDocument, token: CancellationToken): ProviderResult<Range[]>;
+	}
+
+	/**
+	 * Represents a [comment controller](#CommentController)'s [options](#CommentController.options).
+	 */
+	export interface CommentOptions {
+		/**
+		 * An optional string to show on the comment input box when it's collapsed.
+		 */
+		prompt?: string;
+
+		/**
+		 * An optional string to show as placeholder in the comment input box when it's focused.
+		 */
+		placeHolder?: string;
+	}
+
+	/**
+	 * A comment controller is able to provide [comments](#CommentThread) support to the editor and
+	 * provide users various ways to interact with comments.
+	 */
+	export interface CommentController {
+		/**
+		 * The id of this comment controller.
+		 */
+		readonly id: string;
+
+		/**
+		 * The human-readable label of this comment controller.
+		 */
+		readonly label: string;
+
+		/**
+		 * Comment controller options
+		 */
+		options?: CommentOptions;
+
+		/**
+		 * Optional commenting range provider. Provide a list [ranges](#Range) which support commenting to any given resource uri.
+		 *
+		 * If not provided, users can leave comments in any document opened in the editor.
+		 */
+		commentingRangeProvider?: CommentingRangeProvider;
+
+		/**
+		 * Create a [comment thread](#CommentThread). The comment thread will be displayed in visible text editors (if the resource matches)
+		 * and Comments Panel once created.
+		 *
+		 * @param uri The uri of the document the thread has been created on.
+		 * @param range The range the comment thread is located within the document.
+		 * @param comments The ordered comments of the thread.
+		 */
+		createCommentThread(uri: Uri, range: Range, comments: Comment[]): CommentThread;
+
+		/**
+		 * Optional reaction handler for creating and deleting reactions on a [comment](#Comment).
+		 */
+		reactionHandler?: (comment: Comment, reaction: CommentReaction) => Thenable<void>;
+
+		/**
+		 * Dispose this comment controller.
+		 *
+		 * Once disposed, all [comment threads](#CommentThread) created by this comment controller will also be removed from the editor
+		 * and Comments Panel.
+		 */
+		dispose(): void;
+	}
+
+	namespace comments {
+		/**
+		 * Creates a new [comment controller](#CommentController) instance.
+		 *
+		 * @param id An `id` for the comment controller.
+		 * @param label A human-readable string for the comment controller.
+		 * @return An instance of [comment controller](#CommentController).
+		 */
+		export function createCommentController(id: string, label: string): CommentController;
+	}
+
+	//#endregion
+
+	/**
+	 * Represents a session of a currently logged in user.
+	 */
+	export interface AuthenticationSession {
+		/**
+		 * The identifier of the authentication session.
+		 */
+		readonly id: string;
+
+		/**
+		 * The access token.
+		 */
+		readonly accessToken: string;
+
+		/**
+		 * The account associated with the session.
+		 */
+		readonly account: AuthenticationSessionAccountInformation;
+
+		/**
+		 * The permissions granted by the session's access token. Available scopes
+		 * are defined by the [AuthenticationProvider](#AuthenticationProvider).
+		 */
+		readonly scopes: ReadonlyArray<string>;
+	}
+
+	/**
+	 * The information of an account associated with an [AuthenticationSession](#AuthenticationSession).
+	 */
+	export interface AuthenticationSessionAccountInformation {
+		/**
+		 * The unique identifier of the account.
+		 */
+		readonly id: string;
+
+		/**
+		 * The human-readable name of the account.
+		 */
+		readonly label: string;
+	}
+
+
+	/**
+	 * Options to be used when getting an [AuthenticationSession](#AuthenticationSession) from an [AuthenticationProvider](#AuthenticationProvider).
+	 */
+	export interface AuthenticationGetSessionOptions {
+		/**
+		 * Whether login should be performed if there is no matching session.
+		 *
+		 * If true, a modal dialog will be shown asking the user to sign in. If false, a numbered badge will be shown
+		 * on the accounts activity bar icon. An entry for the extension will be added under the menu to sign in. This
+		 * allows quietly prompting the user to sign in.
+		 *
+		 * If there is a matching session but the extension has not been granted access to it, setting this to true
+		 * will also result in an immediate modal dialog, and false will add a numbered badge to the accounts icon.
+		 *
+		 * Defaults to false.
+		 */
+		createIfNone?: boolean;
+
+		/**
+		 * Whether the existing user session preference should be cleared.
+		 *
+		 * For authentication providers that support being signed into multiple accounts at once, the user will be
+		 * prompted to select an account to use when [getSession](#authentication.getSession) is called. This preference
+		 * is remembered until [getSession](#authentication.getSession) is called with this flag.
+		 *
+		 * Defaults to false.
+		 */
+		clearSessionPreference?: boolean;
+	}
+
+	/**
+	 * Basic information about an [authenticationProvider](#AuthenticationProvider)
+	 */
+	export interface AuthenticationProviderInformation {
+		/**
+		 * The unique identifier of the authentication provider.
+		 */
+		readonly id: string;
+
+		/**
+		 * The human-readable name of the authentication provider.
+		 */
+		readonly label: string;
+	}
+
+	/**
+	 * An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed.
+	 */
+	export interface AuthenticationSessionsChangeEvent {
+		/**
+		 * The [authenticationProvider](#AuthenticationProvider) that has had its sessions change.
+		 */
+		readonly provider: AuthenticationProviderInformation;
+	}
+
+	/**
+	 * Options for creating an [AuthenticationProvider](#AuthenticationProvider).
+	 */
+	export interface AuthenticationProviderOptions {
+		/**
+		 * Whether it is possible to be signed into multiple accounts at once with this provider.
+		 * If not specified, will default to false.
+		*/
+		readonly supportsMultipleAccounts?: boolean;
+	}
+
+	/**
+	* An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed.
+	*/
+	export interface AuthenticationProviderAuthenticationSessionsChangeEvent {
+		/**
+		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been added.
+		*/
+		readonly added?: ReadonlyArray<AuthenticationSession>;
+
+		/**
+		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been removed.
+		 */
+		readonly removed?: ReadonlyArray<AuthenticationSession>;
+
+		/**
+		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been changed.
+		 * A session changes when its data excluding the id are updated. An example of this is a session refresh that results in a new
+		 * access token being set for the session.
+		 */
+		readonly changed?: ReadonlyArray<AuthenticationSession>;
+	}
+
+	/**
+	 * A provider for performing authentication to a service.
+	 */
+	export interface AuthenticationProvider {
+		/**
+		 * An [event](#Event) which fires when the array of sessions has changed, or data
+		 * within a session has changed.
+		 */
+		readonly onDidChangeSessions: Event<AuthenticationProviderAuthenticationSessionsChangeEvent>;
+
+		/**
+		 * Get a list of sessions.
+		 * @param scopes An optional list of scopes. If provided, the sessions returned should match
+		 * these permissions, otherwise all sessions should be returned.
+		 * @returns A promise that resolves to an array of authentication sessions.
+		 */
+		getSessions(scopes?: string[]): Thenable<ReadonlyArray<AuthenticationSession>>;
+
+		/**
+		 * Prompts a user to login.
+		 *
+		 * If login is successful, the onDidChangeSessions event should be fired.
+		 *
+		 * If login fails, a rejected promise should be returned.
+		 *
+		 * If the provider has specified that it does not support multiple accounts,
+		 * then this should never be called if there is already an existing session matching these
+		 * scopes.
+		 * @param scopes A list of scopes, permissions, that the new session should be created with.
+		 * @returns A promise that resolves to an authentication session.
+		 */
+		createSession(scopes: string[]): Thenable<AuthenticationSession>;
+
+		/**
+		 * Removes the session corresponding to session id.
+		 *
+		 * If the removal is successful, the onDidChangeSessions event should be fired.
+		 *
+		 * If a session cannot be removed, the provider should reject with an error message.
+		 * @param sessionId The id of the session to remove.
+		 */
+		removeSession(sessionId: string): Thenable<void>;
+	}
+
+
+	/**
+	 * Namespace for authentication.
+	 */
+	export namespace authentication {
+		/**
+		 * Get an authentication session matching the desired scopes. Rejects if a provider with providerId is not
+		 * registered, or if the user does not consent to sharing authentication information with
+		 * the extension. If there are multiple sessions with the same scopes, the user will be shown a
+		 * quickpick to select which account they would like to use.
+		 *
+		 * Currently, there are only two authentication providers that are contributed from built in extensions
+		 * to VS Code that implement GitHub and Microsoft authentication: their providerId's are 'github' and 'microsoft'.
+		 * @param providerId The id of the provider to use
+		 * @param scopes A list of scopes representing the permissions requested. These are dependent on the authentication provider
+		 * @param options The [getSessionOptions](#GetSessionOptions) to use
+		 * @returns A thenable that resolves to an authentication session
+		 */
+		export function getSession(providerId: string, scopes: string[], options: AuthenticationGetSessionOptions & { createIfNone: true }): Thenable<AuthenticationSession>;
+
+		/**
+		 * Get an authentication session matching the desired scopes. Rejects if a provider with providerId is not
+		 * registered, or if the user does not consent to sharing authentication information with
+		 * the extension. If there are multiple sessions with the same scopes, the user will be shown a
+		 * quickpick to select which account they would like to use.
+		 *
+		 * Currently, there are only two authentication providers that are contributed from built in extensions
+		 * to VS Code that implement GitHub and Microsoft authentication: their providerId's are 'github' and 'microsoft'.
+		 * @param providerId The id of the provider to use
+		 * @param scopes A list of scopes representing the permissions requested. These are dependent on the authentication provider
+		 * @param options The [getSessionOptions](#GetSessionOptions) to use
+		 * @returns A thenable that resolves to an authentication session if available, or undefined if there are no sessions
+		 */
+		export function getSession(providerId: string, scopes: string[], options?: AuthenticationGetSessionOptions): Thenable<AuthenticationSession | undefined>;
+
+		/**
+		 * An [event](#Event) which fires when the authentication sessions of an authentication provider have
+		 * been added, removed, or changed.
+		 */
+		export const onDidChangeSessions: Event<AuthenticationSessionsChangeEvent>;
+
+		/**
+		 * Register an authentication provider.
+		 *
+		 * There can only be one provider per id and an error is being thrown when an id
+		 * has already been used by another provider. Ids are case-sensitive.
+		 *
+		 * @param id The unique identifier of the provider.
+		 * @param label The human-readable name of the provider.
+		 * @param provider The authentication provider provider.
+		 * @params options Additional options for the provider.
+		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
+		 */
+		export function registerAuthenticationProvider(id: string, label: string, provider: AuthenticationProvider, options?: AuthenticationProviderOptions): Disposable;
+	}
+}
+
+/**
+ * Thenable is a common denominator between ES6 promises, Q, jquery.Deferred, WinJS.Promise,
+ * and others. This API makes no assumption about what promise library is being used which
+ * enables reusing existing code without migrating to a specific promise implementation. Still,
+ * we recommend the use of native promises which are available in this editor.
+ */
+interface Thenable<T> {
+	/**
+	* Attaches callbacks for the resolution and/or rejection of the Promise.
+	* @param onfulfilled The callback to execute when the Promise is resolved.
+	* @param onrejected The callback to execute when the Promise is rejected.
+	* @returns A Promise for the completion of which ever callback is executed.
+	*/
+	then<TResult>(onfulfilled?: (value: T) => TResult | Thenable<TResult>, onrejected?: (reason: any) => TResult | Thenable<TResult>): Thenable<TResult>;
+	then<TResult>(onfulfilled?: (value: T) => TResult | Thenable<TResult>, onrejected?: (reason: any) => void): Thenable<TResult>;
+}
diff --git a/tsconfig.base.json b/tsconfig.base.json
new file mode 100644
index 0000000..28ceeba
--- /dev/null
+++ b/tsconfig.base.json
@@ -0,0 +1,11 @@
+{
+	"compilerOptions": {
+		"module": "commonjs",
+		"target": "ES2019",
+		"lib": [
+			"ES2019"
+		],
+		"sourceMap": true,
+		"moduleResolution": "Node",
+	}
+}
diff --git a/tsconfig.json b/tsconfig.json
index 2e4699f..57e1dd7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,17 +1,8 @@
 {
-	"compilerOptions": {
-		"module": "commonjs",
-		"target": "es2019",
-		"lib": ["ES2019"],
-		"outDir": "out",
-		"rootDir": "src",
-		"sourceMap": true
-	},
-	"include": [
-		"src"
-	],
-	"exclude": [
-		"node_modules",
-		".vscode-test"
+	"files": [],
+	"references": [
+		{
+			"path": "./src"
+		}
 	]
-}
\ No newline at end of file
+}

From d6df615095882446521ad36f44dd0b4412a8be16 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Mon, 29 Mar 2021 16:20:42 +0200
Subject: [PATCH 10/14] try update

---
 .gitignore                           |     3 +-
 .vscode/launch.json                  |     2 +-
 dist/extension.js                    | 10575 -------------------------
 dist/extension.js.map                |     7 -
 samples/hello.moosebook              |     1 +
 src/extension.ts                     |     1 +
 src/moosebookProvider.ts             |    13 +-
 src/{types => }/vscode.d.ts          |   315 +-
 src/{types => }/vscode.proposed.d.ts |    53 +-
 9 files changed, 51 insertions(+), 10919 deletions(-)
 delete mode 100644 dist/extension.js
 delete mode 100644 dist/extension.js.map
 rename src/{types => }/vscode.d.ts (97%)
 rename src/{types => }/vscode.proposed.d.ts (98%)

diff --git a/.gitignore b/.gitignore
index 7e20889..7d07853 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 out
 node_modules/
-*.vsix
\ No newline at end of file
+*.vsix
+dist
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
index a97d705..f2b1c2c 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -9,7 +9,7 @@
 			"runtimeExecutable": "${execPath}",
 			"args": ["--extensionDevelopmentPath=${workspaceRoot}", 
 				"${workspaceFolder}/samples"],
-			"outFiles": ["${workspaceRoot}/out/**/*.js"],
+			"outFiles": ["${workspaceRoot}/dist/**/*.js"],
 			"preLaunchTask": {
 				"type": "npm",
 				"script": "compile"
diff --git a/dist/extension.js b/dist/extension.js
deleted file mode 100644
index d2f1d70..0000000
--- a/dist/extension.js
+++ /dev/null
@@ -1,10575 +0,0 @@
-var __create = Object.create;
-var __defProp = Object.defineProperty;
-var __getProtoOf = Object.getPrototypeOf;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __getOwnPropNames = Object.getOwnPropertyNames;
-var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
-var __markAsModule = (target) => __defProp(target, "__esModule", {value: true});
-var __commonJS = (callback, module2) => () => {
-  if (!module2) {
-    module2 = {exports: {}};
-    callback(module2.exports, module2);
-  }
-  return module2.exports;
-};
-var __export = (target, all) => {
-  for (var name in all)
-    __defProp(target, name, {get: all[name], enumerable: true});
-};
-var __exportStar = (target, module2, desc) => {
-  if (module2 && typeof module2 === "object" || typeof module2 === "function") {
-    for (let key of __getOwnPropNames(module2))
-      if (!__hasOwnProp.call(target, key) && key !== "default")
-        __defProp(target, key, {get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable});
-  }
-  return target;
-};
-var __toModule = (module2) => {
-  return __exportStar(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? {get: () => module2.default, enumerable: true} : {value: module2, enumerable: true})), module2);
-};
-
-// node_modules/vscode-languageclient/node_modules/semver/semver.js
-var require_semver = __commonJS((exports2, module2) => {
-  exports2 = module2.exports = SemVer;
-  var debug2;
-  if (typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
-    debug2 = function() {
-      var args = Array.prototype.slice.call(arguments, 0);
-      args.unshift("SEMVER");
-      console.log.apply(console, args);
-    };
-  } else {
-    debug2 = function() {
-    };
-  }
-  exports2.SEMVER_SPEC_VERSION = "2.0.0";
-  var MAX_LENGTH = 256;
-  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
-  var MAX_SAFE_COMPONENT_LENGTH = 16;
-  var re = exports2.re = [];
-  var src = exports2.src = [];
-  var t = exports2.tokens = {};
-  var R = 0;
-  function tok(n) {
-    t[n] = R++;
-  }
-  tok("NUMERICIDENTIFIER");
-  src[t.NUMERICIDENTIFIER] = "0|[1-9]\\d*";
-  tok("NUMERICIDENTIFIERLOOSE");
-  src[t.NUMERICIDENTIFIERLOOSE] = "[0-9]+";
-  tok("NONNUMERICIDENTIFIER");
-  src[t.NONNUMERICIDENTIFIER] = "\\d*[a-zA-Z-][a-zA-Z0-9-]*";
-  tok("MAINVERSION");
-  src[t.MAINVERSION] = "(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")\\.(" + src[t.NUMERICIDENTIFIER] + ")";
-  tok("MAINVERSIONLOOSE");
-  src[t.MAINVERSIONLOOSE] = "(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")\\.(" + src[t.NUMERICIDENTIFIERLOOSE] + ")";
-  tok("PRERELEASEIDENTIFIER");
-  src[t.PRERELEASEIDENTIFIER] = "(?:" + src[t.NUMERICIDENTIFIER] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
-  tok("PRERELEASEIDENTIFIERLOOSE");
-  src[t.PRERELEASEIDENTIFIERLOOSE] = "(?:" + src[t.NUMERICIDENTIFIERLOOSE] + "|" + src[t.NONNUMERICIDENTIFIER] + ")";
-  tok("PRERELEASE");
-  src[t.PRERELEASE] = "(?:-(" + src[t.PRERELEASEIDENTIFIER] + "(?:\\." + src[t.PRERELEASEIDENTIFIER] + ")*))";
-  tok("PRERELEASELOOSE");
-  src[t.PRERELEASELOOSE] = "(?:-?(" + src[t.PRERELEASEIDENTIFIERLOOSE] + "(?:\\." + src[t.PRERELEASEIDENTIFIERLOOSE] + ")*))";
-  tok("BUILDIDENTIFIER");
-  src[t.BUILDIDENTIFIER] = "[0-9A-Za-z-]+";
-  tok("BUILD");
-  src[t.BUILD] = "(?:\\+(" + src[t.BUILDIDENTIFIER] + "(?:\\." + src[t.BUILDIDENTIFIER] + ")*))";
-  tok("FULL");
-  tok("FULLPLAIN");
-  src[t.FULLPLAIN] = "v?" + src[t.MAINVERSION] + src[t.PRERELEASE] + "?" + src[t.BUILD] + "?";
-  src[t.FULL] = "^" + src[t.FULLPLAIN] + "$";
-  tok("LOOSEPLAIN");
-  src[t.LOOSEPLAIN] = "[v=\\s]*" + src[t.MAINVERSIONLOOSE] + src[t.PRERELEASELOOSE] + "?" + src[t.BUILD] + "?";
-  tok("LOOSE");
-  src[t.LOOSE] = "^" + src[t.LOOSEPLAIN] + "$";
-  tok("GTLT");
-  src[t.GTLT] = "((?:<|>)?=?)";
-  tok("XRANGEIDENTIFIERLOOSE");
-  src[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + "|x|X|\\*";
-  tok("XRANGEIDENTIFIER");
-  src[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + "|x|X|\\*";
-  tok("XRANGEPLAIN");
-  src[t.XRANGEPLAIN] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:\\.(" + src[t.XRANGEIDENTIFIER] + ")(?:" + src[t.PRERELEASE] + ")?" + src[t.BUILD] + "?)?)?";
-  tok("XRANGEPLAINLOOSE");
-  src[t.XRANGEPLAINLOOSE] = "[v=\\s]*(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:\\.(" + src[t.XRANGEIDENTIFIERLOOSE] + ")(?:" + src[t.PRERELEASELOOSE] + ")?" + src[t.BUILD] + "?)?)?";
-  tok("XRANGE");
-  src[t.XRANGE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAIN] + "$";
-  tok("XRANGELOOSE");
-  src[t.XRANGELOOSE] = "^" + src[t.GTLT] + "\\s*" + src[t.XRANGEPLAINLOOSE] + "$";
-  tok("COERCE");
-  src[t.COERCE] = "(^|[^\\d])(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "})(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:\\.(\\d{1," + MAX_SAFE_COMPONENT_LENGTH + "}))?(?:$|[^\\d])";
-  tok("COERCERTL");
-  re[t.COERCERTL] = new RegExp(src[t.COERCE], "g");
-  tok("LONETILDE");
-  src[t.LONETILDE] = "(?:~>?)";
-  tok("TILDETRIM");
-  src[t.TILDETRIM] = "(\\s*)" + src[t.LONETILDE] + "\\s+";
-  re[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], "g");
-  var tildeTrimReplace = "$1~";
-  tok("TILDE");
-  src[t.TILDE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAIN] + "$";
-  tok("TILDELOOSE");
-  src[t.TILDELOOSE] = "^" + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + "$";
-  tok("LONECARET");
-  src[t.LONECARET] = "(?:\\^)";
-  tok("CARETTRIM");
-  src[t.CARETTRIM] = "(\\s*)" + src[t.LONECARET] + "\\s+";
-  re[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], "g");
-  var caretTrimReplace = "$1^";
-  tok("CARET");
-  src[t.CARET] = "^" + src[t.LONECARET] + src[t.XRANGEPLAIN] + "$";
-  tok("CARETLOOSE");
-  src[t.CARETLOOSE] = "^" + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + "$";
-  tok("COMPARATORLOOSE");
-  src[t.COMPARATORLOOSE] = "^" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + ")$|^$";
-  tok("COMPARATOR");
-  src[t.COMPARATOR] = "^" + src[t.GTLT] + "\\s*(" + src[t.FULLPLAIN] + ")$|^$";
-  tok("COMPARATORTRIM");
-  src[t.COMPARATORTRIM] = "(\\s*)" + src[t.GTLT] + "\\s*(" + src[t.LOOSEPLAIN] + "|" + src[t.XRANGEPLAIN] + ")";
-  re[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], "g");
-  var comparatorTrimReplace = "$1$2$3";
-  tok("HYPHENRANGE");
-  src[t.HYPHENRANGE] = "^\\s*(" + src[t.XRANGEPLAIN] + ")\\s+-\\s+(" + src[t.XRANGEPLAIN] + ")\\s*$";
-  tok("HYPHENRANGELOOSE");
-  src[t.HYPHENRANGELOOSE] = "^\\s*(" + src[t.XRANGEPLAINLOOSE] + ")\\s+-\\s+(" + src[t.XRANGEPLAINLOOSE] + ")\\s*$";
-  tok("STAR");
-  src[t.STAR] = "(<|>)?=?\\s*\\*";
-  for (var i = 0; i < R; i++) {
-    debug2(i, src[i]);
-    if (!re[i]) {
-      re[i] = new RegExp(src[i]);
-    }
-  }
-  exports2.parse = parse;
-  function parse(version, options) {
-    if (!options || typeof options !== "object") {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      };
-    }
-    if (version instanceof SemVer) {
-      return version;
-    }
-    if (typeof version !== "string") {
-      return null;
-    }
-    if (version.length > MAX_LENGTH) {
-      return null;
-    }
-    var r = options.loose ? re[t.LOOSE] : re[t.FULL];
-    if (!r.test(version)) {
-      return null;
-    }
-    try {
-      return new SemVer(version, options);
-    } catch (er) {
-      return null;
-    }
-  }
-  exports2.valid = valid;
-  function valid(version, options) {
-    var v = parse(version, options);
-    return v ? v.version : null;
-  }
-  exports2.clean = clean;
-  function clean(version, options) {
-    var s = parse(version.trim().replace(/^[=v]+/, ""), options);
-    return s ? s.version : null;
-  }
-  exports2.SemVer = SemVer;
-  function SemVer(version, options) {
-    if (!options || typeof options !== "object") {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      };
-    }
-    if (version instanceof SemVer) {
-      if (version.loose === options.loose) {
-        return version;
-      } else {
-        version = version.version;
-      }
-    } else if (typeof version !== "string") {
-      throw new TypeError("Invalid Version: " + version);
-    }
-    if (version.length > MAX_LENGTH) {
-      throw new TypeError("version is longer than " + MAX_LENGTH + " characters");
-    }
-    if (!(this instanceof SemVer)) {
-      return new SemVer(version, options);
-    }
-    debug2("SemVer", version, options);
-    this.options = options;
-    this.loose = !!options.loose;
-    var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
-    if (!m) {
-      throw new TypeError("Invalid Version: " + version);
-    }
-    this.raw = version;
-    this.major = +m[1];
-    this.minor = +m[2];
-    this.patch = +m[3];
-    if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
-      throw new TypeError("Invalid major version");
-    }
-    if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
-      throw new TypeError("Invalid minor version");
-    }
-    if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
-      throw new TypeError("Invalid patch version");
-    }
-    if (!m[4]) {
-      this.prerelease = [];
-    } else {
-      this.prerelease = m[4].split(".").map(function(id) {
-        if (/^[0-9]+$/.test(id)) {
-          var num = +id;
-          if (num >= 0 && num < MAX_SAFE_INTEGER) {
-            return num;
-          }
-        }
-        return id;
-      });
-    }
-    this.build = m[5] ? m[5].split(".") : [];
-    this.format();
-  }
-  SemVer.prototype.format = function() {
-    this.version = this.major + "." + this.minor + "." + this.patch;
-    if (this.prerelease.length) {
-      this.version += "-" + this.prerelease.join(".");
-    }
-    return this.version;
-  };
-  SemVer.prototype.toString = function() {
-    return this.version;
-  };
-  SemVer.prototype.compare = function(other) {
-    debug2("SemVer.compare", this.version, this.options, other);
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options);
-    }
-    return this.compareMain(other) || this.comparePre(other);
-  };
-  SemVer.prototype.compareMain = function(other) {
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options);
-    }
-    return compareIdentifiers(this.major, other.major) || compareIdentifiers(this.minor, other.minor) || compareIdentifiers(this.patch, other.patch);
-  };
-  SemVer.prototype.comparePre = function(other) {
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options);
-    }
-    if (this.prerelease.length && !other.prerelease.length) {
-      return -1;
-    } else if (!this.prerelease.length && other.prerelease.length) {
-      return 1;
-    } else if (!this.prerelease.length && !other.prerelease.length) {
-      return 0;
-    }
-    var i2 = 0;
-    do {
-      var a = this.prerelease[i2];
-      var b = other.prerelease[i2];
-      debug2("prerelease compare", i2, a, b);
-      if (a === void 0 && b === void 0) {
-        return 0;
-      } else if (b === void 0) {
-        return 1;
-      } else if (a === void 0) {
-        return -1;
-      } else if (a === b) {
-        continue;
-      } else {
-        return compareIdentifiers(a, b);
-      }
-    } while (++i2);
-  };
-  SemVer.prototype.compareBuild = function(other) {
-    if (!(other instanceof SemVer)) {
-      other = new SemVer(other, this.options);
-    }
-    var i2 = 0;
-    do {
-      var a = this.build[i2];
-      var b = other.build[i2];
-      debug2("prerelease compare", i2, a, b);
-      if (a === void 0 && b === void 0) {
-        return 0;
-      } else if (b === void 0) {
-        return 1;
-      } else if (a === void 0) {
-        return -1;
-      } else if (a === b) {
-        continue;
-      } else {
-        return compareIdentifiers(a, b);
-      }
-    } while (++i2);
-  };
-  SemVer.prototype.inc = function(release, identifier) {
-    switch (release) {
-      case "premajor":
-        this.prerelease.length = 0;
-        this.patch = 0;
-        this.minor = 0;
-        this.major++;
-        this.inc("pre", identifier);
-        break;
-      case "preminor":
-        this.prerelease.length = 0;
-        this.patch = 0;
-        this.minor++;
-        this.inc("pre", identifier);
-        break;
-      case "prepatch":
-        this.prerelease.length = 0;
-        this.inc("patch", identifier);
-        this.inc("pre", identifier);
-        break;
-      case "prerelease":
-        if (this.prerelease.length === 0) {
-          this.inc("patch", identifier);
-        }
-        this.inc("pre", identifier);
-        break;
-      case "major":
-        if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
-          this.major++;
-        }
-        this.minor = 0;
-        this.patch = 0;
-        this.prerelease = [];
-        break;
-      case "minor":
-        if (this.patch !== 0 || this.prerelease.length === 0) {
-          this.minor++;
-        }
-        this.patch = 0;
-        this.prerelease = [];
-        break;
-      case "patch":
-        if (this.prerelease.length === 0) {
-          this.patch++;
-        }
-        this.prerelease = [];
-        break;
-      case "pre":
-        if (this.prerelease.length === 0) {
-          this.prerelease = [0];
-        } else {
-          var i2 = this.prerelease.length;
-          while (--i2 >= 0) {
-            if (typeof this.prerelease[i2] === "number") {
-              this.prerelease[i2]++;
-              i2 = -2;
-            }
-          }
-          if (i2 === -1) {
-            this.prerelease.push(0);
-          }
-        }
-        if (identifier) {
-          if (this.prerelease[0] === identifier) {
-            if (isNaN(this.prerelease[1])) {
-              this.prerelease = [identifier, 0];
-            }
-          } else {
-            this.prerelease = [identifier, 0];
-          }
-        }
-        break;
-      default:
-        throw new Error("invalid increment argument: " + release);
-    }
-    this.format();
-    this.raw = this.version;
-    return this;
-  };
-  exports2.inc = inc;
-  function inc(version, release, loose, identifier) {
-    if (typeof loose === "string") {
-      identifier = loose;
-      loose = void 0;
-    }
-    try {
-      return new SemVer(version, loose).inc(release, identifier).version;
-    } catch (er) {
-      return null;
-    }
-  }
-  exports2.diff = diff;
-  function diff(version1, version2) {
-    if (eq(version1, version2)) {
-      return null;
-    } else {
-      var v1 = parse(version1);
-      var v2 = parse(version2);
-      var prefix = "";
-      if (v1.prerelease.length || v2.prerelease.length) {
-        prefix = "pre";
-        var defaultResult = "prerelease";
-      }
-      for (var key in v1) {
-        if (key === "major" || key === "minor" || key === "patch") {
-          if (v1[key] !== v2[key]) {
-            return prefix + key;
-          }
-        }
-      }
-      return defaultResult;
-    }
-  }
-  exports2.compareIdentifiers = compareIdentifiers;
-  var numeric = /^[0-9]+$/;
-  function compareIdentifiers(a, b) {
-    var anum = numeric.test(a);
-    var bnum = numeric.test(b);
-    if (anum && bnum) {
-      a = +a;
-      b = +b;
-    }
-    return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
-  }
-  exports2.rcompareIdentifiers = rcompareIdentifiers;
-  function rcompareIdentifiers(a, b) {
-    return compareIdentifiers(b, a);
-  }
-  exports2.major = major;
-  function major(a, loose) {
-    return new SemVer(a, loose).major;
-  }
-  exports2.minor = minor;
-  function minor(a, loose) {
-    return new SemVer(a, loose).minor;
-  }
-  exports2.patch = patch;
-  function patch(a, loose) {
-    return new SemVer(a, loose).patch;
-  }
-  exports2.compare = compare;
-  function compare(a, b, loose) {
-    return new SemVer(a, loose).compare(new SemVer(b, loose));
-  }
-  exports2.compareLoose = compareLoose;
-  function compareLoose(a, b) {
-    return compare(a, b, true);
-  }
-  exports2.compareBuild = compareBuild;
-  function compareBuild(a, b, loose) {
-    var versionA = new SemVer(a, loose);
-    var versionB = new SemVer(b, loose);
-    return versionA.compare(versionB) || versionA.compareBuild(versionB);
-  }
-  exports2.rcompare = rcompare;
-  function rcompare(a, b, loose) {
-    return compare(b, a, loose);
-  }
-  exports2.sort = sort;
-  function sort(list, loose) {
-    return list.sort(function(a, b) {
-      return exports2.compareBuild(a, b, loose);
-    });
-  }
-  exports2.rsort = rsort;
-  function rsort(list, loose) {
-    return list.sort(function(a, b) {
-      return exports2.compareBuild(b, a, loose);
-    });
-  }
-  exports2.gt = gt;
-  function gt(a, b, loose) {
-    return compare(a, b, loose) > 0;
-  }
-  exports2.lt = lt;
-  function lt(a, b, loose) {
-    return compare(a, b, loose) < 0;
-  }
-  exports2.eq = eq;
-  function eq(a, b, loose) {
-    return compare(a, b, loose) === 0;
-  }
-  exports2.neq = neq;
-  function neq(a, b, loose) {
-    return compare(a, b, loose) !== 0;
-  }
-  exports2.gte = gte;
-  function gte(a, b, loose) {
-    return compare(a, b, loose) >= 0;
-  }
-  exports2.lte = lte;
-  function lte(a, b, loose) {
-    return compare(a, b, loose) <= 0;
-  }
-  exports2.cmp = cmp;
-  function cmp(a, op, b, loose) {
-    switch (op) {
-      case "===":
-        if (typeof a === "object")
-          a = a.version;
-        if (typeof b === "object")
-          b = b.version;
-        return a === b;
-      case "!==":
-        if (typeof a === "object")
-          a = a.version;
-        if (typeof b === "object")
-          b = b.version;
-        return a !== b;
-      case "":
-      case "=":
-      case "==":
-        return eq(a, b, loose);
-      case "!=":
-        return neq(a, b, loose);
-      case ">":
-        return gt(a, b, loose);
-      case ">=":
-        return gte(a, b, loose);
-      case "<":
-        return lt(a, b, loose);
-      case "<=":
-        return lte(a, b, loose);
-      default:
-        throw new TypeError("Invalid operator: " + op);
-    }
-  }
-  exports2.Comparator = Comparator;
-  function Comparator(comp, options) {
-    if (!options || typeof options !== "object") {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      };
-    }
-    if (comp instanceof Comparator) {
-      if (comp.loose === !!options.loose) {
-        return comp;
-      } else {
-        comp = comp.value;
-      }
-    }
-    if (!(this instanceof Comparator)) {
-      return new Comparator(comp, options);
-    }
-    debug2("comparator", comp, options);
-    this.options = options;
-    this.loose = !!options.loose;
-    this.parse(comp);
-    if (this.semver === ANY) {
-      this.value = "";
-    } else {
-      this.value = this.operator + this.semver.version;
-    }
-    debug2("comp", this);
-  }
-  var ANY = {};
-  Comparator.prototype.parse = function(comp) {
-    var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
-    var m = comp.match(r);
-    if (!m) {
-      throw new TypeError("Invalid comparator: " + comp);
-    }
-    this.operator = m[1] !== void 0 ? m[1] : "";
-    if (this.operator === "=") {
-      this.operator = "";
-    }
-    if (!m[2]) {
-      this.semver = ANY;
-    } else {
-      this.semver = new SemVer(m[2], this.options.loose);
-    }
-  };
-  Comparator.prototype.toString = function() {
-    return this.value;
-  };
-  Comparator.prototype.test = function(version) {
-    debug2("Comparator.test", version, this.options.loose);
-    if (this.semver === ANY || version === ANY) {
-      return true;
-    }
-    if (typeof version === "string") {
-      try {
-        version = new SemVer(version, this.options);
-      } catch (er) {
-        return false;
-      }
-    }
-    return cmp(version, this.operator, this.semver, this.options);
-  };
-  Comparator.prototype.intersects = function(comp, options) {
-    if (!(comp instanceof Comparator)) {
-      throw new TypeError("a Comparator is required");
-    }
-    if (!options || typeof options !== "object") {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      };
-    }
-    var rangeTmp;
-    if (this.operator === "") {
-      if (this.value === "") {
-        return true;
-      }
-      rangeTmp = new Range(comp.value, options);
-      return satisfies(this.value, rangeTmp, options);
-    } else if (comp.operator === "") {
-      if (comp.value === "") {
-        return true;
-      }
-      rangeTmp = new Range(this.value, options);
-      return satisfies(comp.semver, rangeTmp, options);
-    }
-    var sameDirectionIncreasing = (this.operator === ">=" || this.operator === ">") && (comp.operator === ">=" || comp.operator === ">");
-    var sameDirectionDecreasing = (this.operator === "<=" || this.operator === "<") && (comp.operator === "<=" || comp.operator === "<");
-    var sameSemVer = this.semver.version === comp.semver.version;
-    var differentDirectionsInclusive = (this.operator === ">=" || this.operator === "<=") && (comp.operator === ">=" || comp.operator === "<=");
-    var oppositeDirectionsLessThan = cmp(this.semver, "<", comp.semver, options) && ((this.operator === ">=" || this.operator === ">") && (comp.operator === "<=" || comp.operator === "<"));
-    var oppositeDirectionsGreaterThan = cmp(this.semver, ">", comp.semver, options) && ((this.operator === "<=" || this.operator === "<") && (comp.operator === ">=" || comp.operator === ">"));
-    return sameDirectionIncreasing || sameDirectionDecreasing || sameSemVer && differentDirectionsInclusive || oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
-  };
-  exports2.Range = Range;
-  function Range(range, options) {
-    if (!options || typeof options !== "object") {
-      options = {
-        loose: !!options,
-        includePrerelease: false
-      };
-    }
-    if (range instanceof Range) {
-      if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
-        return range;
-      } else {
-        return new Range(range.raw, options);
-      }
-    }
-    if (range instanceof Comparator) {
-      return new Range(range.value, options);
-    }
-    if (!(this instanceof Range)) {
-      return new Range(range, options);
-    }
-    this.options = options;
-    this.loose = !!options.loose;
-    this.includePrerelease = !!options.includePrerelease;
-    this.raw = range;
-    this.set = range.split(/\s*\|\|\s*/).map(function(range2) {
-      return this.parseRange(range2.trim());
-    }, this).filter(function(c) {
-      return c.length;
-    });
-    if (!this.set.length) {
-      throw new TypeError("Invalid SemVer Range: " + range);
-    }
-    this.format();
-  }
-  Range.prototype.format = function() {
-    this.range = this.set.map(function(comps) {
-      return comps.join(" ").trim();
-    }).join("||").trim();
-    return this.range;
-  };
-  Range.prototype.toString = function() {
-    return this.range;
-  };
-  Range.prototype.parseRange = function(range) {
-    var loose = this.options.loose;
-    range = range.trim();
-    var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
-    range = range.replace(hr, hyphenReplace);
-    debug2("hyphen replace", range);
-    range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
-    debug2("comparator trim", range, re[t.COMPARATORTRIM]);
-    range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
-    range = range.replace(re[t.CARETTRIM], caretTrimReplace);
-    range = range.split(/\s+/).join(" ");
-    var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
-    var set = range.split(" ").map(function(comp) {
-      return parseComparator(comp, this.options);
-    }, this).join(" ").split(/\s+/);
-    if (this.options.loose) {
-      set = set.filter(function(comp) {
-        return !!comp.match(compRe);
-      });
-    }
-    set = set.map(function(comp) {
-      return new Comparator(comp, this.options);
-    }, this);
-    return set;
-  };
-  Range.prototype.intersects = function(range, options) {
-    if (!(range instanceof Range)) {
-      throw new TypeError("a Range is required");
-    }
-    return this.set.some(function(thisComparators) {
-      return isSatisfiable(thisComparators, options) && range.set.some(function(rangeComparators) {
-        return isSatisfiable(rangeComparators, options) && thisComparators.every(function(thisComparator) {
-          return rangeComparators.every(function(rangeComparator) {
-            return thisComparator.intersects(rangeComparator, options);
-          });
-        });
-      });
-    });
-  };
-  function isSatisfiable(comparators, options) {
-    var result = true;
-    var remainingComparators = comparators.slice();
-    var testComparator = remainingComparators.pop();
-    while (result && remainingComparators.length) {
-      result = remainingComparators.every(function(otherComparator) {
-        return testComparator.intersects(otherComparator, options);
-      });
-      testComparator = remainingComparators.pop();
-    }
-    return result;
-  }
-  exports2.toComparators = toComparators;
-  function toComparators(range, options) {
-    return new Range(range, options).set.map(function(comp) {
-      return comp.map(function(c) {
-        return c.value;
-      }).join(" ").trim().split(" ");
-    });
-  }
-  function parseComparator(comp, options) {
-    debug2("comp", comp, options);
-    comp = replaceCarets(comp, options);
-    debug2("caret", comp);
-    comp = replaceTildes(comp, options);
-    debug2("tildes", comp);
-    comp = replaceXRanges(comp, options);
-    debug2("xrange", comp);
-    comp = replaceStars(comp, options);
-    debug2("stars", comp);
-    return comp;
-  }
-  function isX(id) {
-    return !id || id.toLowerCase() === "x" || id === "*";
-  }
-  function replaceTildes(comp, options) {
-    return comp.trim().split(/\s+/).map(function(comp2) {
-      return replaceTilde(comp2, options);
-    }).join(" ");
-  }
-  function replaceTilde(comp, options) {
-    var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
-    return comp.replace(r, function(_, M, m, p, pr) {
-      debug2("tilde", comp, _, M, m, p, pr);
-      var ret;
-      if (isX(M)) {
-        ret = "";
-      } else if (isX(m)) {
-        ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
-      } else if (isX(p)) {
-        ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
-      } else if (pr) {
-        debug2("replaceTilde pr", pr);
-        ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
-      } else {
-        ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
-      }
-      debug2("tilde return", ret);
-      return ret;
-    });
-  }
-  function replaceCarets(comp, options) {
-    return comp.trim().split(/\s+/).map(function(comp2) {
-      return replaceCaret(comp2, options);
-    }).join(" ");
-  }
-  function replaceCaret(comp, options) {
-    debug2("caret", comp, options);
-    var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
-    return comp.replace(r, function(_, M, m, p, pr) {
-      debug2("caret", comp, _, M, m, p, pr);
-      var ret;
-      if (isX(M)) {
-        ret = "";
-      } else if (isX(m)) {
-        ret = ">=" + M + ".0.0 <" + (+M + 1) + ".0.0";
-      } else if (isX(p)) {
-        if (M === "0") {
-          ret = ">=" + M + "." + m + ".0 <" + M + "." + (+m + 1) + ".0";
-        } else {
-          ret = ">=" + M + "." + m + ".0 <" + (+M + 1) + ".0.0";
-        }
-      } else if (pr) {
-        debug2("replaceCaret pr", pr);
-        if (M === "0") {
-          if (m === "0") {
-            ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + m + "." + (+p + 1);
-          } else {
-            ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + M + "." + (+m + 1) + ".0";
-          }
-        } else {
-          ret = ">=" + M + "." + m + "." + p + "-" + pr + " <" + (+M + 1) + ".0.0";
-        }
-      } else {
-        debug2("no pr");
-        if (M === "0") {
-          if (m === "0") {
-            ret = ">=" + M + "." + m + "." + p + " <" + M + "." + m + "." + (+p + 1);
-          } else {
-            ret = ">=" + M + "." + m + "." + p + " <" + M + "." + (+m + 1) + ".0";
-          }
-        } else {
-          ret = ">=" + M + "." + m + "." + p + " <" + (+M + 1) + ".0.0";
-        }
-      }
-      debug2("caret return", ret);
-      return ret;
-    });
-  }
-  function replaceXRanges(comp, options) {
-    debug2("replaceXRanges", comp, options);
-    return comp.split(/\s+/).map(function(comp2) {
-      return replaceXRange(comp2, options);
-    }).join(" ");
-  }
-  function replaceXRange(comp, options) {
-    comp = comp.trim();
-    var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
-    return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
-      debug2("xRange", comp, ret, gtlt, M, m, p, pr);
-      var xM = isX(M);
-      var xm = xM || isX(m);
-      var xp = xm || isX(p);
-      var anyX = xp;
-      if (gtlt === "=" && anyX) {
-        gtlt = "";
-      }
-      pr = options.includePrerelease ? "-0" : "";
-      if (xM) {
-        if (gtlt === ">" || gtlt === "<") {
-          ret = "<0.0.0-0";
-        } else {
-          ret = "*";
-        }
-      } else if (gtlt && anyX) {
-        if (xm) {
-          m = 0;
-        }
-        p = 0;
-        if (gtlt === ">") {
-          gtlt = ">=";
-          if (xm) {
-            M = +M + 1;
-            m = 0;
-            p = 0;
-          } else {
-            m = +m + 1;
-            p = 0;
-          }
-        } else if (gtlt === "<=") {
-          gtlt = "<";
-          if (xm) {
-            M = +M + 1;
-          } else {
-            m = +m + 1;
-          }
-        }
-        ret = gtlt + M + "." + m + "." + p + pr;
-      } else if (xm) {
-        ret = ">=" + M + ".0.0" + pr + " <" + (+M + 1) + ".0.0" + pr;
-      } else if (xp) {
-        ret = ">=" + M + "." + m + ".0" + pr + " <" + M + "." + (+m + 1) + ".0" + pr;
-      }
-      debug2("xRange return", ret);
-      return ret;
-    });
-  }
-  function replaceStars(comp, options) {
-    debug2("replaceStars", comp, options);
-    return comp.trim().replace(re[t.STAR], "");
-  }
-  function hyphenReplace($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr, tb) {
-    if (isX(fM)) {
-      from = "";
-    } else if (isX(fm)) {
-      from = ">=" + fM + ".0.0";
-    } else if (isX(fp)) {
-      from = ">=" + fM + "." + fm + ".0";
-    } else {
-      from = ">=" + from;
-    }
-    if (isX(tM)) {
-      to = "";
-    } else if (isX(tm)) {
-      to = "<" + (+tM + 1) + ".0.0";
-    } else if (isX(tp)) {
-      to = "<" + tM + "." + (+tm + 1) + ".0";
-    } else if (tpr) {
-      to = "<=" + tM + "." + tm + "." + tp + "-" + tpr;
-    } else {
-      to = "<=" + to;
-    }
-    return (from + " " + to).trim();
-  }
-  Range.prototype.test = function(version) {
-    if (!version) {
-      return false;
-    }
-    if (typeof version === "string") {
-      try {
-        version = new SemVer(version, this.options);
-      } catch (er) {
-        return false;
-      }
-    }
-    for (var i2 = 0; i2 < this.set.length; i2++) {
-      if (testSet(this.set[i2], version, this.options)) {
-        return true;
-      }
-    }
-    return false;
-  };
-  function testSet(set, version, options) {
-    for (var i2 = 0; i2 < set.length; i2++) {
-      if (!set[i2].test(version)) {
-        return false;
-      }
-    }
-    if (version.prerelease.length && !options.includePrerelease) {
-      for (i2 = 0; i2 < set.length; i2++) {
-        debug2(set[i2].semver);
-        if (set[i2].semver === ANY) {
-          continue;
-        }
-        if (set[i2].semver.prerelease.length > 0) {
-          var allowed = set[i2].semver;
-          if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {
-            return true;
-          }
-        }
-      }
-      return false;
-    }
-    return true;
-  }
-  exports2.satisfies = satisfies;
-  function satisfies(version, range, options) {
-    try {
-      range = new Range(range, options);
-    } catch (er) {
-      return false;
-    }
-    return range.test(version);
-  }
-  exports2.maxSatisfying = maxSatisfying;
-  function maxSatisfying(versions, range, options) {
-    var max = null;
-    var maxSV = null;
-    try {
-      var rangeObj = new Range(range, options);
-    } catch (er) {
-      return null;
-    }
-    versions.forEach(function(v) {
-      if (rangeObj.test(v)) {
-        if (!max || maxSV.compare(v) === -1) {
-          max = v;
-          maxSV = new SemVer(max, options);
-        }
-      }
-    });
-    return max;
-  }
-  exports2.minSatisfying = minSatisfying;
-  function minSatisfying(versions, range, options) {
-    var min = null;
-    var minSV = null;
-    try {
-      var rangeObj = new Range(range, options);
-    } catch (er) {
-      return null;
-    }
-    versions.forEach(function(v) {
-      if (rangeObj.test(v)) {
-        if (!min || minSV.compare(v) === 1) {
-          min = v;
-          minSV = new SemVer(min, options);
-        }
-      }
-    });
-    return min;
-  }
-  exports2.minVersion = minVersion;
-  function minVersion(range, loose) {
-    range = new Range(range, loose);
-    var minver = new SemVer("0.0.0");
-    if (range.test(minver)) {
-      return minver;
-    }
-    minver = new SemVer("0.0.0-0");
-    if (range.test(minver)) {
-      return minver;
-    }
-    minver = null;
-    for (var i2 = 0; i2 < range.set.length; ++i2) {
-      var comparators = range.set[i2];
-      comparators.forEach(function(comparator) {
-        var compver = new SemVer(comparator.semver.version);
-        switch (comparator.operator) {
-          case ">":
-            if (compver.prerelease.length === 0) {
-              compver.patch++;
-            } else {
-              compver.prerelease.push(0);
-            }
-            compver.raw = compver.format();
-          case "":
-          case ">=":
-            if (!minver || gt(minver, compver)) {
-              minver = compver;
-            }
-            break;
-          case "<":
-          case "<=":
-            break;
-          default:
-            throw new Error("Unexpected operation: " + comparator.operator);
-        }
-      });
-    }
-    if (minver && range.test(minver)) {
-      return minver;
-    }
-    return null;
-  }
-  exports2.validRange = validRange;
-  function validRange(range, options) {
-    try {
-      return new Range(range, options).range || "*";
-    } catch (er) {
-      return null;
-    }
-  }
-  exports2.ltr = ltr;
-  function ltr(version, range, options) {
-    return outside(version, range, "<", options);
-  }
-  exports2.gtr = gtr;
-  function gtr(version, range, options) {
-    return outside(version, range, ">", options);
-  }
-  exports2.outside = outside;
-  function outside(version, range, hilo, options) {
-    version = new SemVer(version, options);
-    range = new Range(range, options);
-    var gtfn, ltefn, ltfn, comp, ecomp;
-    switch (hilo) {
-      case ">":
-        gtfn = gt;
-        ltefn = lte;
-        ltfn = lt;
-        comp = ">";
-        ecomp = ">=";
-        break;
-      case "<":
-        gtfn = lt;
-        ltefn = gte;
-        ltfn = gt;
-        comp = "<";
-        ecomp = "<=";
-        break;
-      default:
-        throw new TypeError('Must provide a hilo val of "<" or ">"');
-    }
-    if (satisfies(version, range, options)) {
-      return false;
-    }
-    for (var i2 = 0; i2 < range.set.length; ++i2) {
-      var comparators = range.set[i2];
-      var high = null;
-      var low = null;
-      comparators.forEach(function(comparator) {
-        if (comparator.semver === ANY) {
-          comparator = new Comparator(">=0.0.0");
-        }
-        high = high || comparator;
-        low = low || comparator;
-        if (gtfn(comparator.semver, high.semver, options)) {
-          high = comparator;
-        } else if (ltfn(comparator.semver, low.semver, options)) {
-          low = comparator;
-        }
-      });
-      if (high.operator === comp || high.operator === ecomp) {
-        return false;
-      }
-      if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) {
-        return false;
-      } else if (low.operator === ecomp && ltfn(version, low.semver)) {
-        return false;
-      }
-    }
-    return true;
-  }
-  exports2.prerelease = prerelease;
-  function prerelease(version, options) {
-    var parsed = parse(version, options);
-    return parsed && parsed.prerelease.length ? parsed.prerelease : null;
-  }
-  exports2.intersects = intersects;
-  function intersects(r1, r2, options) {
-    r1 = new Range(r1, options);
-    r2 = new Range(r2, options);
-    return r1.intersects(r2);
-  }
-  exports2.coerce = coerce;
-  function coerce(version, options) {
-    if (version instanceof SemVer) {
-      return version;
-    }
-    if (typeof version === "number") {
-      version = String(version);
-    }
-    if (typeof version !== "string") {
-      return null;
-    }
-    options = options || {};
-    var match = null;
-    if (!options.rtl) {
-      match = version.match(re[t.COERCE]);
-    } else {
-      var next;
-      while ((next = re[t.COERCERTL].exec(version)) && (!match || match.index + match[0].length !== version.length)) {
-        if (!match || next.index + next[0].length !== match.index + match[0].length) {
-          match = next;
-        }
-        re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length;
-      }
-      re[t.COERCERTL].lastIndex = -1;
-    }
-    if (match === null) {
-      return null;
-    }
-    return parse(match[2] + "." + (match[3] || "0") + "." + (match[4] || "0"), options);
-  }
-});
-
-// node_modules/vscode-jsonrpc/lib/is.js
-var require_is = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  function boolean(value) {
-    return value === true || value === false;
-  }
-  exports2.boolean = boolean;
-  function string(value) {
-    return typeof value === "string" || value instanceof String;
-  }
-  exports2.string = string;
-  function number(value) {
-    return typeof value === "number" || value instanceof Number;
-  }
-  exports2.number = number;
-  function error(value) {
-    return value instanceof Error;
-  }
-  exports2.error = error;
-  function func(value) {
-    return typeof value === "function";
-  }
-  exports2.func = func;
-  function array(value) {
-    return Array.isArray(value);
-  }
-  exports2.array = array;
-  function stringArray(value) {
-    return array(value) && value.every((elem) => string(elem));
-  }
-  exports2.stringArray = stringArray;
-});
-
-// node_modules/vscode-jsonrpc/lib/messages.js
-var require_messages = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var is = require_is();
-  var ErrorCodes;
-  (function(ErrorCodes2) {
-    ErrorCodes2.ParseError = -32700;
-    ErrorCodes2.InvalidRequest = -32600;
-    ErrorCodes2.MethodNotFound = -32601;
-    ErrorCodes2.InvalidParams = -32602;
-    ErrorCodes2.InternalError = -32603;
-    ErrorCodes2.serverErrorStart = -32099;
-    ErrorCodes2.serverErrorEnd = -32e3;
-    ErrorCodes2.ServerNotInitialized = -32002;
-    ErrorCodes2.UnknownErrorCode = -32001;
-    ErrorCodes2.RequestCancelled = -32800;
-    ErrorCodes2.ContentModified = -32801;
-    ErrorCodes2.MessageWriteError = 1;
-    ErrorCodes2.MessageReadError = 2;
-  })(ErrorCodes = exports2.ErrorCodes || (exports2.ErrorCodes = {}));
-  var ResponseError = class extends Error {
-    constructor(code, message, data) {
-      super(message);
-      this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
-      this.data = data;
-      Object.setPrototypeOf(this, ResponseError.prototype);
-    }
-    toJson() {
-      return {
-        code: this.code,
-        message: this.message,
-        data: this.data
-      };
-    }
-  };
-  exports2.ResponseError = ResponseError;
-  var AbstractMessageType = class {
-    constructor(_method, _numberOfParams) {
-      this._method = _method;
-      this._numberOfParams = _numberOfParams;
-    }
-    get method() {
-      return this._method;
-    }
-    get numberOfParams() {
-      return this._numberOfParams;
-    }
-  };
-  exports2.AbstractMessageType = AbstractMessageType;
-  var RequestType0 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 0);
-    }
-  };
-  exports2.RequestType0 = RequestType0;
-  var RequestType = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 1);
-    }
-  };
-  exports2.RequestType = RequestType;
-  var RequestType1 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 1);
-    }
-  };
-  exports2.RequestType1 = RequestType1;
-  var RequestType2 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 2);
-    }
-  };
-  exports2.RequestType2 = RequestType2;
-  var RequestType3 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 3);
-    }
-  };
-  exports2.RequestType3 = RequestType3;
-  var RequestType4 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 4);
-    }
-  };
-  exports2.RequestType4 = RequestType4;
-  var RequestType5 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 5);
-    }
-  };
-  exports2.RequestType5 = RequestType5;
-  var RequestType6 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 6);
-    }
-  };
-  exports2.RequestType6 = RequestType6;
-  var RequestType7 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 7);
-    }
-  };
-  exports2.RequestType7 = RequestType7;
-  var RequestType8 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 8);
-    }
-  };
-  exports2.RequestType8 = RequestType8;
-  var RequestType9 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 9);
-    }
-  };
-  exports2.RequestType9 = RequestType9;
-  var NotificationType = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 1);
-      this._ = void 0;
-    }
-  };
-  exports2.NotificationType = NotificationType;
-  var NotificationType0 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 0);
-    }
-  };
-  exports2.NotificationType0 = NotificationType0;
-  var NotificationType1 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 1);
-    }
-  };
-  exports2.NotificationType1 = NotificationType1;
-  var NotificationType2 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 2);
-    }
-  };
-  exports2.NotificationType2 = NotificationType2;
-  var NotificationType3 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 3);
-    }
-  };
-  exports2.NotificationType3 = NotificationType3;
-  var NotificationType4 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 4);
-    }
-  };
-  exports2.NotificationType4 = NotificationType4;
-  var NotificationType5 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 5);
-    }
-  };
-  exports2.NotificationType5 = NotificationType5;
-  var NotificationType6 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 6);
-    }
-  };
-  exports2.NotificationType6 = NotificationType6;
-  var NotificationType7 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 7);
-    }
-  };
-  exports2.NotificationType7 = NotificationType7;
-  var NotificationType8 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 8);
-    }
-  };
-  exports2.NotificationType8 = NotificationType8;
-  var NotificationType9 = class extends AbstractMessageType {
-    constructor(method) {
-      super(method, 9);
-    }
-  };
-  exports2.NotificationType9 = NotificationType9;
-  function isRequestMessage(message) {
-    let candidate = message;
-    return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
-  }
-  exports2.isRequestMessage = isRequestMessage;
-  function isNotificationMessage(message) {
-    let candidate = message;
-    return candidate && is.string(candidate.method) && message.id === void 0;
-  }
-  exports2.isNotificationMessage = isNotificationMessage;
-  function isResponseMessage(message) {
-    let candidate = message;
-    return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
-  }
-  exports2.isResponseMessage = isResponseMessage;
-});
-
-// node_modules/vscode-jsonrpc/lib/events.js
-var require_events = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var Disposable;
-  (function(Disposable2) {
-    function create(func) {
-      return {
-        dispose: func
-      };
-    }
-    Disposable2.create = create;
-  })(Disposable = exports2.Disposable || (exports2.Disposable = {}));
-  var Event;
-  (function(Event2) {
-    const _disposable = {dispose() {
-    }};
-    Event2.None = function() {
-      return _disposable;
-    };
-  })(Event = exports2.Event || (exports2.Event = {}));
-  var CallbackList = class {
-    add(callback, context = null, bucket) {
-      if (!this._callbacks) {
-        this._callbacks = [];
-        this._contexts = [];
-      }
-      this._callbacks.push(callback);
-      this._contexts.push(context);
-      if (Array.isArray(bucket)) {
-        bucket.push({dispose: () => this.remove(callback, context)});
-      }
-    }
-    remove(callback, context = null) {
-      if (!this._callbacks) {
-        return;
-      }
-      var foundCallbackWithDifferentContext = false;
-      for (var i = 0, len = this._callbacks.length; i < len; i++) {
-        if (this._callbacks[i] === callback) {
-          if (this._contexts[i] === context) {
-            this._callbacks.splice(i, 1);
-            this._contexts.splice(i, 1);
-            return;
-          } else {
-            foundCallbackWithDifferentContext = true;
-          }
-        }
-      }
-      if (foundCallbackWithDifferentContext) {
-        throw new Error("When adding a listener with a context, you should remove it with the same context");
-      }
-    }
-    invoke(...args) {
-      if (!this._callbacks) {
-        return [];
-      }
-      var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
-      for (var i = 0, len = callbacks.length; i < len; i++) {
-        try {
-          ret.push(callbacks[i].apply(contexts[i], args));
-        } catch (e) {
-          console.error(e);
-        }
-      }
-      return ret;
-    }
-    isEmpty() {
-      return !this._callbacks || this._callbacks.length === 0;
-    }
-    dispose() {
-      this._callbacks = void 0;
-      this._contexts = void 0;
-    }
-  };
-  var Emitter = class {
-    constructor(_options) {
-      this._options = _options;
-    }
-    get event() {
-      if (!this._event) {
-        this._event = (listener, thisArgs, disposables) => {
-          if (!this._callbacks) {
-            this._callbacks = new CallbackList();
-          }
-          if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
-            this._options.onFirstListenerAdd(this);
-          }
-          this._callbacks.add(listener, thisArgs);
-          let result;
-          result = {
-            dispose: () => {
-              this._callbacks.remove(listener, thisArgs);
-              result.dispose = Emitter._noop;
-              if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
-                this._options.onLastListenerRemove(this);
-              }
-            }
-          };
-          if (Array.isArray(disposables)) {
-            disposables.push(result);
-          }
-          return result;
-        };
-      }
-      return this._event;
-    }
-    fire(event) {
-      if (this._callbacks) {
-        this._callbacks.invoke.call(this._callbacks, event);
-      }
-    }
-    dispose() {
-      if (this._callbacks) {
-        this._callbacks.dispose();
-        this._callbacks = void 0;
-      }
-    }
-  };
-  exports2.Emitter = Emitter;
-  Emitter._noop = function() {
-  };
-});
-
-// node_modules/vscode-jsonrpc/lib/messageReader.js
-var require_messageReader = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var events_1 = require_events();
-  var Is = require_is();
-  var DefaultSize = 8192;
-  var CR = Buffer.from("\r", "ascii")[0];
-  var LF = Buffer.from("\n", "ascii")[0];
-  var CRLF = "\r\n";
-  var MessageBuffer = class {
-    constructor(encoding = "utf8") {
-      this.encoding = encoding;
-      this.index = 0;
-      this.buffer = Buffer.allocUnsafe(DefaultSize);
-    }
-    append(chunk) {
-      var toAppend = chunk;
-      if (typeof chunk === "string") {
-        var str = chunk;
-        var bufferLen = Buffer.byteLength(str, this.encoding);
-        toAppend = Buffer.allocUnsafe(bufferLen);
-        toAppend.write(str, 0, bufferLen, this.encoding);
-      }
-      if (this.buffer.length - this.index >= toAppend.length) {
-        toAppend.copy(this.buffer, this.index, 0, toAppend.length);
-      } else {
-        var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
-        if (this.index === 0) {
-          this.buffer = Buffer.allocUnsafe(newSize);
-          toAppend.copy(this.buffer, 0, 0, toAppend.length);
-        } else {
-          this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
-        }
-      }
-      this.index += toAppend.length;
-    }
-    tryReadHeaders() {
-      let result = void 0;
-      let current = 0;
-      while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
-        current++;
-      }
-      if (current + 3 >= this.index) {
-        return result;
-      }
-      result = Object.create(null);
-      let headers = this.buffer.toString("ascii", 0, current).split(CRLF);
-      headers.forEach((header) => {
-        let index = header.indexOf(":");
-        if (index === -1) {
-          throw new Error("Message header must separate key and value using :");
-        }
-        let key = header.substr(0, index);
-        let value = header.substr(index + 1).trim();
-        result[key] = value;
-      });
-      let nextStart = current + 4;
-      this.buffer = this.buffer.slice(nextStart);
-      this.index = this.index - nextStart;
-      return result;
-    }
-    tryReadContent(length) {
-      if (this.index < length) {
-        return null;
-      }
-      let result = this.buffer.toString(this.encoding, 0, length);
-      let nextStart = length;
-      this.buffer.copy(this.buffer, 0, nextStart);
-      this.index = this.index - nextStart;
-      return result;
-    }
-    get numberOfBytes() {
-      return this.index;
-    }
-  };
-  var MessageReader;
-  (function(MessageReader2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) && Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
-    }
-    MessageReader2.is = is;
-  })(MessageReader = exports2.MessageReader || (exports2.MessageReader = {}));
-  var AbstractMessageReader = class {
-    constructor() {
-      this.errorEmitter = new events_1.Emitter();
-      this.closeEmitter = new events_1.Emitter();
-      this.partialMessageEmitter = new events_1.Emitter();
-    }
-    dispose() {
-      this.errorEmitter.dispose();
-      this.closeEmitter.dispose();
-    }
-    get onError() {
-      return this.errorEmitter.event;
-    }
-    fireError(error) {
-      this.errorEmitter.fire(this.asError(error));
-    }
-    get onClose() {
-      return this.closeEmitter.event;
-    }
-    fireClose() {
-      this.closeEmitter.fire(void 0);
-    }
-    get onPartialMessage() {
-      return this.partialMessageEmitter.event;
-    }
-    firePartialMessage(info) {
-      this.partialMessageEmitter.fire(info);
-    }
-    asError(error) {
-      if (error instanceof Error) {
-        return error;
-      } else {
-        return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
-      }
-    }
-  };
-  exports2.AbstractMessageReader = AbstractMessageReader;
-  var StreamMessageReader = class extends AbstractMessageReader {
-    constructor(readable, encoding = "utf8") {
-      super();
-      this.readable = readable;
-      this.buffer = new MessageBuffer(encoding);
-      this._partialMessageTimeout = 1e4;
-    }
-    set partialMessageTimeout(timeout) {
-      this._partialMessageTimeout = timeout;
-    }
-    get partialMessageTimeout() {
-      return this._partialMessageTimeout;
-    }
-    listen(callback) {
-      this.nextMessageLength = -1;
-      this.messageToken = 0;
-      this.partialMessageTimer = void 0;
-      this.callback = callback;
-      this.readable.on("data", (data) => {
-        this.onData(data);
-      });
-      this.readable.on("error", (error) => this.fireError(error));
-      this.readable.on("close", () => this.fireClose());
-    }
-    onData(data) {
-      this.buffer.append(data);
-      while (true) {
-        if (this.nextMessageLength === -1) {
-          let headers = this.buffer.tryReadHeaders();
-          if (!headers) {
-            return;
-          }
-          let contentLength = headers["Content-Length"];
-          if (!contentLength) {
-            throw new Error("Header must provide a Content-Length property.");
-          }
-          let length = parseInt(contentLength);
-          if (isNaN(length)) {
-            throw new Error("Content-Length value must be a number.");
-          }
-          this.nextMessageLength = length;
-        }
-        var msg = this.buffer.tryReadContent(this.nextMessageLength);
-        if (msg === null) {
-          this.setPartialMessageTimer();
-          return;
-        }
-        this.clearPartialMessageTimer();
-        this.nextMessageLength = -1;
-        this.messageToken++;
-        var json = JSON.parse(msg);
-        this.callback(json);
-      }
-    }
-    clearPartialMessageTimer() {
-      if (this.partialMessageTimer) {
-        clearTimeout(this.partialMessageTimer);
-        this.partialMessageTimer = void 0;
-      }
-    }
-    setPartialMessageTimer() {
-      this.clearPartialMessageTimer();
-      if (this._partialMessageTimeout <= 0) {
-        return;
-      }
-      this.partialMessageTimer = setTimeout((token, timeout) => {
-        this.partialMessageTimer = void 0;
-        if (token === this.messageToken) {
-          this.firePartialMessage({messageToken: token, waitingTime: timeout});
-          this.setPartialMessageTimer();
-        }
-      }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
-    }
-  };
-  exports2.StreamMessageReader = StreamMessageReader;
-  var IPCMessageReader = class extends AbstractMessageReader {
-    constructor(process2) {
-      super();
-      this.process = process2;
-      let eventEmitter = this.process;
-      eventEmitter.on("error", (error) => this.fireError(error));
-      eventEmitter.on("close", () => this.fireClose());
-    }
-    listen(callback) {
-      this.process.on("message", callback);
-    }
-  };
-  exports2.IPCMessageReader = IPCMessageReader;
-  var SocketMessageReader = class extends StreamMessageReader {
-    constructor(socket2, encoding = "utf-8") {
-      super(socket2, encoding);
-    }
-  };
-  exports2.SocketMessageReader = SocketMessageReader;
-});
-
-// node_modules/vscode-jsonrpc/lib/messageWriter.js
-var require_messageWriter = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var events_1 = require_events();
-  var Is = require_is();
-  var ContentLength = "Content-Length: ";
-  var CRLF = "\r\n";
-  var MessageWriter;
-  (function(MessageWriter2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) && Is.func(candidate.onError) && Is.func(candidate.write);
-    }
-    MessageWriter2.is = is;
-  })(MessageWriter = exports2.MessageWriter || (exports2.MessageWriter = {}));
-  var AbstractMessageWriter = class {
-    constructor() {
-      this.errorEmitter = new events_1.Emitter();
-      this.closeEmitter = new events_1.Emitter();
-    }
-    dispose() {
-      this.errorEmitter.dispose();
-      this.closeEmitter.dispose();
-    }
-    get onError() {
-      return this.errorEmitter.event;
-    }
-    fireError(error, message, count) {
-      this.errorEmitter.fire([this.asError(error), message, count]);
-    }
-    get onClose() {
-      return this.closeEmitter.event;
-    }
-    fireClose() {
-      this.closeEmitter.fire(void 0);
-    }
-    asError(error) {
-      if (error instanceof Error) {
-        return error;
-      } else {
-        return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
-      }
-    }
-  };
-  exports2.AbstractMessageWriter = AbstractMessageWriter;
-  var StreamMessageWriter = class extends AbstractMessageWriter {
-    constructor(writable, encoding = "utf8") {
-      super();
-      this.writable = writable;
-      this.encoding = encoding;
-      this.errorCount = 0;
-      this.writable.on("error", (error) => this.fireError(error));
-      this.writable.on("close", () => this.fireClose());
-    }
-    write(msg) {
-      let json = JSON.stringify(msg);
-      let contentLength = Buffer.byteLength(json, this.encoding);
-      let headers = [
-        ContentLength,
-        contentLength.toString(),
-        CRLF,
-        CRLF
-      ];
-      try {
-        this.writable.write(headers.join(""), "ascii");
-        this.writable.write(json, this.encoding);
-        this.errorCount = 0;
-      } catch (error) {
-        this.errorCount++;
-        this.fireError(error, msg, this.errorCount);
-      }
-    }
-  };
-  exports2.StreamMessageWriter = StreamMessageWriter;
-  var IPCMessageWriter = class extends AbstractMessageWriter {
-    constructor(process2) {
-      super();
-      this.process = process2;
-      this.errorCount = 0;
-      this.queue = [];
-      this.sending = false;
-      let eventEmitter = this.process;
-      eventEmitter.on("error", (error) => this.fireError(error));
-      eventEmitter.on("close", () => this.fireClose);
-    }
-    write(msg) {
-      if (!this.sending && this.queue.length === 0) {
-        this.doWriteMessage(msg);
-      } else {
-        this.queue.push(msg);
-      }
-    }
-    doWriteMessage(msg) {
-      try {
-        if (this.process.send) {
-          this.sending = true;
-          this.process.send(msg, void 0, void 0, (error) => {
-            this.sending = false;
-            if (error) {
-              this.errorCount++;
-              this.fireError(error, msg, this.errorCount);
-            } else {
-              this.errorCount = 0;
-            }
-            if (this.queue.length > 0) {
-              this.doWriteMessage(this.queue.shift());
-            }
-          });
-        }
-      } catch (error) {
-        this.errorCount++;
-        this.fireError(error, msg, this.errorCount);
-      }
-    }
-  };
-  exports2.IPCMessageWriter = IPCMessageWriter;
-  var SocketMessageWriter = class extends AbstractMessageWriter {
-    constructor(socket2, encoding = "utf8") {
-      super();
-      this.socket = socket2;
-      this.queue = [];
-      this.sending = false;
-      this.encoding = encoding;
-      this.errorCount = 0;
-      this.socket.on("error", (error) => this.fireError(error));
-      this.socket.on("close", () => this.fireClose());
-    }
-    dispose() {
-      super.dispose();
-      this.socket.destroy();
-    }
-    write(msg) {
-      if (!this.sending && this.queue.length === 0) {
-        this.doWriteMessage(msg);
-      } else {
-        this.queue.push(msg);
-      }
-    }
-    doWriteMessage(msg) {
-      let json = JSON.stringify(msg);
-      let contentLength = Buffer.byteLength(json, this.encoding);
-      let headers = [
-        ContentLength,
-        contentLength.toString(),
-        CRLF,
-        CRLF
-      ];
-      try {
-        this.sending = true;
-        this.socket.write(headers.join(""), "ascii", (error) => {
-          if (error) {
-            this.handleError(error, msg);
-          }
-          try {
-            this.socket.write(json, this.encoding, (error2) => {
-              this.sending = false;
-              if (error2) {
-                this.handleError(error2, msg);
-              } else {
-                this.errorCount = 0;
-              }
-              if (this.queue.length > 0) {
-                this.doWriteMessage(this.queue.shift());
-              }
-            });
-          } catch (error2) {
-            this.handleError(error2, msg);
-          }
-        });
-      } catch (error) {
-        this.handleError(error, msg);
-      }
-    }
-    handleError(error, msg) {
-      this.errorCount++;
-      this.fireError(error, msg, this.errorCount);
-    }
-  };
-  exports2.SocketMessageWriter = SocketMessageWriter;
-});
-
-// node_modules/vscode-jsonrpc/lib/cancellation.js
-var require_cancellation = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var events_1 = require_events();
-  var Is = require_is();
-  var CancellationToken;
-  (function(CancellationToken2) {
-    CancellationToken2.None = Object.freeze({
-      isCancellationRequested: false,
-      onCancellationRequested: events_1.Event.None
-    });
-    CancellationToken2.Cancelled = Object.freeze({
-      isCancellationRequested: true,
-      onCancellationRequested: events_1.Event.None
-    });
-    function is(value) {
-      let candidate = value;
-      return candidate && (candidate === CancellationToken2.None || candidate === CancellationToken2.Cancelled || Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
-    }
-    CancellationToken2.is = is;
-  })(CancellationToken = exports2.CancellationToken || (exports2.CancellationToken = {}));
-  var shortcutEvent = Object.freeze(function(callback, context) {
-    let handle = setTimeout(callback.bind(context), 0);
-    return {dispose() {
-      clearTimeout(handle);
-    }};
-  });
-  var MutableToken = class {
-    constructor() {
-      this._isCancelled = false;
-    }
-    cancel() {
-      if (!this._isCancelled) {
-        this._isCancelled = true;
-        if (this._emitter) {
-          this._emitter.fire(void 0);
-          this.dispose();
-        }
-      }
-    }
-    get isCancellationRequested() {
-      return this._isCancelled;
-    }
-    get onCancellationRequested() {
-      if (this._isCancelled) {
-        return shortcutEvent;
-      }
-      if (!this._emitter) {
-        this._emitter = new events_1.Emitter();
-      }
-      return this._emitter.event;
-    }
-    dispose() {
-      if (this._emitter) {
-        this._emitter.dispose();
-        this._emitter = void 0;
-      }
-    }
-  };
-  var CancellationTokenSource = class {
-    get token() {
-      if (!this._token) {
-        this._token = new MutableToken();
-      }
-      return this._token;
-    }
-    cancel() {
-      if (!this._token) {
-        this._token = CancellationToken.Cancelled;
-      } else {
-        this._token.cancel();
-      }
-    }
-    dispose() {
-      if (!this._token) {
-        this._token = CancellationToken.None;
-      } else if (this._token instanceof MutableToken) {
-        this._token.dispose();
-      }
-    }
-  };
-  exports2.CancellationTokenSource = CancellationTokenSource;
-});
-
-// node_modules/vscode-jsonrpc/lib/linkedMap.js
-var require_linkedMap = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var Touch;
-  (function(Touch2) {
-    Touch2.None = 0;
-    Touch2.First = 1;
-    Touch2.Last = 2;
-  })(Touch = exports2.Touch || (exports2.Touch = {}));
-  var LinkedMap = class {
-    constructor() {
-      this._map = new Map();
-      this._head = void 0;
-      this._tail = void 0;
-      this._size = 0;
-    }
-    clear() {
-      this._map.clear();
-      this._head = void 0;
-      this._tail = void 0;
-      this._size = 0;
-    }
-    isEmpty() {
-      return !this._head && !this._tail;
-    }
-    get size() {
-      return this._size;
-    }
-    has(key) {
-      return this._map.has(key);
-    }
-    get(key) {
-      const item = this._map.get(key);
-      if (!item) {
-        return void 0;
-      }
-      return item.value;
-    }
-    set(key, value, touch = Touch.None) {
-      let item = this._map.get(key);
-      if (item) {
-        item.value = value;
-        if (touch !== Touch.None) {
-          this.touch(item, touch);
-        }
-      } else {
-        item = {key, value, next: void 0, previous: void 0};
-        switch (touch) {
-          case Touch.None:
-            this.addItemLast(item);
-            break;
-          case Touch.First:
-            this.addItemFirst(item);
-            break;
-          case Touch.Last:
-            this.addItemLast(item);
-            break;
-          default:
-            this.addItemLast(item);
-            break;
-        }
-        this._map.set(key, item);
-        this._size++;
-      }
-    }
-    delete(key) {
-      const item = this._map.get(key);
-      if (!item) {
-        return false;
-      }
-      this._map.delete(key);
-      this.removeItem(item);
-      this._size--;
-      return true;
-    }
-    shift() {
-      if (!this._head && !this._tail) {
-        return void 0;
-      }
-      if (!this._head || !this._tail) {
-        throw new Error("Invalid list");
-      }
-      const item = this._head;
-      this._map.delete(item.key);
-      this.removeItem(item);
-      this._size--;
-      return item.value;
-    }
-    forEach(callbackfn, thisArg) {
-      let current = this._head;
-      while (current) {
-        if (thisArg) {
-          callbackfn.bind(thisArg)(current.value, current.key, this);
-        } else {
-          callbackfn(current.value, current.key, this);
-        }
-        current = current.next;
-      }
-    }
-    forEachReverse(callbackfn, thisArg) {
-      let current = this._tail;
-      while (current) {
-        if (thisArg) {
-          callbackfn.bind(thisArg)(current.value, current.key, this);
-        } else {
-          callbackfn(current.value, current.key, this);
-        }
-        current = current.previous;
-      }
-    }
-    values() {
-      let result = [];
-      let current = this._head;
-      while (current) {
-        result.push(current.value);
-        current = current.next;
-      }
-      return result;
-    }
-    keys() {
-      let result = [];
-      let current = this._head;
-      while (current) {
-        result.push(current.key);
-        current = current.next;
-      }
-      return result;
-    }
-    addItemFirst(item) {
-      if (!this._head && !this._tail) {
-        this._tail = item;
-      } else if (!this._head) {
-        throw new Error("Invalid list");
-      } else {
-        item.next = this._head;
-        this._head.previous = item;
-      }
-      this._head = item;
-    }
-    addItemLast(item) {
-      if (!this._head && !this._tail) {
-        this._head = item;
-      } else if (!this._tail) {
-        throw new Error("Invalid list");
-      } else {
-        item.previous = this._tail;
-        this._tail.next = item;
-      }
-      this._tail = item;
-    }
-    removeItem(item) {
-      if (item === this._head && item === this._tail) {
-        this._head = void 0;
-        this._tail = void 0;
-      } else if (item === this._head) {
-        this._head = item.next;
-      } else if (item === this._tail) {
-        this._tail = item.previous;
-      } else {
-        const next = item.next;
-        const previous = item.previous;
-        if (!next || !previous) {
-          throw new Error("Invalid list");
-        }
-        next.previous = previous;
-        previous.next = next;
-      }
-    }
-    touch(item, touch) {
-      if (!this._head || !this._tail) {
-        throw new Error("Invalid list");
-      }
-      if (touch !== Touch.First && touch !== Touch.Last) {
-        return;
-      }
-      if (touch === Touch.First) {
-        if (item === this._head) {
-          return;
-        }
-        const next = item.next;
-        const previous = item.previous;
-        if (item === this._tail) {
-          previous.next = void 0;
-          this._tail = previous;
-        } else {
-          next.previous = previous;
-          previous.next = next;
-        }
-        item.previous = void 0;
-        item.next = this._head;
-        this._head.previous = item;
-        this._head = item;
-      } else if (touch === Touch.Last) {
-        if (item === this._tail) {
-          return;
-        }
-        const next = item.next;
-        const previous = item.previous;
-        if (item === this._head) {
-          next.previous = void 0;
-          this._head = next;
-        } else {
-          next.previous = previous;
-          previous.next = next;
-        }
-        item.next = void 0;
-        item.previous = this._tail;
-        this._tail.next = item;
-        this._tail = item;
-      }
-    }
-  };
-  exports2.LinkedMap = LinkedMap;
-});
-
-// node_modules/vscode-jsonrpc/lib/pipeSupport.js
-var require_pipeSupport = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var path_1 = require("path");
-  var os_1 = require("os");
-  var crypto_1 = require("crypto");
-  var net_1 = require("net");
-  var messageReader_1 = require_messageReader();
-  var messageWriter_1 = require_messageWriter();
-  function generateRandomPipeName() {
-    const randomSuffix = crypto_1.randomBytes(21).toString("hex");
-    if (process.platform === "win32") {
-      return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
-    } else {
-      return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
-    }
-  }
-  exports2.generateRandomPipeName = generateRandomPipeName;
-  function createClientPipeTransport(pipeName, encoding = "utf-8") {
-    let connectResolve;
-    let connected = new Promise((resolve, _reject) => {
-      connectResolve = resolve;
-    });
-    return new Promise((resolve, reject) => {
-      let server = net_1.createServer((socket2) => {
-        server.close();
-        connectResolve([
-          new messageReader_1.SocketMessageReader(socket2, encoding),
-          new messageWriter_1.SocketMessageWriter(socket2, encoding)
-        ]);
-      });
-      server.on("error", reject);
-      server.listen(pipeName, () => {
-        server.removeListener("error", reject);
-        resolve({
-          onConnected: () => {
-            return connected;
-          }
-        });
-      });
-    });
-  }
-  exports2.createClientPipeTransport = createClientPipeTransport;
-  function createServerPipeTransport(pipeName, encoding = "utf-8") {
-    const socket2 = net_1.createConnection(pipeName);
-    return [
-      new messageReader_1.SocketMessageReader(socket2, encoding),
-      new messageWriter_1.SocketMessageWriter(socket2, encoding)
-    ];
-  }
-  exports2.createServerPipeTransport = createServerPipeTransport;
-});
-
-// node_modules/vscode-jsonrpc/lib/socketSupport.js
-var require_socketSupport = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var net_1 = require("net");
-  var messageReader_1 = require_messageReader();
-  var messageWriter_1 = require_messageWriter();
-  function createClientSocketTransport(port, encoding = "utf-8") {
-    let connectResolve;
-    let connected = new Promise((resolve, _reject) => {
-      connectResolve = resolve;
-    });
-    return new Promise((resolve, reject) => {
-      let server = net_1.createServer((socket2) => {
-        server.close();
-        connectResolve([
-          new messageReader_1.SocketMessageReader(socket2, encoding),
-          new messageWriter_1.SocketMessageWriter(socket2, encoding)
-        ]);
-      });
-      server.on("error", reject);
-      server.listen(port, "127.0.0.1", () => {
-        server.removeListener("error", reject);
-        resolve({
-          onConnected: () => {
-            return connected;
-          }
-        });
-      });
-    });
-  }
-  exports2.createClientSocketTransport = createClientSocketTransport;
-  function createServerSocketTransport(port, encoding = "utf-8") {
-    const socket2 = net_1.createConnection(port, "127.0.0.1");
-    return [
-      new messageReader_1.SocketMessageReader(socket2, encoding),
-      new messageWriter_1.SocketMessageWriter(socket2, encoding)
-    ];
-  }
-  exports2.createServerSocketTransport = createServerSocketTransport;
-});
-
-// node_modules/vscode-jsonrpc/lib/main.js
-var require_main = __commonJS((exports2) => {
-  "use strict";
-  function __export2(m) {
-    for (var p in m)
-      if (!exports2.hasOwnProperty(p))
-        exports2[p] = m[p];
-  }
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var Is = require_is();
-  var messages_1 = require_messages();
-  exports2.RequestType = messages_1.RequestType;
-  exports2.RequestType0 = messages_1.RequestType0;
-  exports2.RequestType1 = messages_1.RequestType1;
-  exports2.RequestType2 = messages_1.RequestType2;
-  exports2.RequestType3 = messages_1.RequestType3;
-  exports2.RequestType4 = messages_1.RequestType4;
-  exports2.RequestType5 = messages_1.RequestType5;
-  exports2.RequestType6 = messages_1.RequestType6;
-  exports2.RequestType7 = messages_1.RequestType7;
-  exports2.RequestType8 = messages_1.RequestType8;
-  exports2.RequestType9 = messages_1.RequestType9;
-  exports2.ResponseError = messages_1.ResponseError;
-  exports2.ErrorCodes = messages_1.ErrorCodes;
-  exports2.NotificationType = messages_1.NotificationType;
-  exports2.NotificationType0 = messages_1.NotificationType0;
-  exports2.NotificationType1 = messages_1.NotificationType1;
-  exports2.NotificationType2 = messages_1.NotificationType2;
-  exports2.NotificationType3 = messages_1.NotificationType3;
-  exports2.NotificationType4 = messages_1.NotificationType4;
-  exports2.NotificationType5 = messages_1.NotificationType5;
-  exports2.NotificationType6 = messages_1.NotificationType6;
-  exports2.NotificationType7 = messages_1.NotificationType7;
-  exports2.NotificationType8 = messages_1.NotificationType8;
-  exports2.NotificationType9 = messages_1.NotificationType9;
-  var messageReader_1 = require_messageReader();
-  exports2.MessageReader = messageReader_1.MessageReader;
-  exports2.StreamMessageReader = messageReader_1.StreamMessageReader;
-  exports2.IPCMessageReader = messageReader_1.IPCMessageReader;
-  exports2.SocketMessageReader = messageReader_1.SocketMessageReader;
-  var messageWriter_1 = require_messageWriter();
-  exports2.MessageWriter = messageWriter_1.MessageWriter;
-  exports2.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
-  exports2.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
-  exports2.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
-  var events_1 = require_events();
-  exports2.Disposable = events_1.Disposable;
-  exports2.Event = events_1.Event;
-  exports2.Emitter = events_1.Emitter;
-  var cancellation_1 = require_cancellation();
-  exports2.CancellationTokenSource = cancellation_1.CancellationTokenSource;
-  exports2.CancellationToken = cancellation_1.CancellationToken;
-  var linkedMap_1 = require_linkedMap();
-  __export2(require_pipeSupport());
-  __export2(require_socketSupport());
-  var CancelNotification;
-  (function(CancelNotification2) {
-    CancelNotification2.type = new messages_1.NotificationType("$/cancelRequest");
-  })(CancelNotification || (CancelNotification = {}));
-  var ProgressNotification;
-  (function(ProgressNotification2) {
-    ProgressNotification2.type = new messages_1.NotificationType("$/progress");
-  })(ProgressNotification || (ProgressNotification = {}));
-  var ProgressType = class {
-    constructor() {
-    }
-  };
-  exports2.ProgressType = ProgressType;
-  exports2.NullLogger = Object.freeze({
-    error: () => {
-    },
-    warn: () => {
-    },
-    info: () => {
-    },
-    log: () => {
-    }
-  });
-  var Trace;
-  (function(Trace2) {
-    Trace2[Trace2["Off"] = 0] = "Off";
-    Trace2[Trace2["Messages"] = 1] = "Messages";
-    Trace2[Trace2["Verbose"] = 2] = "Verbose";
-  })(Trace = exports2.Trace || (exports2.Trace = {}));
-  (function(Trace2) {
-    function fromString(value) {
-      if (!Is.string(value)) {
-        return Trace2.Off;
-      }
-      value = value.toLowerCase();
-      switch (value) {
-        case "off":
-          return Trace2.Off;
-        case "messages":
-          return Trace2.Messages;
-        case "verbose":
-          return Trace2.Verbose;
-        default:
-          return Trace2.Off;
-      }
-    }
-    Trace2.fromString = fromString;
-    function toString(value) {
-      switch (value) {
-        case Trace2.Off:
-          return "off";
-        case Trace2.Messages:
-          return "messages";
-        case Trace2.Verbose:
-          return "verbose";
-        default:
-          return "off";
-      }
-    }
-    Trace2.toString = toString;
-  })(Trace = exports2.Trace || (exports2.Trace = {}));
-  var TraceFormat;
-  (function(TraceFormat2) {
-    TraceFormat2["Text"] = "text";
-    TraceFormat2["JSON"] = "json";
-  })(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
-  (function(TraceFormat2) {
-    function fromString(value) {
-      value = value.toLowerCase();
-      if (value === "json") {
-        return TraceFormat2.JSON;
-      } else {
-        return TraceFormat2.Text;
-      }
-    }
-    TraceFormat2.fromString = fromString;
-  })(TraceFormat = exports2.TraceFormat || (exports2.TraceFormat = {}));
-  var SetTraceNotification;
-  (function(SetTraceNotification2) {
-    SetTraceNotification2.type = new messages_1.NotificationType("$/setTraceNotification");
-  })(SetTraceNotification = exports2.SetTraceNotification || (exports2.SetTraceNotification = {}));
-  var LogTraceNotification;
-  (function(LogTraceNotification2) {
-    LogTraceNotification2.type = new messages_1.NotificationType("$/logTraceNotification");
-  })(LogTraceNotification = exports2.LogTraceNotification || (exports2.LogTraceNotification = {}));
-  var ConnectionErrors;
-  (function(ConnectionErrors2) {
-    ConnectionErrors2[ConnectionErrors2["Closed"] = 1] = "Closed";
-    ConnectionErrors2[ConnectionErrors2["Disposed"] = 2] = "Disposed";
-    ConnectionErrors2[ConnectionErrors2["AlreadyListening"] = 3] = "AlreadyListening";
-  })(ConnectionErrors = exports2.ConnectionErrors || (exports2.ConnectionErrors = {}));
-  var ConnectionError = class extends Error {
-    constructor(code, message) {
-      super(message);
-      this.code = code;
-      Object.setPrototypeOf(this, ConnectionError.prototype);
-    }
-  };
-  exports2.ConnectionError = ConnectionError;
-  var ConnectionStrategy;
-  (function(ConnectionStrategy2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && Is.func(candidate.cancelUndispatched);
-    }
-    ConnectionStrategy2.is = is;
-  })(ConnectionStrategy = exports2.ConnectionStrategy || (exports2.ConnectionStrategy = {}));
-  var ConnectionState;
-  (function(ConnectionState2) {
-    ConnectionState2[ConnectionState2["New"] = 1] = "New";
-    ConnectionState2[ConnectionState2["Listening"] = 2] = "Listening";
-    ConnectionState2[ConnectionState2["Closed"] = 3] = "Closed";
-    ConnectionState2[ConnectionState2["Disposed"] = 4] = "Disposed";
-  })(ConnectionState || (ConnectionState = {}));
-  function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
-    let sequenceNumber = 0;
-    let notificationSquenceNumber = 0;
-    let unknownResponseSquenceNumber = 0;
-    const version = "2.0";
-    let starRequestHandler = void 0;
-    let requestHandlers = Object.create(null);
-    let starNotificationHandler = void 0;
-    let notificationHandlers = Object.create(null);
-    let progressHandlers = new Map();
-    let timer;
-    let messageQueue = new linkedMap_1.LinkedMap();
-    let responsePromises = Object.create(null);
-    let requestTokens = Object.create(null);
-    let trace = Trace.Off;
-    let traceFormat = TraceFormat.Text;
-    let tracer;
-    let state = ConnectionState.New;
-    let errorEmitter = new events_1.Emitter();
-    let closeEmitter = new events_1.Emitter();
-    let unhandledNotificationEmitter = new events_1.Emitter();
-    let unhandledProgressEmitter = new events_1.Emitter();
-    let disposeEmitter = new events_1.Emitter();
-    function createRequestQueueKey(id) {
-      return "req-" + id.toString();
-    }
-    function createResponseQueueKey(id) {
-      if (id === null) {
-        return "res-unknown-" + (++unknownResponseSquenceNumber).toString();
-      } else {
-        return "res-" + id.toString();
-      }
-    }
-    function createNotificationQueueKey() {
-      return "not-" + (++notificationSquenceNumber).toString();
-    }
-    function addMessageToQueue(queue, message) {
-      if (messages_1.isRequestMessage(message)) {
-        queue.set(createRequestQueueKey(message.id), message);
-      } else if (messages_1.isResponseMessage(message)) {
-        queue.set(createResponseQueueKey(message.id), message);
-      } else {
-        queue.set(createNotificationQueueKey(), message);
-      }
-    }
-    function cancelUndispatched(_message) {
-      return void 0;
-    }
-    function isListening() {
-      return state === ConnectionState.Listening;
-    }
-    function isClosed() {
-      return state === ConnectionState.Closed;
-    }
-    function isDisposed() {
-      return state === ConnectionState.Disposed;
-    }
-    function closeHandler() {
-      if (state === ConnectionState.New || state === ConnectionState.Listening) {
-        state = ConnectionState.Closed;
-        closeEmitter.fire(void 0);
-      }
-    }
-    function readErrorHandler(error) {
-      errorEmitter.fire([error, void 0, void 0]);
-    }
-    function writeErrorHandler(data) {
-      errorEmitter.fire(data);
-    }
-    messageReader.onClose(closeHandler);
-    messageReader.onError(readErrorHandler);
-    messageWriter.onClose(closeHandler);
-    messageWriter.onError(writeErrorHandler);
-    function triggerMessageQueue() {
-      if (timer || messageQueue.size === 0) {
-        return;
-      }
-      timer = setImmediate(() => {
-        timer = void 0;
-        processMessageQueue();
-      });
-    }
-    function processMessageQueue() {
-      if (messageQueue.size === 0) {
-        return;
-      }
-      let message = messageQueue.shift();
-      try {
-        if (messages_1.isRequestMessage(message)) {
-          handleRequest(message);
-        } else if (messages_1.isNotificationMessage(message)) {
-          handleNotification(message);
-        } else if (messages_1.isResponseMessage(message)) {
-          handleResponse(message);
-        } else {
-          handleInvalidMessage(message);
-        }
-      } finally {
-        triggerMessageQueue();
-      }
-    }
-    let callback = (message) => {
-      try {
-        if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
-          let key = createRequestQueueKey(message.params.id);
-          let toCancel = messageQueue.get(key);
-          if (messages_1.isRequestMessage(toCancel)) {
-            let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
-            if (response && (response.error !== void 0 || response.result !== void 0)) {
-              messageQueue.delete(key);
-              response.id = toCancel.id;
-              traceSendingResponse(response, message.method, Date.now());
-              messageWriter.write(response);
-              return;
-            }
-          }
-        }
-        addMessageToQueue(messageQueue, message);
-      } finally {
-        triggerMessageQueue();
-      }
-    };
-    function handleRequest(requestMessage) {
-      if (isDisposed()) {
-        return;
-      }
-      function reply(resultOrError, method, startTime2) {
-        let message = {
-          jsonrpc: version,
-          id: requestMessage.id
-        };
-        if (resultOrError instanceof messages_1.ResponseError) {
-          message.error = resultOrError.toJson();
-        } else {
-          message.result = resultOrError === void 0 ? null : resultOrError;
-        }
-        traceSendingResponse(message, method, startTime2);
-        messageWriter.write(message);
-      }
-      function replyError(error, method, startTime2) {
-        let message = {
-          jsonrpc: version,
-          id: requestMessage.id,
-          error: error.toJson()
-        };
-        traceSendingResponse(message, method, startTime2);
-        messageWriter.write(message);
-      }
-      function replySuccess(result, method, startTime2) {
-        if (result === void 0) {
-          result = null;
-        }
-        let message = {
-          jsonrpc: version,
-          id: requestMessage.id,
-          result
-        };
-        traceSendingResponse(message, method, startTime2);
-        messageWriter.write(message);
-      }
-      traceReceivedRequest(requestMessage);
-      let element = requestHandlers[requestMessage.method];
-      let type;
-      let requestHandler;
-      if (element) {
-        type = element.type;
-        requestHandler = element.handler;
-      }
-      let startTime = Date.now();
-      if (requestHandler || starRequestHandler) {
-        let cancellationSource = new cancellation_1.CancellationTokenSource();
-        let tokenKey = String(requestMessage.id);
-        requestTokens[tokenKey] = cancellationSource;
-        try {
-          let handlerResult;
-          if (requestMessage.params === void 0 || type !== void 0 && type.numberOfParams === 0) {
-            handlerResult = requestHandler ? requestHandler(cancellationSource.token) : starRequestHandler(requestMessage.method, cancellationSource.token);
-          } else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
-            handlerResult = requestHandler ? requestHandler(...requestMessage.params, cancellationSource.token) : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
-          } else {
-            handlerResult = requestHandler ? requestHandler(requestMessage.params, cancellationSource.token) : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
-          }
-          let promise = handlerResult;
-          if (!handlerResult) {
-            delete requestTokens[tokenKey];
-            replySuccess(handlerResult, requestMessage.method, startTime);
-          } else if (promise.then) {
-            promise.then((resultOrError) => {
-              delete requestTokens[tokenKey];
-              reply(resultOrError, requestMessage.method, startTime);
-            }, (error) => {
-              delete requestTokens[tokenKey];
-              if (error instanceof messages_1.ResponseError) {
-                replyError(error, requestMessage.method, startTime);
-              } else if (error && Is.string(error.message)) {
-                replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
-              } else {
-                replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
-              }
-            });
-          } else {
-            delete requestTokens[tokenKey];
-            reply(handlerResult, requestMessage.method, startTime);
-          }
-        } catch (error) {
-          delete requestTokens[tokenKey];
-          if (error instanceof messages_1.ResponseError) {
-            reply(error, requestMessage.method, startTime);
-          } else if (error && Is.string(error.message)) {
-            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
-          } else {
-            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
-          }
-        }
-      } else {
-        replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
-      }
-    }
-    function handleResponse(responseMessage) {
-      if (isDisposed()) {
-        return;
-      }
-      if (responseMessage.id === null) {
-        if (responseMessage.error) {
-          logger.error(`Received response message without id: Error is: 
-${JSON.stringify(responseMessage.error, void 0, 4)}`);
-        } else {
-          logger.error(`Received response message without id. No further error information provided.`);
-        }
-      } else {
-        let key = String(responseMessage.id);
-        let responsePromise = responsePromises[key];
-        traceReceivedResponse(responseMessage, responsePromise);
-        if (responsePromise) {
-          delete responsePromises[key];
-          try {
-            if (responseMessage.error) {
-              let error = responseMessage.error;
-              responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
-            } else if (responseMessage.result !== void 0) {
-              responsePromise.resolve(responseMessage.result);
-            } else {
-              throw new Error("Should never happen.");
-            }
-          } catch (error) {
-            if (error.message) {
-              logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
-            } else {
-              logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
-            }
-          }
-        }
-      }
-    }
-    function handleNotification(message) {
-      if (isDisposed()) {
-        return;
-      }
-      let type = void 0;
-      let notificationHandler;
-      if (message.method === CancelNotification.type.method) {
-        notificationHandler = (params) => {
-          let id = params.id;
-          let source = requestTokens[String(id)];
-          if (source) {
-            source.cancel();
-          }
-        };
-      } else {
-        let element = notificationHandlers[message.method];
-        if (element) {
-          notificationHandler = element.handler;
-          type = element.type;
-        }
-      }
-      if (notificationHandler || starNotificationHandler) {
-        try {
-          traceReceivedNotification(message);
-          if (message.params === void 0 || type !== void 0 && type.numberOfParams === 0) {
-            notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
-          } else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
-            notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
-          } else {
-            notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
-          }
-        } catch (error) {
-          if (error.message) {
-            logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
-          } else {
-            logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
-          }
-        }
-      } else {
-        unhandledNotificationEmitter.fire(message);
-      }
-    }
-    function handleInvalidMessage(message) {
-      if (!message) {
-        logger.error("Received empty message.");
-        return;
-      }
-      logger.error(`Received message which is neither a response nor a notification message:
-${JSON.stringify(message, null, 4)}`);
-      let responseMessage = message;
-      if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
-        let key = String(responseMessage.id);
-        let responseHandler = responsePromises[key];
-        if (responseHandler) {
-          responseHandler.reject(new Error("The received response has neither a result nor an error property."));
-        }
-      }
-    }
-    function traceSendingRequest(message) {
-      if (trace === Trace.Off || !tracer) {
-        return;
-      }
-      if (traceFormat === TraceFormat.Text) {
-        let data = void 0;
-        if (trace === Trace.Verbose && message.params) {
-          data = `Params: ${JSON.stringify(message.params, null, 4)}
-
-`;
-        }
-        tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
-      } else {
-        logLSPMessage("send-request", message);
-      }
-    }
-    function traceSendingNotification(message) {
-      if (trace === Trace.Off || !tracer) {
-        return;
-      }
-      if (traceFormat === TraceFormat.Text) {
-        let data = void 0;
-        if (trace === Trace.Verbose) {
-          if (message.params) {
-            data = `Params: ${JSON.stringify(message.params, null, 4)}
-
-`;
-          } else {
-            data = "No parameters provided.\n\n";
-          }
-        }
-        tracer.log(`Sending notification '${message.method}'.`, data);
-      } else {
-        logLSPMessage("send-notification", message);
-      }
-    }
-    function traceSendingResponse(message, method, startTime) {
-      if (trace === Trace.Off || !tracer) {
-        return;
-      }
-      if (traceFormat === TraceFormat.Text) {
-        let data = void 0;
-        if (trace === Trace.Verbose) {
-          if (message.error && message.error.data) {
-            data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
-
-`;
-          } else {
-            if (message.result) {
-              data = `Result: ${JSON.stringify(message.result, null, 4)}
-
-`;
-            } else if (message.error === void 0) {
-              data = "No result returned.\n\n";
-            }
-          }
-        }
-        tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
-      } else {
-        logLSPMessage("send-response", message);
-      }
-    }
-    function traceReceivedRequest(message) {
-      if (trace === Trace.Off || !tracer) {
-        return;
-      }
-      if (traceFormat === TraceFormat.Text) {
-        let data = void 0;
-        if (trace === Trace.Verbose && message.params) {
-          data = `Params: ${JSON.stringify(message.params, null, 4)}
-
-`;
-        }
-        tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
-      } else {
-        logLSPMessage("receive-request", message);
-      }
-    }
-    function traceReceivedNotification(message) {
-      if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
-        return;
-      }
-      if (traceFormat === TraceFormat.Text) {
-        let data = void 0;
-        if (trace === Trace.Verbose) {
-          if (message.params) {
-            data = `Params: ${JSON.stringify(message.params, null, 4)}
-
-`;
-          } else {
-            data = "No parameters provided.\n\n";
-          }
-        }
-        tracer.log(`Received notification '${message.method}'.`, data);
-      } else {
-        logLSPMessage("receive-notification", message);
-      }
-    }
-    function traceReceivedResponse(message, responsePromise) {
-      if (trace === Trace.Off || !tracer) {
-        return;
-      }
-      if (traceFormat === TraceFormat.Text) {
-        let data = void 0;
-        if (trace === Trace.Verbose) {
-          if (message.error && message.error.data) {
-            data = `Error data: ${JSON.stringify(message.error.data, null, 4)}
-
-`;
-          } else {
-            if (message.result) {
-              data = `Result: ${JSON.stringify(message.result, null, 4)}
-
-`;
-            } else if (message.error === void 0) {
-              data = "No result returned.\n\n";
-            }
-          }
-        }
-        if (responsePromise) {
-          let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
-          tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
-        } else {
-          tracer.log(`Received response ${message.id} without active response promise.`, data);
-        }
-      } else {
-        logLSPMessage("receive-response", message);
-      }
-    }
-    function logLSPMessage(type, message) {
-      if (!tracer || trace === Trace.Off) {
-        return;
-      }
-      const lspMessage = {
-        isLSPMessage: true,
-        type,
-        message,
-        timestamp: Date.now()
-      };
-      tracer.log(lspMessage);
-    }
-    function throwIfClosedOrDisposed() {
-      if (isClosed()) {
-        throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
-      }
-      if (isDisposed()) {
-        throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
-      }
-    }
-    function throwIfListening() {
-      if (isListening()) {
-        throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
-      }
-    }
-    function throwIfNotListening() {
-      if (!isListening()) {
-        throw new Error("Call listen() first.");
-      }
-    }
-    function undefinedToNull(param) {
-      if (param === void 0) {
-        return null;
-      } else {
-        return param;
-      }
-    }
-    function computeMessageParams(type, params) {
-      let result;
-      let numberOfParams = type.numberOfParams;
-      switch (numberOfParams) {
-        case 0:
-          result = null;
-          break;
-        case 1:
-          result = undefinedToNull(params[0]);
-          break;
-        default:
-          result = [];
-          for (let i = 0; i < params.length && i < numberOfParams; i++) {
-            result.push(undefinedToNull(params[i]));
-          }
-          if (params.length < numberOfParams) {
-            for (let i = params.length; i < numberOfParams; i++) {
-              result.push(null);
-            }
-          }
-          break;
-      }
-      return result;
-    }
-    let connection = {
-      sendNotification: (type, ...params) => {
-        throwIfClosedOrDisposed();
-        let method;
-        let messageParams;
-        if (Is.string(type)) {
-          method = type;
-          switch (params.length) {
-            case 0:
-              messageParams = null;
-              break;
-            case 1:
-              messageParams = params[0];
-              break;
-            default:
-              messageParams = params;
-              break;
-          }
-        } else {
-          method = type.method;
-          messageParams = computeMessageParams(type, params);
-        }
-        let notificationMessage = {
-          jsonrpc: version,
-          method,
-          params: messageParams
-        };
-        traceSendingNotification(notificationMessage);
-        messageWriter.write(notificationMessage);
-      },
-      onNotification: (type, handler) => {
-        throwIfClosedOrDisposed();
-        if (Is.func(type)) {
-          starNotificationHandler = type;
-        } else if (handler) {
-          if (Is.string(type)) {
-            notificationHandlers[type] = {type: void 0, handler};
-          } else {
-            notificationHandlers[type.method] = {type, handler};
-          }
-        }
-      },
-      onProgress: (_type, token, handler) => {
-        if (progressHandlers.has(token)) {
-          throw new Error(`Progress handler for token ${token} already registered`);
-        }
-        progressHandlers.set(token, handler);
-        return {
-          dispose: () => {
-            progressHandlers.delete(token);
-          }
-        };
-      },
-      sendProgress: (_type, token, value) => {
-        connection.sendNotification(ProgressNotification.type, {token, value});
-      },
-      onUnhandledProgress: unhandledProgressEmitter.event,
-      sendRequest: (type, ...params) => {
-        throwIfClosedOrDisposed();
-        throwIfNotListening();
-        let method;
-        let messageParams;
-        let token = void 0;
-        if (Is.string(type)) {
-          method = type;
-          switch (params.length) {
-            case 0:
-              messageParams = null;
-              break;
-            case 1:
-              if (cancellation_1.CancellationToken.is(params[0])) {
-                messageParams = null;
-                token = params[0];
-              } else {
-                messageParams = undefinedToNull(params[0]);
-              }
-              break;
-            default:
-              const last = params.length - 1;
-              if (cancellation_1.CancellationToken.is(params[last])) {
-                token = params[last];
-                if (params.length === 2) {
-                  messageParams = undefinedToNull(params[0]);
-                } else {
-                  messageParams = params.slice(0, last).map((value) => undefinedToNull(value));
-                }
-              } else {
-                messageParams = params.map((value) => undefinedToNull(value));
-              }
-              break;
-          }
-        } else {
-          method = type.method;
-          messageParams = computeMessageParams(type, params);
-          let numberOfParams = type.numberOfParams;
-          token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : void 0;
-        }
-        let id = sequenceNumber++;
-        let result = new Promise((resolve, reject) => {
-          let requestMessage = {
-            jsonrpc: version,
-            id,
-            method,
-            params: messageParams
-          };
-          let responsePromise = {method, timerStart: Date.now(), resolve, reject};
-          traceSendingRequest(requestMessage);
-          try {
-            messageWriter.write(requestMessage);
-          } catch (e) {
-            responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : "Unknown reason"));
-            responsePromise = null;
-          }
-          if (responsePromise) {
-            responsePromises[String(id)] = responsePromise;
-          }
-        });
-        if (token) {
-          token.onCancellationRequested(() => {
-            connection.sendNotification(CancelNotification.type, {id});
-          });
-        }
-        return result;
-      },
-      onRequest: (type, handler) => {
-        throwIfClosedOrDisposed();
-        if (Is.func(type)) {
-          starRequestHandler = type;
-        } else if (handler) {
-          if (Is.string(type)) {
-            requestHandlers[type] = {type: void 0, handler};
-          } else {
-            requestHandlers[type.method] = {type, handler};
-          }
-        }
-      },
-      trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
-        let _sendNotification = false;
-        let _traceFormat = TraceFormat.Text;
-        if (sendNotificationOrTraceOptions !== void 0) {
-          if (Is.boolean(sendNotificationOrTraceOptions)) {
-            _sendNotification = sendNotificationOrTraceOptions;
-          } else {
-            _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
-            _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
-          }
-        }
-        trace = _value;
-        traceFormat = _traceFormat;
-        if (trace === Trace.Off) {
-          tracer = void 0;
-        } else {
-          tracer = _tracer;
-        }
-        if (_sendNotification && !isClosed() && !isDisposed()) {
-          connection.sendNotification(SetTraceNotification.type, {value: Trace.toString(_value)});
-        }
-      },
-      onError: errorEmitter.event,
-      onClose: closeEmitter.event,
-      onUnhandledNotification: unhandledNotificationEmitter.event,
-      onDispose: disposeEmitter.event,
-      dispose: () => {
-        if (isDisposed()) {
-          return;
-        }
-        state = ConnectionState.Disposed;
-        disposeEmitter.fire(void 0);
-        let error = new Error("Connection got disposed.");
-        Object.keys(responsePromises).forEach((key) => {
-          responsePromises[key].reject(error);
-        });
-        responsePromises = Object.create(null);
-        requestTokens = Object.create(null);
-        messageQueue = new linkedMap_1.LinkedMap();
-        if (Is.func(messageWriter.dispose)) {
-          messageWriter.dispose();
-        }
-        if (Is.func(messageReader.dispose)) {
-          messageReader.dispose();
-        }
-      },
-      listen: () => {
-        throwIfClosedOrDisposed();
-        throwIfListening();
-        state = ConnectionState.Listening;
-        messageReader.listen(callback);
-      },
-      inspect: () => {
-        console.log("inspect");
-      }
-    };
-    connection.onNotification(LogTraceNotification.type, (params) => {
-      if (trace === Trace.Off || !tracer) {
-        return;
-      }
-      tracer.log(params.message, trace === Trace.Verbose ? params.verbose : void 0);
-    });
-    connection.onNotification(ProgressNotification.type, (params) => {
-      const handler = progressHandlers.get(params.token);
-      if (handler) {
-        handler(params.value);
-      } else {
-        unhandledProgressEmitter.fire(params);
-      }
-    });
-    return connection;
-  }
-  function isMessageReader(value) {
-    return value.listen !== void 0 && value.read === void 0;
-  }
-  function isMessageWriter(value) {
-    return value.write !== void 0 && value.end === void 0;
-  }
-  function createMessageConnection(input, output, logger, strategy) {
-    if (!logger) {
-      logger = exports2.NullLogger;
-    }
-    let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
-    let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
-    return _createMessageConnection(reader, writer, logger, strategy);
-  }
-  exports2.createMessageConnection = createMessageConnection;
-});
-
-// node_modules/vscode-languageserver-types/lib/umd/main.js
-var require_main2 = __commonJS((exports2, module2) => {
-  (function(factory) {
-    if (typeof module2 === "object" && typeof module2.exports === "object") {
-      var v = factory(require, exports2);
-      if (v !== void 0)
-        module2.exports = v;
-    } else if (typeof define === "function" && define.amd) {
-      define(["require", "exports"], factory);
-    }
-  })(function(require2, exports3) {
-    "use strict";
-    Object.defineProperty(exports3, "__esModule", {value: true});
-    var Position;
-    (function(Position2) {
-      function create(line, character) {
-        return {line, character};
-      }
-      Position2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);
-      }
-      Position2.is = is;
-    })(Position = exports3.Position || (exports3.Position = {}));
-    var Range;
-    (function(Range2) {
-      function create(one, two, three, four) {
-        if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {
-          return {start: Position.create(one, two), end: Position.create(three, four)};
-        } else if (Position.is(one) && Position.is(two)) {
-          return {start: one, end: two};
-        } else {
-          throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
-        }
-      }
-      Range2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
-      }
-      Range2.is = is;
-    })(Range = exports3.Range || (exports3.Range = {}));
-    var Location;
-    (function(Location2) {
-      function create(uri, range) {
-        return {uri, range};
-      }
-      Location2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
-      }
-      Location2.is = is;
-    })(Location = exports3.Location || (exports3.Location = {}));
-    var LocationLink;
-    (function(LocationLink2) {
-      function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
-        return {targetUri, targetRange, targetSelectionRange, originSelectionRange};
-      }
-      LocationLink2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange)) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
-      }
-      LocationLink2.is = is;
-    })(LocationLink = exports3.LocationLink || (exports3.LocationLink = {}));
-    var Color;
-    (function(Color2) {
-      function create(red, green, blue, alpha) {
-        return {
-          red,
-          green,
-          blue,
-          alpha
-        };
-      }
-      Color2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.number(candidate.red) && Is.number(candidate.green) && Is.number(candidate.blue) && Is.number(candidate.alpha);
-      }
-      Color2.is = is;
-    })(Color = exports3.Color || (exports3.Color = {}));
-    var ColorInformation;
-    (function(ColorInformation2) {
-      function create(range, color) {
-        return {
-          range,
-          color
-        };
-      }
-      ColorInformation2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Range.is(candidate.range) && Color.is(candidate.color);
-      }
-      ColorInformation2.is = is;
-    })(ColorInformation = exports3.ColorInformation || (exports3.ColorInformation = {}));
-    var ColorPresentation;
-    (function(ColorPresentation2) {
-      function create(label, textEdit, additionalTextEdits) {
-        return {
-          label,
-          textEdit,
-          additionalTextEdits
-        };
-      }
-      ColorPresentation2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
-      }
-      ColorPresentation2.is = is;
-    })(ColorPresentation = exports3.ColorPresentation || (exports3.ColorPresentation = {}));
-    var FoldingRangeKind;
-    (function(FoldingRangeKind2) {
-      FoldingRangeKind2["Comment"] = "comment";
-      FoldingRangeKind2["Imports"] = "imports";
-      FoldingRangeKind2["Region"] = "region";
-    })(FoldingRangeKind = exports3.FoldingRangeKind || (exports3.FoldingRangeKind = {}));
-    var FoldingRange;
-    (function(FoldingRange2) {
-      function create(startLine, endLine, startCharacter, endCharacter, kind) {
-        var result = {
-          startLine,
-          endLine
-        };
-        if (Is.defined(startCharacter)) {
-          result.startCharacter = startCharacter;
-        }
-        if (Is.defined(endCharacter)) {
-          result.endCharacter = endCharacter;
-        }
-        if (Is.defined(kind)) {
-          result.kind = kind;
-        }
-        return result;
-      }
-      FoldingRange2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.number(candidate.startLine) && Is.number(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
-      }
-      FoldingRange2.is = is;
-    })(FoldingRange = exports3.FoldingRange || (exports3.FoldingRange = {}));
-    var DiagnosticRelatedInformation;
-    (function(DiagnosticRelatedInformation2) {
-      function create(location, message) {
-        return {
-          location,
-          message
-        };
-      }
-      DiagnosticRelatedInformation2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
-      }
-      DiagnosticRelatedInformation2.is = is;
-    })(DiagnosticRelatedInformation = exports3.DiagnosticRelatedInformation || (exports3.DiagnosticRelatedInformation = {}));
-    var DiagnosticSeverity;
-    (function(DiagnosticSeverity2) {
-      DiagnosticSeverity2.Error = 1;
-      DiagnosticSeverity2.Warning = 2;
-      DiagnosticSeverity2.Information = 3;
-      DiagnosticSeverity2.Hint = 4;
-    })(DiagnosticSeverity = exports3.DiagnosticSeverity || (exports3.DiagnosticSeverity = {}));
-    var DiagnosticTag;
-    (function(DiagnosticTag2) {
-      DiagnosticTag2.Unnecessary = 1;
-      DiagnosticTag2.Deprecated = 2;
-    })(DiagnosticTag = exports3.DiagnosticTag || (exports3.DiagnosticTag = {}));
-    var Diagnostic;
-    (function(Diagnostic2) {
-      function create(range, message, severity, code, source, relatedInformation) {
-        var result = {range, message};
-        if (Is.defined(severity)) {
-          result.severity = severity;
-        }
-        if (Is.defined(code)) {
-          result.code = code;
-        }
-        if (Is.defined(source)) {
-          result.source = source;
-        }
-        if (Is.defined(relatedInformation)) {
-          result.relatedInformation = relatedInformation;
-        }
-        return result;
-      }
-      Diagnostic2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Range.is(candidate.range) && Is.string(candidate.message) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
-      }
-      Diagnostic2.is = is;
-    })(Diagnostic = exports3.Diagnostic || (exports3.Diagnostic = {}));
-    var Command;
-    (function(Command2) {
-      function create(title, command) {
-        var args = [];
-        for (var _i = 2; _i < arguments.length; _i++) {
-          args[_i - 2] = arguments[_i];
-        }
-        var result = {title, command};
-        if (Is.defined(args) && args.length > 0) {
-          result.arguments = args;
-        }
-        return result;
-      }
-      Command2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
-      }
-      Command2.is = is;
-    })(Command = exports3.Command || (exports3.Command = {}));
-    var TextEdit;
-    (function(TextEdit2) {
-      function replace(range, newText) {
-        return {range, newText};
-      }
-      TextEdit2.replace = replace;
-      function insert(position, newText) {
-        return {range: {start: position, end: position}, newText};
-      }
-      TextEdit2.insert = insert;
-      function del(range) {
-        return {range, newText: ""};
-      }
-      TextEdit2.del = del;
-      function is(value) {
-        var candidate = value;
-        return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);
-      }
-      TextEdit2.is = is;
-    })(TextEdit = exports3.TextEdit || (exports3.TextEdit = {}));
-    var TextDocumentEdit;
-    (function(TextDocumentEdit2) {
-      function create(textDocument, edits) {
-        return {textDocument, edits};
-      }
-      TextDocumentEdit2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && VersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);
-      }
-      TextDocumentEdit2.is = is;
-    })(TextDocumentEdit = exports3.TextDocumentEdit || (exports3.TextDocumentEdit = {}));
-    var CreateFile;
-    (function(CreateFile2) {
-      function create(uri, options) {
-        var result = {
-          kind: "create",
-          uri
-        };
-        if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
-          result.options = options;
-        }
-        return result;
-      }
-      CreateFile2.create = create;
-      function is(value) {
-        var candidate = value;
-        return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists)));
-      }
-      CreateFile2.is = is;
-    })(CreateFile = exports3.CreateFile || (exports3.CreateFile = {}));
-    var RenameFile;
-    (function(RenameFile2) {
-      function create(oldUri, newUri, options) {
-        var result = {
-          kind: "rename",
-          oldUri,
-          newUri
-        };
-        if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
-          result.options = options;
-        }
-        return result;
-      }
-      RenameFile2.create = create;
-      function is(value) {
-        var candidate = value;
-        return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists)));
-      }
-      RenameFile2.is = is;
-    })(RenameFile = exports3.RenameFile || (exports3.RenameFile = {}));
-    var DeleteFile;
-    (function(DeleteFile2) {
-      function create(uri, options) {
-        var result = {
-          kind: "delete",
-          uri
-        };
-        if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
-          result.options = options;
-        }
-        return result;
-      }
-      DeleteFile2.create = create;
-      function is(value) {
-        var candidate = value;
-        return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists)));
-      }
-      DeleteFile2.is = is;
-    })(DeleteFile = exports3.DeleteFile || (exports3.DeleteFile = {}));
-    var WorkspaceEdit;
-    (function(WorkspaceEdit2) {
-      function is(value) {
-        var candidate = value;
-        return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every(function(change) {
-          if (Is.string(change.kind)) {
-            return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
-          } else {
-            return TextDocumentEdit.is(change);
-          }
-        }));
-      }
-      WorkspaceEdit2.is = is;
-    })(WorkspaceEdit = exports3.WorkspaceEdit || (exports3.WorkspaceEdit = {}));
-    var TextEditChangeImpl = function() {
-      function TextEditChangeImpl2(edits) {
-        this.edits = edits;
-      }
-      TextEditChangeImpl2.prototype.insert = function(position, newText) {
-        this.edits.push(TextEdit.insert(position, newText));
-      };
-      TextEditChangeImpl2.prototype.replace = function(range, newText) {
-        this.edits.push(TextEdit.replace(range, newText));
-      };
-      TextEditChangeImpl2.prototype.delete = function(range) {
-        this.edits.push(TextEdit.del(range));
-      };
-      TextEditChangeImpl2.prototype.add = function(edit) {
-        this.edits.push(edit);
-      };
-      TextEditChangeImpl2.prototype.all = function() {
-        return this.edits;
-      };
-      TextEditChangeImpl2.prototype.clear = function() {
-        this.edits.splice(0, this.edits.length);
-      };
-      return TextEditChangeImpl2;
-    }();
-    var WorkspaceChange = function() {
-      function WorkspaceChange2(workspaceEdit) {
-        var _this = this;
-        this._textEditChanges = Object.create(null);
-        if (workspaceEdit) {
-          this._workspaceEdit = workspaceEdit;
-          if (workspaceEdit.documentChanges) {
-            workspaceEdit.documentChanges.forEach(function(change) {
-              if (TextDocumentEdit.is(change)) {
-                var textEditChange = new TextEditChangeImpl(change.edits);
-                _this._textEditChanges[change.textDocument.uri] = textEditChange;
-              }
-            });
-          } else if (workspaceEdit.changes) {
-            Object.keys(workspaceEdit.changes).forEach(function(key) {
-              var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
-              _this._textEditChanges[key] = textEditChange;
-            });
-          }
-        }
-      }
-      Object.defineProperty(WorkspaceChange2.prototype, "edit", {
-        get: function() {
-          return this._workspaceEdit;
-        },
-        enumerable: true,
-        configurable: true
-      });
-      WorkspaceChange2.prototype.getTextEditChange = function(key) {
-        if (VersionedTextDocumentIdentifier.is(key)) {
-          if (!this._workspaceEdit) {
-            this._workspaceEdit = {
-              documentChanges: []
-            };
-          }
-          if (!this._workspaceEdit.documentChanges) {
-            throw new Error("Workspace edit is not configured for document changes.");
-          }
-          var textDocument = key;
-          var result = this._textEditChanges[textDocument.uri];
-          if (!result) {
-            var edits = [];
-            var textDocumentEdit = {
-              textDocument,
-              edits
-            };
-            this._workspaceEdit.documentChanges.push(textDocumentEdit);
-            result = new TextEditChangeImpl(edits);
-            this._textEditChanges[textDocument.uri] = result;
-          }
-          return result;
-        } else {
-          if (!this._workspaceEdit) {
-            this._workspaceEdit = {
-              changes: Object.create(null)
-            };
-          }
-          if (!this._workspaceEdit.changes) {
-            throw new Error("Workspace edit is not configured for normal text edit changes.");
-          }
-          var result = this._textEditChanges[key];
-          if (!result) {
-            var edits = [];
-            this._workspaceEdit.changes[key] = edits;
-            result = new TextEditChangeImpl(edits);
-            this._textEditChanges[key] = result;
-          }
-          return result;
-        }
-      };
-      WorkspaceChange2.prototype.createFile = function(uri, options) {
-        this.checkDocumentChanges();
-        this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
-      };
-      WorkspaceChange2.prototype.renameFile = function(oldUri, newUri, options) {
-        this.checkDocumentChanges();
-        this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
-      };
-      WorkspaceChange2.prototype.deleteFile = function(uri, options) {
-        this.checkDocumentChanges();
-        this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
-      };
-      WorkspaceChange2.prototype.checkDocumentChanges = function() {
-        if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
-          throw new Error("Workspace edit is not configured for document changes.");
-        }
-      };
-      return WorkspaceChange2;
-    }();
-    exports3.WorkspaceChange = WorkspaceChange;
-    var TextDocumentIdentifier;
-    (function(TextDocumentIdentifier2) {
-      function create(uri) {
-        return {uri};
-      }
-      TextDocumentIdentifier2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.string(candidate.uri);
-      }
-      TextDocumentIdentifier2.is = is;
-    })(TextDocumentIdentifier = exports3.TextDocumentIdentifier || (exports3.TextDocumentIdentifier = {}));
-    var VersionedTextDocumentIdentifier;
-    (function(VersionedTextDocumentIdentifier2) {
-      function create(uri, version) {
-        return {uri, version};
-      }
-      VersionedTextDocumentIdentifier2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));
-      }
-      VersionedTextDocumentIdentifier2.is = is;
-    })(VersionedTextDocumentIdentifier = exports3.VersionedTextDocumentIdentifier || (exports3.VersionedTextDocumentIdentifier = {}));
-    var TextDocumentItem;
-    (function(TextDocumentItem2) {
-      function create(uri, languageId, version, text) {
-        return {uri, languageId, version, text};
-      }
-      TextDocumentItem2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);
-      }
-      TextDocumentItem2.is = is;
-    })(TextDocumentItem = exports3.TextDocumentItem || (exports3.TextDocumentItem = {}));
-    var MarkupKind;
-    (function(MarkupKind2) {
-      MarkupKind2.PlainText = "plaintext";
-      MarkupKind2.Markdown = "markdown";
-    })(MarkupKind = exports3.MarkupKind || (exports3.MarkupKind = {}));
-    (function(MarkupKind2) {
-      function is(value) {
-        var candidate = value;
-        return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;
-      }
-      MarkupKind2.is = is;
-    })(MarkupKind = exports3.MarkupKind || (exports3.MarkupKind = {}));
-    var MarkupContent;
-    (function(MarkupContent2) {
-      function is(value) {
-        var candidate = value;
-        return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
-      }
-      MarkupContent2.is = is;
-    })(MarkupContent = exports3.MarkupContent || (exports3.MarkupContent = {}));
-    var CompletionItemKind;
-    (function(CompletionItemKind2) {
-      CompletionItemKind2.Text = 1;
-      CompletionItemKind2.Method = 2;
-      CompletionItemKind2.Function = 3;
-      CompletionItemKind2.Constructor = 4;
-      CompletionItemKind2.Field = 5;
-      CompletionItemKind2.Variable = 6;
-      CompletionItemKind2.Class = 7;
-      CompletionItemKind2.Interface = 8;
-      CompletionItemKind2.Module = 9;
-      CompletionItemKind2.Property = 10;
-      CompletionItemKind2.Unit = 11;
-      CompletionItemKind2.Value = 12;
-      CompletionItemKind2.Enum = 13;
-      CompletionItemKind2.Keyword = 14;
-      CompletionItemKind2.Snippet = 15;
-      CompletionItemKind2.Color = 16;
-      CompletionItemKind2.File = 17;
-      CompletionItemKind2.Reference = 18;
-      CompletionItemKind2.Folder = 19;
-      CompletionItemKind2.EnumMember = 20;
-      CompletionItemKind2.Constant = 21;
-      CompletionItemKind2.Struct = 22;
-      CompletionItemKind2.Event = 23;
-      CompletionItemKind2.Operator = 24;
-      CompletionItemKind2.TypeParameter = 25;
-    })(CompletionItemKind = exports3.CompletionItemKind || (exports3.CompletionItemKind = {}));
-    var InsertTextFormat;
-    (function(InsertTextFormat2) {
-      InsertTextFormat2.PlainText = 1;
-      InsertTextFormat2.Snippet = 2;
-    })(InsertTextFormat = exports3.InsertTextFormat || (exports3.InsertTextFormat = {}));
-    var CompletionItemTag;
-    (function(CompletionItemTag2) {
-      CompletionItemTag2.Deprecated = 1;
-    })(CompletionItemTag = exports3.CompletionItemTag || (exports3.CompletionItemTag = {}));
-    var CompletionItem;
-    (function(CompletionItem2) {
-      function create(label) {
-        return {label};
-      }
-      CompletionItem2.create = create;
-    })(CompletionItem = exports3.CompletionItem || (exports3.CompletionItem = {}));
-    var CompletionList;
-    (function(CompletionList2) {
-      function create(items, isIncomplete) {
-        return {items: items ? items : [], isIncomplete: !!isIncomplete};
-      }
-      CompletionList2.create = create;
-    })(CompletionList = exports3.CompletionList || (exports3.CompletionList = {}));
-    var MarkedString;
-    (function(MarkedString2) {
-      function fromPlainText(plainText) {
-        return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
-      }
-      MarkedString2.fromPlainText = fromPlainText;
-      function is(value) {
-        var candidate = value;
-        return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);
-      }
-      MarkedString2.is = is;
-    })(MarkedString = exports3.MarkedString || (exports3.MarkedString = {}));
-    var Hover;
-    (function(Hover2) {
-      function is(value) {
-        var candidate = value;
-        return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
-      }
-      Hover2.is = is;
-    })(Hover = exports3.Hover || (exports3.Hover = {}));
-    var ParameterInformation;
-    (function(ParameterInformation2) {
-      function create(label, documentation) {
-        return documentation ? {label, documentation} : {label};
-      }
-      ParameterInformation2.create = create;
-    })(ParameterInformation = exports3.ParameterInformation || (exports3.ParameterInformation = {}));
-    var SignatureInformation;
-    (function(SignatureInformation2) {
-      function create(label, documentation) {
-        var parameters = [];
-        for (var _i = 2; _i < arguments.length; _i++) {
-          parameters[_i - 2] = arguments[_i];
-        }
-        var result = {label};
-        if (Is.defined(documentation)) {
-          result.documentation = documentation;
-        }
-        if (Is.defined(parameters)) {
-          result.parameters = parameters;
-        } else {
-          result.parameters = [];
-        }
-        return result;
-      }
-      SignatureInformation2.create = create;
-    })(SignatureInformation = exports3.SignatureInformation || (exports3.SignatureInformation = {}));
-    var DocumentHighlightKind;
-    (function(DocumentHighlightKind2) {
-      DocumentHighlightKind2.Text = 1;
-      DocumentHighlightKind2.Read = 2;
-      DocumentHighlightKind2.Write = 3;
-    })(DocumentHighlightKind = exports3.DocumentHighlightKind || (exports3.DocumentHighlightKind = {}));
-    var DocumentHighlight;
-    (function(DocumentHighlight2) {
-      function create(range, kind) {
-        var result = {range};
-        if (Is.number(kind)) {
-          result.kind = kind;
-        }
-        return result;
-      }
-      DocumentHighlight2.create = create;
-    })(DocumentHighlight = exports3.DocumentHighlight || (exports3.DocumentHighlight = {}));
-    var SymbolKind;
-    (function(SymbolKind2) {
-      SymbolKind2.File = 1;
-      SymbolKind2.Module = 2;
-      SymbolKind2.Namespace = 3;
-      SymbolKind2.Package = 4;
-      SymbolKind2.Class = 5;
-      SymbolKind2.Method = 6;
-      SymbolKind2.Property = 7;
-      SymbolKind2.Field = 8;
-      SymbolKind2.Constructor = 9;
-      SymbolKind2.Enum = 10;
-      SymbolKind2.Interface = 11;
-      SymbolKind2.Function = 12;
-      SymbolKind2.Variable = 13;
-      SymbolKind2.Constant = 14;
-      SymbolKind2.String = 15;
-      SymbolKind2.Number = 16;
-      SymbolKind2.Boolean = 17;
-      SymbolKind2.Array = 18;
-      SymbolKind2.Object = 19;
-      SymbolKind2.Key = 20;
-      SymbolKind2.Null = 21;
-      SymbolKind2.EnumMember = 22;
-      SymbolKind2.Struct = 23;
-      SymbolKind2.Event = 24;
-      SymbolKind2.Operator = 25;
-      SymbolKind2.TypeParameter = 26;
-    })(SymbolKind = exports3.SymbolKind || (exports3.SymbolKind = {}));
-    var SymbolTag;
-    (function(SymbolTag2) {
-      SymbolTag2.Deprecated = 1;
-    })(SymbolTag = exports3.SymbolTag || (exports3.SymbolTag = {}));
-    var SymbolInformation;
-    (function(SymbolInformation2) {
-      function create(name, kind, range, uri, containerName) {
-        var result = {
-          name,
-          kind,
-          location: {uri, range}
-        };
-        if (containerName) {
-          result.containerName = containerName;
-        }
-        return result;
-      }
-      SymbolInformation2.create = create;
-    })(SymbolInformation = exports3.SymbolInformation || (exports3.SymbolInformation = {}));
-    var DocumentSymbol;
-    (function(DocumentSymbol2) {
-      function create(name, detail, kind, range, selectionRange, children) {
-        var result = {
-          name,
-          detail,
-          kind,
-          range,
-          selectionRange
-        };
-        if (children !== void 0) {
-          result.children = children;
-        }
-        return result;
-      }
-      DocumentSymbol2.create = create;
-      function is(value) {
-        var candidate = value;
-        return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children));
-      }
-      DocumentSymbol2.is = is;
-    })(DocumentSymbol = exports3.DocumentSymbol || (exports3.DocumentSymbol = {}));
-    var CodeActionKind;
-    (function(CodeActionKind2) {
-      CodeActionKind2.Empty = "";
-      CodeActionKind2.QuickFix = "quickfix";
-      CodeActionKind2.Refactor = "refactor";
-      CodeActionKind2.RefactorExtract = "refactor.extract";
-      CodeActionKind2.RefactorInline = "refactor.inline";
-      CodeActionKind2.RefactorRewrite = "refactor.rewrite";
-      CodeActionKind2.Source = "source";
-      CodeActionKind2.SourceOrganizeImports = "source.organizeImports";
-      CodeActionKind2.SourceFixAll = "source.fixAll";
-    })(CodeActionKind = exports3.CodeActionKind || (exports3.CodeActionKind = {}));
-    var CodeActionContext;
-    (function(CodeActionContext2) {
-      function create(diagnostics, only) {
-        var result = {diagnostics};
-        if (only !== void 0 && only !== null) {
-          result.only = only;
-        }
-        return result;
-      }
-      CodeActionContext2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
-      }
-      CodeActionContext2.is = is;
-    })(CodeActionContext = exports3.CodeActionContext || (exports3.CodeActionContext = {}));
-    var CodeAction;
-    (function(CodeAction2) {
-      function create(title, commandOrEdit, kind) {
-        var result = {title};
-        if (Command.is(commandOrEdit)) {
-          result.command = commandOrEdit;
-        } else {
-          result.edit = commandOrEdit;
-        }
-        if (kind !== void 0) {
-          result.kind = kind;
-        }
-        return result;
-      }
-      CodeAction2.create = create;
-      function is(value) {
-        var candidate = value;
-        return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
-      }
-      CodeAction2.is = is;
-    })(CodeAction = exports3.CodeAction || (exports3.CodeAction = {}));
-    var CodeLens;
-    (function(CodeLens2) {
-      function create(range, data) {
-        var result = {range};
-        if (Is.defined(data)) {
-          result.data = data;
-        }
-        return result;
-      }
-      CodeLens2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
-      }
-      CodeLens2.is = is;
-    })(CodeLens = exports3.CodeLens || (exports3.CodeLens = {}));
-    var FormattingOptions;
-    (function(FormattingOptions2) {
-      function create(tabSize, insertSpaces) {
-        return {tabSize, insertSpaces};
-      }
-      FormattingOptions2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
-      }
-      FormattingOptions2.is = is;
-    })(FormattingOptions = exports3.FormattingOptions || (exports3.FormattingOptions = {}));
-    var DocumentLink;
-    (function(DocumentLink2) {
-      function create(range, target, data) {
-        return {range, target, data};
-      }
-      DocumentLink2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
-      }
-      DocumentLink2.is = is;
-    })(DocumentLink = exports3.DocumentLink || (exports3.DocumentLink = {}));
-    var SelectionRange;
-    (function(SelectionRange2) {
-      function create(range, parent) {
-        return {range, parent};
-      }
-      SelectionRange2.create = create;
-      function is(value) {
-        var candidate = value;
-        return candidate !== void 0 && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange2.is(candidate.parent));
-      }
-      SelectionRange2.is = is;
-    })(SelectionRange = exports3.SelectionRange || (exports3.SelectionRange = {}));
-    exports3.EOL = ["\n", "\r\n", "\r"];
-    var TextDocument;
-    (function(TextDocument2) {
-      function create(uri, languageId, version, content) {
-        return new FullTextDocument(uri, languageId, version, content);
-      }
-      TextDocument2.create = create;
-      function is(value) {
-        var candidate = value;
-        return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
-      }
-      TextDocument2.is = is;
-      function applyEdits(document, edits) {
-        var text = document.getText();
-        var sortedEdits = mergeSort(edits, function(a, b) {
-          var diff = a.range.start.line - b.range.start.line;
-          if (diff === 0) {
-            return a.range.start.character - b.range.start.character;
-          }
-          return diff;
-        });
-        var lastModifiedOffset = text.length;
-        for (var i = sortedEdits.length - 1; i >= 0; i--) {
-          var e = sortedEdits[i];
-          var startOffset = document.offsetAt(e.range.start);
-          var endOffset = document.offsetAt(e.range.end);
-          if (endOffset <= lastModifiedOffset) {
-            text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
-          } else {
-            throw new Error("Overlapping edit");
-          }
-          lastModifiedOffset = startOffset;
-        }
-        return text;
-      }
-      TextDocument2.applyEdits = applyEdits;
-      function mergeSort(data, compare) {
-        if (data.length <= 1) {
-          return data;
-        }
-        var p = data.length / 2 | 0;
-        var left = data.slice(0, p);
-        var right = data.slice(p);
-        mergeSort(left, compare);
-        mergeSort(right, compare);
-        var leftIdx = 0;
-        var rightIdx = 0;
-        var i = 0;
-        while (leftIdx < left.length && rightIdx < right.length) {
-          var ret = compare(left[leftIdx], right[rightIdx]);
-          if (ret <= 0) {
-            data[i++] = left[leftIdx++];
-          } else {
-            data[i++] = right[rightIdx++];
-          }
-        }
-        while (leftIdx < left.length) {
-          data[i++] = left[leftIdx++];
-        }
-        while (rightIdx < right.length) {
-          data[i++] = right[rightIdx++];
-        }
-        return data;
-      }
-    })(TextDocument = exports3.TextDocument || (exports3.TextDocument = {}));
-    var FullTextDocument = function() {
-      function FullTextDocument2(uri, languageId, version, content) {
-        this._uri = uri;
-        this._languageId = languageId;
-        this._version = version;
-        this._content = content;
-        this._lineOffsets = void 0;
-      }
-      Object.defineProperty(FullTextDocument2.prototype, "uri", {
-        get: function() {
-          return this._uri;
-        },
-        enumerable: true,
-        configurable: true
-      });
-      Object.defineProperty(FullTextDocument2.prototype, "languageId", {
-        get: function() {
-          return this._languageId;
-        },
-        enumerable: true,
-        configurable: true
-      });
-      Object.defineProperty(FullTextDocument2.prototype, "version", {
-        get: function() {
-          return this._version;
-        },
-        enumerable: true,
-        configurable: true
-      });
-      FullTextDocument2.prototype.getText = function(range) {
-        if (range) {
-          var start = this.offsetAt(range.start);
-          var end = this.offsetAt(range.end);
-          return this._content.substring(start, end);
-        }
-        return this._content;
-      };
-      FullTextDocument2.prototype.update = function(event, version) {
-        this._content = event.text;
-        this._version = version;
-        this._lineOffsets = void 0;
-      };
-      FullTextDocument2.prototype.getLineOffsets = function() {
-        if (this._lineOffsets === void 0) {
-          var lineOffsets = [];
-          var text = this._content;
-          var isLineStart = true;
-          for (var i = 0; i < text.length; i++) {
-            if (isLineStart) {
-              lineOffsets.push(i);
-              isLineStart = false;
-            }
-            var ch = text.charAt(i);
-            isLineStart = ch === "\r" || ch === "\n";
-            if (ch === "\r" && i + 1 < text.length && text.charAt(i + 1) === "\n") {
-              i++;
-            }
-          }
-          if (isLineStart && text.length > 0) {
-            lineOffsets.push(text.length);
-          }
-          this._lineOffsets = lineOffsets;
-        }
-        return this._lineOffsets;
-      };
-      FullTextDocument2.prototype.positionAt = function(offset) {
-        offset = Math.max(Math.min(offset, this._content.length), 0);
-        var lineOffsets = this.getLineOffsets();
-        var low = 0, high = lineOffsets.length;
-        if (high === 0) {
-          return Position.create(0, offset);
-        }
-        while (low < high) {
-          var mid = Math.floor((low + high) / 2);
-          if (lineOffsets[mid] > offset) {
-            high = mid;
-          } else {
-            low = mid + 1;
-          }
-        }
-        var line = low - 1;
-        return Position.create(line, offset - lineOffsets[line]);
-      };
-      FullTextDocument2.prototype.offsetAt = function(position) {
-        var lineOffsets = this.getLineOffsets();
-        if (position.line >= lineOffsets.length) {
-          return this._content.length;
-        } else if (position.line < 0) {
-          return 0;
-        }
-        var lineOffset = lineOffsets[position.line];
-        var nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
-        return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
-      };
-      Object.defineProperty(FullTextDocument2.prototype, "lineCount", {
-        get: function() {
-          return this.getLineOffsets().length;
-        },
-        enumerable: true,
-        configurable: true
-      });
-      return FullTextDocument2;
-    }();
-    var Is;
-    (function(Is2) {
-      var toString = Object.prototype.toString;
-      function defined(value) {
-        return typeof value !== "undefined";
-      }
-      Is2.defined = defined;
-      function undefined2(value) {
-        return typeof value === "undefined";
-      }
-      Is2.undefined = undefined2;
-      function boolean(value) {
-        return value === true || value === false;
-      }
-      Is2.boolean = boolean;
-      function string(value) {
-        return toString.call(value) === "[object String]";
-      }
-      Is2.string = string;
-      function number(value) {
-        return toString.call(value) === "[object Number]";
-      }
-      Is2.number = number;
-      function func(value) {
-        return toString.call(value) === "[object Function]";
-      }
-      Is2.func = func;
-      function objectLiteral(value) {
-        return value !== null && typeof value === "object";
-      }
-      Is2.objectLiteral = objectLiteral;
-      function typedArray(value, check) {
-        return Array.isArray(value) && value.every(check);
-      }
-      Is2.typedArray = typedArray;
-    })(Is || (Is = {}));
-  });
-});
-
-// node_modules/vscode-languageserver-protocol/lib/utils/is.js
-var require_is2 = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  function boolean(value) {
-    return value === true || value === false;
-  }
-  exports2.boolean = boolean;
-  function string(value) {
-    return typeof value === "string" || value instanceof String;
-  }
-  exports2.string = string;
-  function number(value) {
-    return typeof value === "number" || value instanceof Number;
-  }
-  exports2.number = number;
-  function error(value) {
-    return value instanceof Error;
-  }
-  exports2.error = error;
-  function func(value) {
-    return typeof value === "function";
-  }
-  exports2.func = func;
-  function array(value) {
-    return Array.isArray(value);
-  }
-  exports2.array = array;
-  function stringArray(value) {
-    return array(value) && value.every((elem) => string(elem));
-  }
-  exports2.stringArray = stringArray;
-  function typedArray(value, check) {
-    return Array.isArray(value) && value.every(check);
-  }
-  exports2.typedArray = typedArray;
-  function objectLiteral(value) {
-    return value !== null && typeof value === "object";
-  }
-  exports2.objectLiteral = objectLiteral;
-});
-
-// node_modules/vscode-languageserver-protocol/lib/messages.js
-var require_messages2 = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 {
-    constructor(method) {
-      super(method);
-    }
-  };
-  exports2.ProtocolRequestType0 = ProtocolRequestType0;
-  var ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType {
-    constructor(method) {
-      super(method);
-    }
-  };
-  exports2.ProtocolRequestType = ProtocolRequestType;
-  var ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType {
-    constructor(method) {
-      super(method);
-    }
-  };
-  exports2.ProtocolNotificationType = ProtocolNotificationType;
-  var ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 {
-    constructor(method) {
-      super(method);
-    }
-  };
-  exports2.ProtocolNotificationType0 = ProtocolNotificationType0;
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.implementation.js
-var require_protocol_implementation = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var ImplementationRequest;
-  (function(ImplementationRequest2) {
-    ImplementationRequest2.method = "textDocument/implementation";
-    ImplementationRequest2.type = new messages_1.ProtocolRequestType(ImplementationRequest2.method);
-    ImplementationRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(ImplementationRequest = exports2.ImplementationRequest || (exports2.ImplementationRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.typeDefinition.js
-var require_protocol_typeDefinition = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var TypeDefinitionRequest;
-  (function(TypeDefinitionRequest2) {
-    TypeDefinitionRequest2.method = "textDocument/typeDefinition";
-    TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest2.method);
-    TypeDefinitionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(TypeDefinitionRequest = exports2.TypeDefinitionRequest || (exports2.TypeDefinitionRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.workspaceFolders.js
-var require_protocol_workspaceFolders = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var messages_1 = require_messages2();
-  var WorkspaceFoldersRequest;
-  (function(WorkspaceFoldersRequest2) {
-    WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0("workspace/workspaceFolders");
-  })(WorkspaceFoldersRequest = exports2.WorkspaceFoldersRequest || (exports2.WorkspaceFoldersRequest = {}));
-  var DidChangeWorkspaceFoldersNotification;
-  (function(DidChangeWorkspaceFoldersNotification2) {
-    DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWorkspaceFolders");
-  })(DidChangeWorkspaceFoldersNotification = exports2.DidChangeWorkspaceFoldersNotification || (exports2.DidChangeWorkspaceFoldersNotification = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.configuration.js
-var require_protocol_configuration = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var messages_1 = require_messages2();
-  var ConfigurationRequest;
-  (function(ConfigurationRequest2) {
-    ConfigurationRequest2.type = new messages_1.ProtocolRequestType("workspace/configuration");
-  })(ConfigurationRequest = exports2.ConfigurationRequest || (exports2.ConfigurationRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.colorProvider.js
-var require_protocol_colorProvider = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var DocumentColorRequest;
-  (function(DocumentColorRequest2) {
-    DocumentColorRequest2.method = "textDocument/documentColor";
-    DocumentColorRequest2.type = new messages_1.ProtocolRequestType(DocumentColorRequest2.method);
-    DocumentColorRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(DocumentColorRequest = exports2.DocumentColorRequest || (exports2.DocumentColorRequest = {}));
-  var ColorPresentationRequest;
-  (function(ColorPresentationRequest2) {
-    ColorPresentationRequest2.type = new messages_1.ProtocolRequestType("textDocument/colorPresentation");
-  })(ColorPresentationRequest = exports2.ColorPresentationRequest || (exports2.ColorPresentationRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.foldingRange.js
-var require_protocol_foldingRange = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var FoldingRangeKind;
-  (function(FoldingRangeKind2) {
-    FoldingRangeKind2["Comment"] = "comment";
-    FoldingRangeKind2["Imports"] = "imports";
-    FoldingRangeKind2["Region"] = "region";
-  })(FoldingRangeKind = exports2.FoldingRangeKind || (exports2.FoldingRangeKind = {}));
-  var FoldingRangeRequest;
-  (function(FoldingRangeRequest2) {
-    FoldingRangeRequest2.method = "textDocument/foldingRange";
-    FoldingRangeRequest2.type = new messages_1.ProtocolRequestType(FoldingRangeRequest2.method);
-    FoldingRangeRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(FoldingRangeRequest = exports2.FoldingRangeRequest || (exports2.FoldingRangeRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.declaration.js
-var require_protocol_declaration = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var DeclarationRequest;
-  (function(DeclarationRequest2) {
-    DeclarationRequest2.method = "textDocument/declaration";
-    DeclarationRequest2.type = new messages_1.ProtocolRequestType(DeclarationRequest2.method);
-    DeclarationRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(DeclarationRequest = exports2.DeclarationRequest || (exports2.DeclarationRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.selectionRange.js
-var require_protocol_selectionRange = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var SelectionRangeRequest;
-  (function(SelectionRangeRequest2) {
-    SelectionRangeRequest2.method = "textDocument/selectionRange";
-    SelectionRangeRequest2.type = new messages_1.ProtocolRequestType(SelectionRangeRequest2.method);
-    SelectionRangeRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(SelectionRangeRequest = exports2.SelectionRangeRequest || (exports2.SelectionRangeRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.progress.js
-var require_protocol_progress = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var WorkDoneProgress;
-  (function(WorkDoneProgress2) {
-    WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType();
-  })(WorkDoneProgress = exports2.WorkDoneProgress || (exports2.WorkDoneProgress = {}));
-  var WorkDoneProgressCreateRequest;
-  (function(WorkDoneProgressCreateRequest2) {
-    WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType("window/workDoneProgress/create");
-  })(WorkDoneProgressCreateRequest = exports2.WorkDoneProgressCreateRequest || (exports2.WorkDoneProgressCreateRequest = {}));
-  var WorkDoneProgressCancelNotification;
-  (function(WorkDoneProgressCancelNotification2) {
-    WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType("window/workDoneProgress/cancel");
-  })(WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCancelNotification || (exports2.WorkDoneProgressCancelNotification = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.js
-var require_protocol = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var Is = require_is2();
-  var vscode_jsonrpc_1 = require_main();
-  var messages_1 = require_messages2();
-  var protocol_implementation_1 = require_protocol_implementation();
-  exports2.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
-  var protocol_typeDefinition_1 = require_protocol_typeDefinition();
-  exports2.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
-  var protocol_workspaceFolders_1 = require_protocol_workspaceFolders();
-  exports2.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
-  exports2.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
-  var protocol_configuration_1 = require_protocol_configuration();
-  exports2.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
-  var protocol_colorProvider_1 = require_protocol_colorProvider();
-  exports2.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
-  exports2.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
-  var protocol_foldingRange_1 = require_protocol_foldingRange();
-  exports2.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
-  var protocol_declaration_1 = require_protocol_declaration();
-  exports2.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
-  var protocol_selectionRange_1 = require_protocol_selectionRange();
-  exports2.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;
-  var protocol_progress_1 = require_protocol_progress();
-  exports2.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;
-  exports2.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;
-  exports2.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;
-  var DocumentFilter;
-  (function(DocumentFilter2) {
-    function is(value) {
-      const candidate = value;
-      return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
-    }
-    DocumentFilter2.is = is;
-  })(DocumentFilter = exports2.DocumentFilter || (exports2.DocumentFilter = {}));
-  var DocumentSelector;
-  (function(DocumentSelector2) {
-    function is(value) {
-      if (!Array.isArray(value)) {
-        return false;
-      }
-      for (let elem of value) {
-        if (!Is.string(elem) && !DocumentFilter.is(elem)) {
-          return false;
-        }
-      }
-      return true;
-    }
-    DocumentSelector2.is = is;
-  })(DocumentSelector = exports2.DocumentSelector || (exports2.DocumentSelector = {}));
-  var RegistrationRequest;
-  (function(RegistrationRequest2) {
-    RegistrationRequest2.type = new messages_1.ProtocolRequestType("client/registerCapability");
-  })(RegistrationRequest = exports2.RegistrationRequest || (exports2.RegistrationRequest = {}));
-  var UnregistrationRequest;
-  (function(UnregistrationRequest2) {
-    UnregistrationRequest2.type = new messages_1.ProtocolRequestType("client/unregisterCapability");
-  })(UnregistrationRequest = exports2.UnregistrationRequest || (exports2.UnregistrationRequest = {}));
-  var ResourceOperationKind;
-  (function(ResourceOperationKind2) {
-    ResourceOperationKind2.Create = "create";
-    ResourceOperationKind2.Rename = "rename";
-    ResourceOperationKind2.Delete = "delete";
-  })(ResourceOperationKind = exports2.ResourceOperationKind || (exports2.ResourceOperationKind = {}));
-  var FailureHandlingKind;
-  (function(FailureHandlingKind2) {
-    FailureHandlingKind2.Abort = "abort";
-    FailureHandlingKind2.Transactional = "transactional";
-    FailureHandlingKind2.TextOnlyTransactional = "textOnlyTransactional";
-    FailureHandlingKind2.Undo = "undo";
-  })(FailureHandlingKind = exports2.FailureHandlingKind || (exports2.FailureHandlingKind = {}));
-  var StaticRegistrationOptions;
-  (function(StaticRegistrationOptions2) {
-    function hasId(value) {
-      const candidate = value;
-      return candidate && Is.string(candidate.id) && candidate.id.length > 0;
-    }
-    StaticRegistrationOptions2.hasId = hasId;
-  })(StaticRegistrationOptions = exports2.StaticRegistrationOptions || (exports2.StaticRegistrationOptions = {}));
-  var TextDocumentRegistrationOptions;
-  (function(TextDocumentRegistrationOptions2) {
-    function is(value) {
-      const candidate = value;
-      return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
-    }
-    TextDocumentRegistrationOptions2.is = is;
-  })(TextDocumentRegistrationOptions = exports2.TextDocumentRegistrationOptions || (exports2.TextDocumentRegistrationOptions = {}));
-  var WorkDoneProgressOptions;
-  (function(WorkDoneProgressOptions2) {
-    function is(value) {
-      const candidate = value;
-      return Is.objectLiteral(candidate) && (candidate.workDoneProgress === void 0 || Is.boolean(candidate.workDoneProgress));
-    }
-    WorkDoneProgressOptions2.is = is;
-    function hasWorkDoneProgress(value) {
-      const candidate = value;
-      return candidate && Is.boolean(candidate.workDoneProgress);
-    }
-    WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress;
-  })(WorkDoneProgressOptions = exports2.WorkDoneProgressOptions || (exports2.WorkDoneProgressOptions = {}));
-  var InitializeRequest;
-  (function(InitializeRequest2) {
-    InitializeRequest2.type = new messages_1.ProtocolRequestType("initialize");
-  })(InitializeRequest = exports2.InitializeRequest || (exports2.InitializeRequest = {}));
-  var InitializeError;
-  (function(InitializeError2) {
-    InitializeError2.unknownProtocolVersion = 1;
-  })(InitializeError = exports2.InitializeError || (exports2.InitializeError = {}));
-  var InitializedNotification;
-  (function(InitializedNotification2) {
-    InitializedNotification2.type = new messages_1.ProtocolNotificationType("initialized");
-  })(InitializedNotification = exports2.InitializedNotification || (exports2.InitializedNotification = {}));
-  var ShutdownRequest;
-  (function(ShutdownRequest2) {
-    ShutdownRequest2.type = new messages_1.ProtocolRequestType0("shutdown");
-  })(ShutdownRequest = exports2.ShutdownRequest || (exports2.ShutdownRequest = {}));
-  var ExitNotification;
-  (function(ExitNotification2) {
-    ExitNotification2.type = new messages_1.ProtocolNotificationType0("exit");
-  })(ExitNotification = exports2.ExitNotification || (exports2.ExitNotification = {}));
-  var DidChangeConfigurationNotification;
-  (function(DidChangeConfigurationNotification2) {
-    DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeConfiguration");
-  })(DidChangeConfigurationNotification = exports2.DidChangeConfigurationNotification || (exports2.DidChangeConfigurationNotification = {}));
-  var MessageType;
-  (function(MessageType2) {
-    MessageType2.Error = 1;
-    MessageType2.Warning = 2;
-    MessageType2.Info = 3;
-    MessageType2.Log = 4;
-  })(MessageType = exports2.MessageType || (exports2.MessageType = {}));
-  var ShowMessageNotification;
-  (function(ShowMessageNotification2) {
-    ShowMessageNotification2.type = new messages_1.ProtocolNotificationType("window/showMessage");
-  })(ShowMessageNotification = exports2.ShowMessageNotification || (exports2.ShowMessageNotification = {}));
-  var ShowMessageRequest;
-  (function(ShowMessageRequest2) {
-    ShowMessageRequest2.type = new messages_1.ProtocolRequestType("window/showMessageRequest");
-  })(ShowMessageRequest = exports2.ShowMessageRequest || (exports2.ShowMessageRequest = {}));
-  var LogMessageNotification;
-  (function(LogMessageNotification2) {
-    LogMessageNotification2.type = new messages_1.ProtocolNotificationType("window/logMessage");
-  })(LogMessageNotification = exports2.LogMessageNotification || (exports2.LogMessageNotification = {}));
-  var TelemetryEventNotification;
-  (function(TelemetryEventNotification2) {
-    TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType("telemetry/event");
-  })(TelemetryEventNotification = exports2.TelemetryEventNotification || (exports2.TelemetryEventNotification = {}));
-  var TextDocumentSyncKind;
-  (function(TextDocumentSyncKind2) {
-    TextDocumentSyncKind2.None = 0;
-    TextDocumentSyncKind2.Full = 1;
-    TextDocumentSyncKind2.Incremental = 2;
-  })(TextDocumentSyncKind = exports2.TextDocumentSyncKind || (exports2.TextDocumentSyncKind = {}));
-  var DidOpenTextDocumentNotification;
-  (function(DidOpenTextDocumentNotification2) {
-    DidOpenTextDocumentNotification2.method = "textDocument/didOpen";
-    DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification2.method);
-  })(DidOpenTextDocumentNotification = exports2.DidOpenTextDocumentNotification || (exports2.DidOpenTextDocumentNotification = {}));
-  var DidChangeTextDocumentNotification;
-  (function(DidChangeTextDocumentNotification2) {
-    DidChangeTextDocumentNotification2.method = "textDocument/didChange";
-    DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification2.method);
-  })(DidChangeTextDocumentNotification = exports2.DidChangeTextDocumentNotification || (exports2.DidChangeTextDocumentNotification = {}));
-  var DidCloseTextDocumentNotification;
-  (function(DidCloseTextDocumentNotification2) {
-    DidCloseTextDocumentNotification2.method = "textDocument/didClose";
-    DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification2.method);
-  })(DidCloseTextDocumentNotification = exports2.DidCloseTextDocumentNotification || (exports2.DidCloseTextDocumentNotification = {}));
-  var DidSaveTextDocumentNotification;
-  (function(DidSaveTextDocumentNotification2) {
-    DidSaveTextDocumentNotification2.method = "textDocument/didSave";
-    DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification2.method);
-  })(DidSaveTextDocumentNotification = exports2.DidSaveTextDocumentNotification || (exports2.DidSaveTextDocumentNotification = {}));
-  var TextDocumentSaveReason;
-  (function(TextDocumentSaveReason2) {
-    TextDocumentSaveReason2.Manual = 1;
-    TextDocumentSaveReason2.AfterDelay = 2;
-    TextDocumentSaveReason2.FocusOut = 3;
-  })(TextDocumentSaveReason = exports2.TextDocumentSaveReason || (exports2.TextDocumentSaveReason = {}));
-  var WillSaveTextDocumentNotification;
-  (function(WillSaveTextDocumentNotification2) {
-    WillSaveTextDocumentNotification2.method = "textDocument/willSave";
-    WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification2.method);
-  })(WillSaveTextDocumentNotification = exports2.WillSaveTextDocumentNotification || (exports2.WillSaveTextDocumentNotification = {}));
-  var WillSaveTextDocumentWaitUntilRequest;
-  (function(WillSaveTextDocumentWaitUntilRequest2) {
-    WillSaveTextDocumentWaitUntilRequest2.method = "textDocument/willSaveWaitUntil";
-    WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest2.method);
-  })(WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentWaitUntilRequest || (exports2.WillSaveTextDocumentWaitUntilRequest = {}));
-  var DidChangeWatchedFilesNotification;
-  (function(DidChangeWatchedFilesNotification2) {
-    DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType("workspace/didChangeWatchedFiles");
-  })(DidChangeWatchedFilesNotification = exports2.DidChangeWatchedFilesNotification || (exports2.DidChangeWatchedFilesNotification = {}));
-  var FileChangeType;
-  (function(FileChangeType2) {
-    FileChangeType2.Created = 1;
-    FileChangeType2.Changed = 2;
-    FileChangeType2.Deleted = 3;
-  })(FileChangeType = exports2.FileChangeType || (exports2.FileChangeType = {}));
-  var WatchKind;
-  (function(WatchKind2) {
-    WatchKind2.Create = 1;
-    WatchKind2.Change = 2;
-    WatchKind2.Delete = 4;
-  })(WatchKind = exports2.WatchKind || (exports2.WatchKind = {}));
-  var PublishDiagnosticsNotification;
-  (function(PublishDiagnosticsNotification2) {
-    PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType("textDocument/publishDiagnostics");
-  })(PublishDiagnosticsNotification = exports2.PublishDiagnosticsNotification || (exports2.PublishDiagnosticsNotification = {}));
-  var CompletionTriggerKind;
-  (function(CompletionTriggerKind2) {
-    CompletionTriggerKind2.Invoked = 1;
-    CompletionTriggerKind2.TriggerCharacter = 2;
-    CompletionTriggerKind2.TriggerForIncompleteCompletions = 3;
-  })(CompletionTriggerKind = exports2.CompletionTriggerKind || (exports2.CompletionTriggerKind = {}));
-  var CompletionRequest;
-  (function(CompletionRequest2) {
-    CompletionRequest2.method = "textDocument/completion";
-    CompletionRequest2.type = new messages_1.ProtocolRequestType(CompletionRequest2.method);
-    CompletionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(CompletionRequest = exports2.CompletionRequest || (exports2.CompletionRequest = {}));
-  var CompletionResolveRequest;
-  (function(CompletionResolveRequest2) {
-    CompletionResolveRequest2.method = "completionItem/resolve";
-    CompletionResolveRequest2.type = new messages_1.ProtocolRequestType(CompletionResolveRequest2.method);
-  })(CompletionResolveRequest = exports2.CompletionResolveRequest || (exports2.CompletionResolveRequest = {}));
-  var HoverRequest;
-  (function(HoverRequest2) {
-    HoverRequest2.method = "textDocument/hover";
-    HoverRequest2.type = new messages_1.ProtocolRequestType(HoverRequest2.method);
-  })(HoverRequest = exports2.HoverRequest || (exports2.HoverRequest = {}));
-  var SignatureHelpTriggerKind;
-  (function(SignatureHelpTriggerKind2) {
-    SignatureHelpTriggerKind2.Invoked = 1;
-    SignatureHelpTriggerKind2.TriggerCharacter = 2;
-    SignatureHelpTriggerKind2.ContentChange = 3;
-  })(SignatureHelpTriggerKind = exports2.SignatureHelpTriggerKind || (exports2.SignatureHelpTriggerKind = {}));
-  var SignatureHelpRequest;
-  (function(SignatureHelpRequest2) {
-    SignatureHelpRequest2.method = "textDocument/signatureHelp";
-    SignatureHelpRequest2.type = new messages_1.ProtocolRequestType(SignatureHelpRequest2.method);
-  })(SignatureHelpRequest = exports2.SignatureHelpRequest || (exports2.SignatureHelpRequest = {}));
-  var DefinitionRequest;
-  (function(DefinitionRequest2) {
-    DefinitionRequest2.method = "textDocument/definition";
-    DefinitionRequest2.type = new messages_1.ProtocolRequestType(DefinitionRequest2.method);
-    DefinitionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(DefinitionRequest = exports2.DefinitionRequest || (exports2.DefinitionRequest = {}));
-  var ReferencesRequest;
-  (function(ReferencesRequest2) {
-    ReferencesRequest2.method = "textDocument/references";
-    ReferencesRequest2.type = new messages_1.ProtocolRequestType(ReferencesRequest2.method);
-    ReferencesRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(ReferencesRequest = exports2.ReferencesRequest || (exports2.ReferencesRequest = {}));
-  var DocumentHighlightRequest;
-  (function(DocumentHighlightRequest2) {
-    DocumentHighlightRequest2.method = "textDocument/documentHighlight";
-    DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest2.method);
-    DocumentHighlightRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(DocumentHighlightRequest = exports2.DocumentHighlightRequest || (exports2.DocumentHighlightRequest = {}));
-  var DocumentSymbolRequest;
-  (function(DocumentSymbolRequest2) {
-    DocumentSymbolRequest2.method = "textDocument/documentSymbol";
-    DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest2.method);
-    DocumentSymbolRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(DocumentSymbolRequest = exports2.DocumentSymbolRequest || (exports2.DocumentSymbolRequest = {}));
-  var CodeActionRequest;
-  (function(CodeActionRequest2) {
-    CodeActionRequest2.method = "textDocument/codeAction";
-    CodeActionRequest2.type = new messages_1.ProtocolRequestType(CodeActionRequest2.method);
-    CodeActionRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(CodeActionRequest = exports2.CodeActionRequest || (exports2.CodeActionRequest = {}));
-  var WorkspaceSymbolRequest;
-  (function(WorkspaceSymbolRequest2) {
-    WorkspaceSymbolRequest2.method = "workspace/symbol";
-    WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest2.method);
-    WorkspaceSymbolRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(WorkspaceSymbolRequest = exports2.WorkspaceSymbolRequest || (exports2.WorkspaceSymbolRequest = {}));
-  var CodeLensRequest;
-  (function(CodeLensRequest2) {
-    CodeLensRequest2.type = new messages_1.ProtocolRequestType("textDocument/codeLens");
-    CodeLensRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(CodeLensRequest = exports2.CodeLensRequest || (exports2.CodeLensRequest = {}));
-  var CodeLensResolveRequest;
-  (function(CodeLensResolveRequest2) {
-    CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType("codeLens/resolve");
-  })(CodeLensResolveRequest = exports2.CodeLensResolveRequest || (exports2.CodeLensResolveRequest = {}));
-  var DocumentLinkRequest;
-  (function(DocumentLinkRequest2) {
-    DocumentLinkRequest2.method = "textDocument/documentLink";
-    DocumentLinkRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkRequest2.method);
-    DocumentLinkRequest2.resultType = new vscode_jsonrpc_1.ProgressType();
-  })(DocumentLinkRequest = exports2.DocumentLinkRequest || (exports2.DocumentLinkRequest = {}));
-  var DocumentLinkResolveRequest;
-  (function(DocumentLinkResolveRequest2) {
-    DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType("documentLink/resolve");
-  })(DocumentLinkResolveRequest = exports2.DocumentLinkResolveRequest || (exports2.DocumentLinkResolveRequest = {}));
-  var DocumentFormattingRequest;
-  (function(DocumentFormattingRequest2) {
-    DocumentFormattingRequest2.method = "textDocument/formatting";
-    DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest2.method);
-  })(DocumentFormattingRequest = exports2.DocumentFormattingRequest || (exports2.DocumentFormattingRequest = {}));
-  var DocumentRangeFormattingRequest;
-  (function(DocumentRangeFormattingRequest2) {
-    DocumentRangeFormattingRequest2.method = "textDocument/rangeFormatting";
-    DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest2.method);
-  })(DocumentRangeFormattingRequest = exports2.DocumentRangeFormattingRequest || (exports2.DocumentRangeFormattingRequest = {}));
-  var DocumentOnTypeFormattingRequest;
-  (function(DocumentOnTypeFormattingRequest2) {
-    DocumentOnTypeFormattingRequest2.method = "textDocument/onTypeFormatting";
-    DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest2.method);
-  })(DocumentOnTypeFormattingRequest = exports2.DocumentOnTypeFormattingRequest || (exports2.DocumentOnTypeFormattingRequest = {}));
-  var RenameRequest;
-  (function(RenameRequest2) {
-    RenameRequest2.method = "textDocument/rename";
-    RenameRequest2.type = new messages_1.ProtocolRequestType(RenameRequest2.method);
-  })(RenameRequest = exports2.RenameRequest || (exports2.RenameRequest = {}));
-  var PrepareRenameRequest;
-  (function(PrepareRenameRequest2) {
-    PrepareRenameRequest2.method = "textDocument/prepareRename";
-    PrepareRenameRequest2.type = new messages_1.ProtocolRequestType(PrepareRenameRequest2.method);
-  })(PrepareRenameRequest = exports2.PrepareRenameRequest || (exports2.PrepareRenameRequest = {}));
-  var ExecuteCommandRequest;
-  (function(ExecuteCommandRequest2) {
-    ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType("workspace/executeCommand");
-  })(ExecuteCommandRequest = exports2.ExecuteCommandRequest || (exports2.ExecuteCommandRequest = {}));
-  var ApplyWorkspaceEditRequest;
-  (function(ApplyWorkspaceEditRequest2) {
-    ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
-  })(ApplyWorkspaceEditRequest = exports2.ApplyWorkspaceEditRequest || (exports2.ApplyWorkspaceEditRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.callHierarchy.proposed.js
-var require_protocol_callHierarchy_proposed = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var messages_1 = require_messages2();
-  var CallHierarchyPrepareRequest;
-  (function(CallHierarchyPrepareRequest2) {
-    CallHierarchyPrepareRequest2.method = "textDocument/prepareCallHierarchy";
-    CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest2.method);
-  })(CallHierarchyPrepareRequest = exports2.CallHierarchyPrepareRequest || (exports2.CallHierarchyPrepareRequest = {}));
-  var CallHierarchyIncomingCallsRequest;
-  (function(CallHierarchyIncomingCallsRequest2) {
-    CallHierarchyIncomingCallsRequest2.method = "callHierarchy/incomingCalls";
-    CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest2.method);
-  })(CallHierarchyIncomingCallsRequest = exports2.CallHierarchyIncomingCallsRequest || (exports2.CallHierarchyIncomingCallsRequest = {}));
-  var CallHierarchyOutgoingCallsRequest;
-  (function(CallHierarchyOutgoingCallsRequest2) {
-    CallHierarchyOutgoingCallsRequest2.method = "callHierarchy/outgoingCalls";
-    CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest2.method);
-  })(CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyOutgoingCallsRequest || (exports2.CallHierarchyOutgoingCallsRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/protocol.sematicTokens.proposed.js
-var require_protocol_sematicTokens_proposed = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var messages_1 = require_messages2();
-  var SemanticTokenTypes;
-  (function(SemanticTokenTypes2) {
-    SemanticTokenTypes2["comment"] = "comment";
-    SemanticTokenTypes2["keyword"] = "keyword";
-    SemanticTokenTypes2["string"] = "string";
-    SemanticTokenTypes2["number"] = "number";
-    SemanticTokenTypes2["regexp"] = "regexp";
-    SemanticTokenTypes2["operator"] = "operator";
-    SemanticTokenTypes2["namespace"] = "namespace";
-    SemanticTokenTypes2["type"] = "type";
-    SemanticTokenTypes2["struct"] = "struct";
-    SemanticTokenTypes2["class"] = "class";
-    SemanticTokenTypes2["interface"] = "interface";
-    SemanticTokenTypes2["enum"] = "enum";
-    SemanticTokenTypes2["typeParameter"] = "typeParameter";
-    SemanticTokenTypes2["function"] = "function";
-    SemanticTokenTypes2["member"] = "member";
-    SemanticTokenTypes2["property"] = "property";
-    SemanticTokenTypes2["macro"] = "macro";
-    SemanticTokenTypes2["variable"] = "variable";
-    SemanticTokenTypes2["parameter"] = "parameter";
-    SemanticTokenTypes2["label"] = "label";
-  })(SemanticTokenTypes = exports2.SemanticTokenTypes || (exports2.SemanticTokenTypes = {}));
-  var SemanticTokenModifiers;
-  (function(SemanticTokenModifiers2) {
-    SemanticTokenModifiers2["documentation"] = "documentation";
-    SemanticTokenModifiers2["declaration"] = "declaration";
-    SemanticTokenModifiers2["definition"] = "definition";
-    SemanticTokenModifiers2["reference"] = "reference";
-    SemanticTokenModifiers2["static"] = "static";
-    SemanticTokenModifiers2["abstract"] = "abstract";
-    SemanticTokenModifiers2["deprecated"] = "deprecated";
-    SemanticTokenModifiers2["async"] = "async";
-    SemanticTokenModifiers2["volatile"] = "volatile";
-    SemanticTokenModifiers2["readonly"] = "readonly";
-  })(SemanticTokenModifiers = exports2.SemanticTokenModifiers || (exports2.SemanticTokenModifiers = {}));
-  var SemanticTokens;
-  (function(SemanticTokens2) {
-    function is(value) {
-      const candidate = value;
-      return candidate !== void 0 && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
-    }
-    SemanticTokens2.is = is;
-  })(SemanticTokens = exports2.SemanticTokens || (exports2.SemanticTokens = {}));
-  var SemanticTokensRequest;
-  (function(SemanticTokensRequest2) {
-    SemanticTokensRequest2.method = "textDocument/semanticTokens";
-    SemanticTokensRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRequest2.method);
-  })(SemanticTokensRequest = exports2.SemanticTokensRequest || (exports2.SemanticTokensRequest = {}));
-  var SemanticTokensEditsRequest;
-  (function(SemanticTokensEditsRequest2) {
-    SemanticTokensEditsRequest2.method = "textDocument/semanticTokens/edits";
-    SemanticTokensEditsRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest2.method);
-  })(SemanticTokensEditsRequest = exports2.SemanticTokensEditsRequest || (exports2.SemanticTokensEditsRequest = {}));
-  var SemanticTokensRangeRequest;
-  (function(SemanticTokensRangeRequest2) {
-    SemanticTokensRangeRequest2.method = "textDocument/semanticTokens/range";
-    SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest2.method);
-  })(SemanticTokensRangeRequest = exports2.SemanticTokensRangeRequest || (exports2.SemanticTokensRangeRequest = {}));
-});
-
-// node_modules/vscode-languageserver-protocol/lib/main.js
-var require_main3 = __commonJS((exports2) => {
-  "use strict";
-  function __export2(m) {
-    for (var p in m)
-      if (!exports2.hasOwnProperty(p))
-        exports2[p] = m[p];
-  }
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_jsonrpc_1 = require_main();
-  exports2.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
-  exports2.ResponseError = vscode_jsonrpc_1.ResponseError;
-  exports2.CancellationToken = vscode_jsonrpc_1.CancellationToken;
-  exports2.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
-  exports2.Disposable = vscode_jsonrpc_1.Disposable;
-  exports2.Event = vscode_jsonrpc_1.Event;
-  exports2.Emitter = vscode_jsonrpc_1.Emitter;
-  exports2.Trace = vscode_jsonrpc_1.Trace;
-  exports2.TraceFormat = vscode_jsonrpc_1.TraceFormat;
-  exports2.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
-  exports2.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
-  exports2.RequestType = vscode_jsonrpc_1.RequestType;
-  exports2.RequestType0 = vscode_jsonrpc_1.RequestType0;
-  exports2.NotificationType = vscode_jsonrpc_1.NotificationType;
-  exports2.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
-  exports2.MessageReader = vscode_jsonrpc_1.MessageReader;
-  exports2.MessageWriter = vscode_jsonrpc_1.MessageWriter;
-  exports2.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
-  exports2.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
-  exports2.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
-  exports2.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
-  exports2.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
-  exports2.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
-  exports2.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
-  exports2.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
-  exports2.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
-  exports2.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
-  exports2.ProgressType = vscode_jsonrpc_1.ProgressType;
-  __export2(require_main2());
-  __export2(require_protocol());
-  var callHierarchy = require_protocol_callHierarchy_proposed();
-  var st = require_protocol_sematicTokens_proposed();
-  var Proposed;
-  (function(Proposed2) {
-    let CallHierarchyPrepareRequest;
-    (function(CallHierarchyPrepareRequest2) {
-      CallHierarchyPrepareRequest2.method = callHierarchy.CallHierarchyPrepareRequest.method;
-      CallHierarchyPrepareRequest2.type = callHierarchy.CallHierarchyPrepareRequest.type;
-    })(CallHierarchyPrepareRequest = Proposed2.CallHierarchyPrepareRequest || (Proposed2.CallHierarchyPrepareRequest = {}));
-    let CallHierarchyIncomingCallsRequest;
-    (function(CallHierarchyIncomingCallsRequest2) {
-      CallHierarchyIncomingCallsRequest2.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;
-      CallHierarchyIncomingCallsRequest2.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;
-    })(CallHierarchyIncomingCallsRequest = Proposed2.CallHierarchyIncomingCallsRequest || (Proposed2.CallHierarchyIncomingCallsRequest = {}));
-    let CallHierarchyOutgoingCallsRequest;
-    (function(CallHierarchyOutgoingCallsRequest2) {
-      CallHierarchyOutgoingCallsRequest2.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;
-      CallHierarchyOutgoingCallsRequest2.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;
-    })(CallHierarchyOutgoingCallsRequest = Proposed2.CallHierarchyOutgoingCallsRequest || (Proposed2.CallHierarchyOutgoingCallsRequest = {}));
-    Proposed2.SemanticTokenTypes = st.SemanticTokenTypes;
-    Proposed2.SemanticTokenModifiers = st.SemanticTokenModifiers;
-    Proposed2.SemanticTokens = st.SemanticTokens;
-    let SemanticTokensRequest;
-    (function(SemanticTokensRequest2) {
-      SemanticTokensRequest2.method = st.SemanticTokensRequest.method;
-      SemanticTokensRequest2.type = st.SemanticTokensRequest.type;
-    })(SemanticTokensRequest = Proposed2.SemanticTokensRequest || (Proposed2.SemanticTokensRequest = {}));
-    let SemanticTokensEditsRequest;
-    (function(SemanticTokensEditsRequest2) {
-      SemanticTokensEditsRequest2.method = st.SemanticTokensEditsRequest.method;
-      SemanticTokensEditsRequest2.type = st.SemanticTokensEditsRequest.type;
-    })(SemanticTokensEditsRequest = Proposed2.SemanticTokensEditsRequest || (Proposed2.SemanticTokensEditsRequest = {}));
-    let SemanticTokensRangeRequest;
-    (function(SemanticTokensRangeRequest2) {
-      SemanticTokensRangeRequest2.method = st.SemanticTokensRangeRequest.method;
-      SemanticTokensRangeRequest2.type = st.SemanticTokensRangeRequest.type;
-    })(SemanticTokensRangeRequest = Proposed2.SemanticTokensRangeRequest || (Proposed2.SemanticTokensRangeRequest = {}));
-  })(Proposed = exports2.Proposed || (exports2.Proposed = {}));
-  function createProtocolConnection(reader, writer, logger, strategy) {
-    return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
-  }
-  exports2.createProtocolConnection = createProtocolConnection;
-});
-
-// node_modules/vscode-languageclient/lib/utils/is.js
-var require_is3 = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  function boolean(value) {
-    return value === true || value === false;
-  }
-  exports2.boolean = boolean;
-  function string(value) {
-    return typeof value === "string" || value instanceof String;
-  }
-  exports2.string = string;
-  function number(value) {
-    return typeof value === "number" || value instanceof Number;
-  }
-  exports2.number = number;
-  function error(value) {
-    return value instanceof Error;
-  }
-  exports2.error = error;
-  function func(value) {
-    return typeof value === "function";
-  }
-  exports2.func = func;
-  function array(value) {
-    return Array.isArray(value);
-  }
-  exports2.array = array;
-  function stringArray(value) {
-    return array(value) && value.every((elem) => string(elem));
-  }
-  exports2.stringArray = stringArray;
-  function typedArray(value, check) {
-    return Array.isArray(value) && value.every(check);
-  }
-  exports2.typedArray = typedArray;
-  function thenable(value) {
-    return value && func(value.then);
-  }
-  exports2.thenable = thenable;
-  function asPromise(value) {
-    if (value instanceof Promise) {
-      return value;
-    } else if (thenable(value)) {
-      return new Promise((resolve, reject) => {
-        value.then((resolved) => resolve(resolved), (error2) => reject(error2));
-      });
-    } else {
-      return Promise.resolve(value);
-    }
-  }
-  exports2.asPromise = asPromise;
-});
-
-// node_modules/vscode-languageclient/lib/protocolCompletionItem.js
-var require_protocolCompletionItem = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var code = require("vscode");
-  var ProtocolCompletionItem = class extends code.CompletionItem {
-    constructor(label) {
-      super(label);
-    }
-  };
-  exports2.default = ProtocolCompletionItem;
-});
-
-// node_modules/vscode-languageclient/lib/protocolCodeLens.js
-var require_protocolCodeLens = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var code = require("vscode");
-  var ProtocolCodeLens = class extends code.CodeLens {
-    constructor(range) {
-      super(range);
-    }
-  };
-  exports2.default = ProtocolCodeLens;
-});
-
-// node_modules/vscode-languageclient/lib/protocolDocumentLink.js
-var require_protocolDocumentLink = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var code = require("vscode");
-  var ProtocolDocumentLink = class extends code.DocumentLink {
-    constructor(range, target) {
-      super(range, target);
-    }
-  };
-  exports2.default = ProtocolDocumentLink;
-});
-
-// node_modules/vscode-languageclient/lib/codeConverter.js
-var require_codeConverter = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var code = require("vscode");
-  var proto = require_main3();
-  var Is = require_is3();
-  var protocolCompletionItem_1 = require_protocolCompletionItem();
-  var protocolCodeLens_1 = require_protocolCodeLens();
-  var protocolDocumentLink_1 = require_protocolDocumentLink();
-  function createConverter(uriConverter) {
-    const nullConverter = (value) => value.toString();
-    const _uriConverter = uriConverter || nullConverter;
-    function asUri(value) {
-      return _uriConverter(value);
-    }
-    function asTextDocumentIdentifier(textDocument) {
-      return {
-        uri: _uriConverter(textDocument.uri)
-      };
-    }
-    function asVersionedTextDocumentIdentifier(textDocument) {
-      return {
-        uri: _uriConverter(textDocument.uri),
-        version: textDocument.version
-      };
-    }
-    function asOpenTextDocumentParams(textDocument) {
-      return {
-        textDocument: {
-          uri: _uriConverter(textDocument.uri),
-          languageId: textDocument.languageId,
-          version: textDocument.version,
-          text: textDocument.getText()
-        }
-      };
-    }
-    function isTextDocumentChangeEvent(value) {
-      let candidate = value;
-      return !!candidate.document && !!candidate.contentChanges;
-    }
-    function isTextDocument(value) {
-      let candidate = value;
-      return !!candidate.uri && !!candidate.version;
-    }
-    function asChangeTextDocumentParams(arg) {
-      if (isTextDocument(arg)) {
-        let result = {
-          textDocument: {
-            uri: _uriConverter(arg.uri),
-            version: arg.version
-          },
-          contentChanges: [{text: arg.getText()}]
-        };
-        return result;
-      } else if (isTextDocumentChangeEvent(arg)) {
-        let document = arg.document;
-        let result = {
-          textDocument: {
-            uri: _uriConverter(document.uri),
-            version: document.version
-          },
-          contentChanges: arg.contentChanges.map((change) => {
-            let range = change.range;
-            return {
-              range: {
-                start: {line: range.start.line, character: range.start.character},
-                end: {line: range.end.line, character: range.end.character}
-              },
-              rangeLength: change.rangeLength,
-              text: change.text
-            };
-          })
-        };
-        return result;
-      } else {
-        throw Error("Unsupported text document change parameter");
-      }
-    }
-    function asCloseTextDocumentParams(textDocument) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument)
-      };
-    }
-    function asSaveTextDocumentParams(textDocument, includeContent = false) {
-      let result = {
-        textDocument: asVersionedTextDocumentIdentifier(textDocument)
-      };
-      if (includeContent) {
-        result.text = textDocument.getText();
-      }
-      return result;
-    }
-    function asTextDocumentSaveReason(reason) {
-      switch (reason) {
-        case code.TextDocumentSaveReason.Manual:
-          return proto.TextDocumentSaveReason.Manual;
-        case code.TextDocumentSaveReason.AfterDelay:
-          return proto.TextDocumentSaveReason.AfterDelay;
-        case code.TextDocumentSaveReason.FocusOut:
-          return proto.TextDocumentSaveReason.FocusOut;
-      }
-      return proto.TextDocumentSaveReason.Manual;
-    }
-    function asWillSaveTextDocumentParams(event) {
-      return {
-        textDocument: asTextDocumentIdentifier(event.document),
-        reason: asTextDocumentSaveReason(event.reason)
-      };
-    }
-    function asTextDocumentPositionParams(textDocument, position) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument),
-        position: asWorkerPosition(position)
-      };
-    }
-    function asCompletionTriggerKind(triggerKind) {
-      switch (triggerKind) {
-        case code.CompletionTriggerKind.TriggerCharacter:
-          return proto.CompletionTriggerKind.TriggerCharacter;
-        case code.CompletionTriggerKind.TriggerForIncompleteCompletions:
-          return proto.CompletionTriggerKind.TriggerForIncompleteCompletions;
-        default:
-          return proto.CompletionTriggerKind.Invoked;
-      }
-    }
-    function asCompletionParams(textDocument, position, context) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument),
-        position: asWorkerPosition(position),
-        context: {
-          triggerKind: asCompletionTriggerKind(context.triggerKind),
-          triggerCharacter: context.triggerCharacter
-        }
-      };
-    }
-    function asSignatureHelpTriggerKind(triggerKind) {
-      switch (triggerKind) {
-        case code.SignatureHelpTriggerKind.Invoke:
-          return proto.SignatureHelpTriggerKind.Invoked;
-        case code.SignatureHelpTriggerKind.TriggerCharacter:
-          return proto.SignatureHelpTriggerKind.TriggerCharacter;
-        case code.SignatureHelpTriggerKind.ContentChange:
-          return proto.SignatureHelpTriggerKind.ContentChange;
-      }
-    }
-    function asParameterInformation(value) {
-      return {
-        label: value.label
-      };
-    }
-    function asParameterInformations(values) {
-      return values.map(asParameterInformation);
-    }
-    function asSignatureInformation(value) {
-      return {
-        label: value.label,
-        parameters: asParameterInformations(value.parameters)
-      };
-    }
-    function asSignatureInformations(values) {
-      return values.map(asSignatureInformation);
-    }
-    function asSignatureHelp(value) {
-      if (value === void 0) {
-        return value;
-      }
-      return {
-        signatures: asSignatureInformations(value.signatures),
-        activeSignature: value.activeSignature,
-        activeParameter: value.activeParameter
-      };
-    }
-    function asSignatureHelpParams(textDocument, position, context) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument),
-        position: asWorkerPosition(position),
-        context: {
-          isRetrigger: context.isRetrigger,
-          triggerCharacter: context.triggerCharacter,
-          triggerKind: asSignatureHelpTriggerKind(context.triggerKind),
-          activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp)
-        }
-      };
-    }
-    function asWorkerPosition(position) {
-      return {line: position.line, character: position.character};
-    }
-    function asPosition(value) {
-      if (value === void 0 || value === null) {
-        return value;
-      }
-      return {line: value.line, character: value.character};
-    }
-    function asPositions(value) {
-      let result = [];
-      for (let elem of value) {
-        result.push(asPosition(elem));
-      }
-      return result;
-    }
-    function isInsertReplace(value) {
-      const candidate = value;
-      return candidate && !!candidate.inserting && !!candidate.replacing;
-    }
-    function asRange(value) {
-      if (value === void 0 || value === null) {
-        return value;
-      }
-      if (isInsertReplace(value)) {
-        throw new Error(`Receving unknown insert replace range.`);
-      }
-      return {start: asPosition(value.start), end: asPosition(value.end)};
-    }
-    function asLocation(value) {
-      if (value === void 0 || value === null) {
-        return value;
-      }
-      return proto.Location.create(asUri(value.uri), asRange(value.range));
-    }
-    function asDiagnosticSeverity(value) {
-      switch (value) {
-        case code.DiagnosticSeverity.Error:
-          return proto.DiagnosticSeverity.Error;
-        case code.DiagnosticSeverity.Warning:
-          return proto.DiagnosticSeverity.Warning;
-        case code.DiagnosticSeverity.Information:
-          return proto.DiagnosticSeverity.Information;
-        case code.DiagnosticSeverity.Hint:
-          return proto.DiagnosticSeverity.Hint;
-      }
-    }
-    function asDiagnosticTags(tags) {
-      if (!tags) {
-        return void 0;
-      }
-      let result = [];
-      for (let tag of tags) {
-        let converted = asDiagnosticTag(tag);
-        if (converted !== void 0) {
-          result.push(converted);
-        }
-      }
-      return result.length > 0 ? result : void 0;
-    }
-    function asDiagnosticTag(tag) {
-      switch (tag) {
-        case code.DiagnosticTag.Unnecessary:
-          return proto.DiagnosticTag.Unnecessary;
-        case code.DiagnosticTag.Deprecated:
-          return proto.DiagnosticTag.Deprecated;
-        default:
-          return void 0;
-      }
-    }
-    function asRelatedInformation(item) {
-      return {
-        message: item.message,
-        location: asLocation(item.location)
-      };
-    }
-    function asRelatedInformations(items) {
-      return items.map(asRelatedInformation);
-    }
-    function asDiagnostic(item) {
-      let result = proto.Diagnostic.create(asRange(item.range), item.message);
-      if (Is.number(item.severity)) {
-        result.severity = asDiagnosticSeverity(item.severity);
-      }
-      if (Is.number(item.code) || Is.string(item.code)) {
-        result.code = item.code;
-      }
-      if (Array.isArray(item.tags)) {
-        result.tags = asDiagnosticTags(item.tags);
-      }
-      if (item.relatedInformation) {
-        result.relatedInformation = asRelatedInformations(item.relatedInformation);
-      }
-      if (item.source) {
-        result.source = item.source;
-      }
-      return result;
-    }
-    function asDiagnostics(items) {
-      if (items === void 0 || items === null) {
-        return items;
-      }
-      return items.map(asDiagnostic);
-    }
-    function asDocumentation(format, documentation) {
-      switch (format) {
-        case "$string":
-          return documentation;
-        case proto.MarkupKind.PlainText:
-          return {kind: format, value: documentation};
-        case proto.MarkupKind.Markdown:
-          return {kind: format, value: documentation.value};
-        default:
-          return `Unsupported Markup content received. Kind is: ${format}`;
-      }
-    }
-    function asCompletionItemTag(tag) {
-      switch (tag) {
-        case code.CompletionItemTag.Deprecated:
-          return proto.CompletionItemTag.Deprecated;
-      }
-      return void 0;
-    }
-    function asCompletionItemTags(tags) {
-      if (tags === void 0) {
-        return tags;
-      }
-      const result = [];
-      for (let tag of tags) {
-        const converted = asCompletionItemTag(tag);
-        if (converted !== void 0) {
-          result.push(converted);
-        }
-      }
-      return result;
-    }
-    function asCompletionItemKind(value, original) {
-      if (original !== void 0) {
-        return original;
-      }
-      return value + 1;
-    }
-    function asCompletionItem(item) {
-      let result = {label: item.label};
-      let protocolItem = item instanceof protocolCompletionItem_1.default ? item : void 0;
-      if (item.detail) {
-        result.detail = item.detail;
-      }
-      if (item.documentation) {
-        if (!protocolItem || protocolItem.documentationFormat === "$string") {
-          result.documentation = item.documentation;
-        } else {
-          result.documentation = asDocumentation(protocolItem.documentationFormat, item.documentation);
-        }
-      }
-      if (item.filterText) {
-        result.filterText = item.filterText;
-      }
-      fillPrimaryInsertText(result, item);
-      if (Is.number(item.kind)) {
-        result.kind = asCompletionItemKind(item.kind, protocolItem && protocolItem.originalItemKind);
-      }
-      if (item.sortText) {
-        result.sortText = item.sortText;
-      }
-      if (item.additionalTextEdits) {
-        result.additionalTextEdits = asTextEdits(item.additionalTextEdits);
-      }
-      if (item.commitCharacters) {
-        result.commitCharacters = item.commitCharacters.slice();
-      }
-      if (item.command) {
-        result.command = asCommand(item.command);
-      }
-      if (item.preselect === true || item.preselect === false) {
-        result.preselect = item.preselect;
-      }
-      const tags = asCompletionItemTags(item.tags);
-      if (protocolItem) {
-        if (protocolItem.data !== void 0) {
-          result.data = protocolItem.data;
-        }
-        if (protocolItem.deprecated === true || protocolItem.deprecated === false) {
-          if (protocolItem.deprecated === true && tags !== void 0 && tags.length > 0) {
-            const index = tags.indexOf(code.CompletionItemTag.Deprecated);
-            if (index !== -1) {
-              tags.splice(index, 1);
-            }
-          }
-          result.deprecated = protocolItem.deprecated;
-        }
-      }
-      if (tags !== void 0 && tags.length > 0) {
-        result.tags = tags;
-      }
-      return result;
-    }
-    function fillPrimaryInsertText(target, source) {
-      let format = proto.InsertTextFormat.PlainText;
-      let text = void 0;
-      let range = void 0;
-      if (source.textEdit) {
-        text = source.textEdit.newText;
-        range = asRange(source.textEdit.range);
-      } else if (source.insertText instanceof code.SnippetString) {
-        format = proto.InsertTextFormat.Snippet;
-        text = source.insertText.value;
-      } else {
-        text = source.insertText;
-      }
-      if (source.range) {
-        range = asRange(source.range);
-      }
-      target.insertTextFormat = format;
-      if (source.fromEdit && text !== void 0 && range !== void 0) {
-        target.textEdit = {newText: text, range};
-      } else {
-        target.insertText = text;
-      }
-    }
-    function asTextEdit(edit) {
-      return {range: asRange(edit.range), newText: edit.newText};
-    }
-    function asTextEdits(edits) {
-      if (edits === void 0 || edits === null) {
-        return edits;
-      }
-      return edits.map(asTextEdit);
-    }
-    function asSymbolKind(item) {
-      if (item <= code.SymbolKind.TypeParameter) {
-        return item + 1;
-      }
-      return proto.SymbolKind.Property;
-    }
-    function asSymbolTag(item) {
-      return item;
-    }
-    function asSymbolTags(items) {
-      return items.map(asSymbolTag);
-    }
-    function asReferenceParams(textDocument, position, options) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument),
-        position: asWorkerPosition(position),
-        context: {includeDeclaration: options.includeDeclaration}
-      };
-    }
-    function asCodeActionContext(context) {
-      if (context === void 0 || context === null) {
-        return context;
-      }
-      let only;
-      if (context.only && Is.string(context.only.value)) {
-        only = [context.only.value];
-      }
-      return proto.CodeActionContext.create(asDiagnostics(context.diagnostics), only);
-    }
-    function asCommand(item) {
-      let result = proto.Command.create(item.title, item.command);
-      if (item.arguments) {
-        result.arguments = item.arguments;
-      }
-      return result;
-    }
-    function asCodeLens(item) {
-      let result = proto.CodeLens.create(asRange(item.range));
-      if (item.command) {
-        result.command = asCommand(item.command);
-      }
-      if (item instanceof protocolCodeLens_1.default) {
-        if (item.data) {
-          result.data = item.data;
-        }
-      }
-      return result;
-    }
-    function asFormattingOptions(item) {
-      return {tabSize: item.tabSize, insertSpaces: item.insertSpaces};
-    }
-    function asDocumentSymbolParams(textDocument) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument)
-      };
-    }
-    function asCodeLensParams(textDocument) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument)
-      };
-    }
-    function asDocumentLink(item) {
-      let result = proto.DocumentLink.create(asRange(item.range));
-      if (item.target) {
-        result.target = asUri(item.target);
-      }
-      if (item.tooltip !== void 0) {
-        result.tooltip = item.tooltip;
-      }
-      let protocolItem = item instanceof protocolDocumentLink_1.default ? item : void 0;
-      if (protocolItem && protocolItem.data) {
-        result.data = protocolItem.data;
-      }
-      return result;
-    }
-    function asDocumentLinkParams(textDocument) {
-      return {
-        textDocument: asTextDocumentIdentifier(textDocument)
-      };
-    }
-    return {
-      asUri,
-      asTextDocumentIdentifier,
-      asVersionedTextDocumentIdentifier,
-      asOpenTextDocumentParams,
-      asChangeTextDocumentParams,
-      asCloseTextDocumentParams,
-      asSaveTextDocumentParams,
-      asWillSaveTextDocumentParams,
-      asTextDocumentPositionParams,
-      asCompletionParams,
-      asSignatureHelpParams,
-      asWorkerPosition,
-      asRange,
-      asPosition,
-      asPositions,
-      asLocation,
-      asDiagnosticSeverity,
-      asDiagnosticTag,
-      asDiagnostic,
-      asDiagnostics,
-      asCompletionItem,
-      asTextEdit,
-      asSymbolKind,
-      asSymbolTag,
-      asSymbolTags,
-      asReferenceParams,
-      asCodeActionContext,
-      asCommand,
-      asCodeLens,
-      asFormattingOptions,
-      asDocumentSymbolParams,
-      asCodeLensParams,
-      asDocumentLink,
-      asDocumentLinkParams
-    };
-  }
-  exports2.createConverter = createConverter;
-});
-
-// node_modules/vscode-languageclient/lib/protocolConverter.js
-var require_protocolConverter = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var code = require("vscode");
-  var ls = require_main3();
-  var Is = require_is3();
-  var protocolCompletionItem_1 = require_protocolCompletionItem();
-  var protocolCodeLens_1 = require_protocolCodeLens();
-  var protocolDocumentLink_1 = require_protocolDocumentLink();
-  var CodeBlock;
-  (function(CodeBlock2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && Is.string(candidate.language) && Is.string(candidate.value);
-    }
-    CodeBlock2.is = is;
-  })(CodeBlock || (CodeBlock = {}));
-  function createConverter(uriConverter) {
-    const nullConverter = (value) => code.Uri.parse(value);
-    const _uriConverter = uriConverter || nullConverter;
-    function asUri(value) {
-      return _uriConverter(value);
-    }
-    function asDiagnostics(diagnostics) {
-      return diagnostics.map(asDiagnostic);
-    }
-    function asDiagnostic(diagnostic) {
-      let result = new code.Diagnostic(asRange(diagnostic.range), diagnostic.message, asDiagnosticSeverity(diagnostic.severity));
-      if (Is.number(diagnostic.code) || Is.string(diagnostic.code)) {
-        result.code = diagnostic.code;
-      }
-      if (diagnostic.source) {
-        result.source = diagnostic.source;
-      }
-      if (diagnostic.relatedInformation) {
-        result.relatedInformation = asRelatedInformation(diagnostic.relatedInformation);
-      }
-      if (Array.isArray(diagnostic.tags)) {
-        result.tags = asDiagnosticTags(diagnostic.tags);
-      }
-      return result;
-    }
-    function asRelatedInformation(relatedInformation) {
-      return relatedInformation.map(asDiagnosticRelatedInformation);
-    }
-    function asDiagnosticRelatedInformation(information) {
-      return new code.DiagnosticRelatedInformation(asLocation(information.location), information.message);
-    }
-    function asDiagnosticTags(tags) {
-      if (!tags) {
-        return void 0;
-      }
-      let result = [];
-      for (let tag of tags) {
-        let converted = asDiagnosticTag(tag);
-        if (converted !== void 0) {
-          result.push(converted);
-        }
-      }
-      return result.length > 0 ? result : void 0;
-    }
-    function asDiagnosticTag(tag) {
-      switch (tag) {
-        case ls.DiagnosticTag.Unnecessary:
-          return code.DiagnosticTag.Unnecessary;
-        case ls.DiagnosticTag.Deprecated:
-          return code.DiagnosticTag.Deprecated;
-        default:
-          return void 0;
-      }
-    }
-    function asPosition(value) {
-      if (!value) {
-        return void 0;
-      }
-      return new code.Position(value.line, value.character);
-    }
-    function asRange(value) {
-      if (!value) {
-        return void 0;
-      }
-      return new code.Range(asPosition(value.start), asPosition(value.end));
-    }
-    function asRanges(value) {
-      return value.map((value2) => asRange(value2));
-    }
-    function asDiagnosticSeverity(value) {
-      if (value === void 0 || value === null) {
-        return code.DiagnosticSeverity.Error;
-      }
-      switch (value) {
-        case ls.DiagnosticSeverity.Error:
-          return code.DiagnosticSeverity.Error;
-        case ls.DiagnosticSeverity.Warning:
-          return code.DiagnosticSeverity.Warning;
-        case ls.DiagnosticSeverity.Information:
-          return code.DiagnosticSeverity.Information;
-        case ls.DiagnosticSeverity.Hint:
-          return code.DiagnosticSeverity.Hint;
-      }
-      return code.DiagnosticSeverity.Error;
-    }
-    function asHoverContent(value) {
-      if (Is.string(value)) {
-        return new code.MarkdownString(value);
-      } else if (CodeBlock.is(value)) {
-        let result = new code.MarkdownString();
-        return result.appendCodeblock(value.value, value.language);
-      } else if (Array.isArray(value)) {
-        let result = [];
-        for (let element of value) {
-          let item = new code.MarkdownString();
-          if (CodeBlock.is(element)) {
-            item.appendCodeblock(element.value, element.language);
-          } else {
-            item.appendMarkdown(element);
-          }
-          result.push(item);
-        }
-        return result;
-      } else {
-        let result;
-        switch (value.kind) {
-          case ls.MarkupKind.Markdown:
-            return new code.MarkdownString(value.value);
-          case ls.MarkupKind.PlainText:
-            result = new code.MarkdownString();
-            result.appendText(value.value);
-            return result;
-          default:
-            result = new code.MarkdownString();
-            result.appendText(`Unsupported Markup content received. Kind is: ${value.kind}`);
-            return result;
-        }
-      }
-    }
-    function asDocumentation(value) {
-      if (Is.string(value)) {
-        return value;
-      } else {
-        switch (value.kind) {
-          case ls.MarkupKind.Markdown:
-            return new code.MarkdownString(value.value);
-          case ls.MarkupKind.PlainText:
-            return value.value;
-          default:
-            return `Unsupported Markup content received. Kind is: ${value.kind}`;
-        }
-      }
-    }
-    function asHover(hover) {
-      if (!hover) {
-        return void 0;
-      }
-      return new code.Hover(asHoverContent(hover.contents), asRange(hover.range));
-    }
-    function asCompletionResult(result) {
-      if (!result) {
-        return void 0;
-      }
-      if (Array.isArray(result)) {
-        let items = result;
-        return items.map(asCompletionItem);
-      }
-      let list = result;
-      return new code.CompletionList(list.items.map(asCompletionItem), list.isIncomplete);
-    }
-    function asCompletionItemKind(value) {
-      if (ls.CompletionItemKind.Text <= value && value <= ls.CompletionItemKind.TypeParameter) {
-        return [value - 1, void 0];
-      }
-      return [code.CompletionItemKind.Text, value];
-    }
-    function asCompletionItemTag(tag) {
-      switch (tag) {
-        case ls.CompletionItemTag.Deprecated:
-          return code.CompletionItemTag.Deprecated;
-      }
-      return void 0;
-    }
-    function asCompletionItemTags(tags) {
-      if (tags === void 0 || tags === null) {
-        return [];
-      }
-      const result = [];
-      for (let tag of tags) {
-        const converted = asCompletionItemTag(tag);
-        if (converted !== void 0) {
-          result.push(converted);
-        }
-      }
-      return result;
-    }
-    function asCompletionItem(item) {
-      let tags = asCompletionItemTags(item.tags);
-      let result = new protocolCompletionItem_1.default(item.label);
-      if (item.detail) {
-        result.detail = item.detail;
-      }
-      if (item.documentation) {
-        result.documentation = asDocumentation(item.documentation);
-        result.documentationFormat = Is.string(item.documentation) ? "$string" : item.documentation.kind;
-      }
-      if (item.filterText) {
-        result.filterText = item.filterText;
-      }
-      let insertText = asCompletionInsertText(item);
-      if (insertText) {
-        result.insertText = insertText.text;
-        result.range = insertText.range;
-        result.fromEdit = insertText.fromEdit;
-      }
-      if (Is.number(item.kind)) {
-        let [itemKind, original] = asCompletionItemKind(item.kind);
-        result.kind = itemKind;
-        if (original) {
-          result.originalItemKind = original;
-        }
-      }
-      if (item.sortText) {
-        result.sortText = item.sortText;
-      }
-      if (item.additionalTextEdits) {
-        result.additionalTextEdits = asTextEdits(item.additionalTextEdits);
-      }
-      if (Is.stringArray(item.commitCharacters)) {
-        result.commitCharacters = item.commitCharacters.slice();
-      }
-      if (item.command) {
-        result.command = asCommand(item.command);
-      }
-      if (item.deprecated === true || item.deprecated === false) {
-        result.deprecated = item.deprecated;
-        if (item.deprecated === true) {
-          tags.push(code.CompletionItemTag.Deprecated);
-        }
-      }
-      if (item.preselect === true || item.preselect === false) {
-        result.preselect = item.preselect;
-      }
-      if (item.data !== void 0) {
-        result.data = item.data;
-      }
-      if (tags.length > 0) {
-        result.tags = tags;
-      }
-      return result;
-    }
-    function asCompletionInsertText(item) {
-      if (item.textEdit) {
-        if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {
-          return {text: new code.SnippetString(item.textEdit.newText), range: asRange(item.textEdit.range), fromEdit: true};
-        } else {
-          return {text: item.textEdit.newText, range: asRange(item.textEdit.range), fromEdit: true};
-        }
-      } else if (item.insertText) {
-        if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {
-          return {text: new code.SnippetString(item.insertText), fromEdit: false};
-        } else {
-          return {text: item.insertText, fromEdit: false};
-        }
-      } else {
-        return void 0;
-      }
-    }
-    function asTextEdit(edit) {
-      if (!edit) {
-        return void 0;
-      }
-      return new code.TextEdit(asRange(edit.range), edit.newText);
-    }
-    function asTextEdits(items) {
-      if (!items) {
-        return void 0;
-      }
-      return items.map(asTextEdit);
-    }
-    function asSignatureHelp(item) {
-      if (!item) {
-        return void 0;
-      }
-      let result = new code.SignatureHelp();
-      if (Is.number(item.activeSignature)) {
-        result.activeSignature = item.activeSignature;
-      } else {
-        result.activeSignature = 0;
-      }
-      if (Is.number(item.activeParameter)) {
-        result.activeParameter = item.activeParameter;
-      } else {
-        result.activeParameter = 0;
-      }
-      if (item.signatures) {
-        result.signatures = asSignatureInformations(item.signatures);
-      }
-      return result;
-    }
-    function asSignatureInformations(items) {
-      return items.map(asSignatureInformation);
-    }
-    function asSignatureInformation(item) {
-      let result = new code.SignatureInformation(item.label);
-      if (item.documentation) {
-        result.documentation = asDocumentation(item.documentation);
-      }
-      if (item.parameters) {
-        result.parameters = asParameterInformations(item.parameters);
-      }
-      return result;
-    }
-    function asParameterInformations(item) {
-      return item.map(asParameterInformation);
-    }
-    function asParameterInformation(item) {
-      let result = new code.ParameterInformation(item.label);
-      if (item.documentation) {
-        result.documentation = asDocumentation(item.documentation);
-      }
-      return result;
-    }
-    function asLocation(item) {
-      if (!item) {
-        return void 0;
-      }
-      return new code.Location(_uriConverter(item.uri), asRange(item.range));
-    }
-    function asDeclarationResult(item) {
-      if (!item) {
-        return void 0;
-      }
-      return asLocationResult(item);
-    }
-    function asDefinitionResult(item) {
-      if (!item) {
-        return void 0;
-      }
-      return asLocationResult(item);
-    }
-    function asLocationLink(item) {
-      if (!item) {
-        return void 0;
-      }
-      let result = {
-        targetUri: _uriConverter(item.targetUri),
-        targetRange: asRange(item.targetSelectionRange),
-        originSelectionRange: asRange(item.originSelectionRange),
-        targetSelectionRange: asRange(item.targetSelectionRange)
-      };
-      if (!result.targetSelectionRange) {
-        throw new Error(`targetSelectionRange must not be undefined or null`);
-      }
-      return result;
-    }
-    function asLocationResult(item) {
-      if (!item) {
-        return void 0;
-      }
-      if (Is.array(item)) {
-        if (item.length === 0) {
-          return [];
-        } else if (ls.LocationLink.is(item[0])) {
-          let links = item;
-          return links.map((link) => asLocationLink(link));
-        } else {
-          let locations = item;
-          return locations.map((location) => asLocation(location));
-        }
-      } else if (ls.LocationLink.is(item)) {
-        return [asLocationLink(item)];
-      } else {
-        return asLocation(item);
-      }
-    }
-    function asReferences(values) {
-      if (!values) {
-        return void 0;
-      }
-      return values.map((location) => asLocation(location));
-    }
-    function asDocumentHighlights(values) {
-      if (!values) {
-        return void 0;
-      }
-      return values.map(asDocumentHighlight);
-    }
-    function asDocumentHighlight(item) {
-      let result = new code.DocumentHighlight(asRange(item.range));
-      if (Is.number(item.kind)) {
-        result.kind = asDocumentHighlightKind(item.kind);
-      }
-      return result;
-    }
-    function asDocumentHighlightKind(item) {
-      switch (item) {
-        case ls.DocumentHighlightKind.Text:
-          return code.DocumentHighlightKind.Text;
-        case ls.DocumentHighlightKind.Read:
-          return code.DocumentHighlightKind.Read;
-        case ls.DocumentHighlightKind.Write:
-          return code.DocumentHighlightKind.Write;
-      }
-      return code.DocumentHighlightKind.Text;
-    }
-    function asSymbolInformations(values, uri) {
-      if (!values) {
-        return void 0;
-      }
-      return values.map((information) => asSymbolInformation(information, uri));
-    }
-    function asSymbolKind(item) {
-      if (item <= ls.SymbolKind.TypeParameter) {
-        return item - 1;
-      }
-      return code.SymbolKind.Property;
-    }
-    function asSymbolTag(value) {
-      return value;
-    }
-    function asSymbolTags(items) {
-      if (items === void 0 || items === null) {
-        return void 0;
-      }
-      return items.map(asSymbolTag);
-    }
-    function asSymbolInformation(item, uri) {
-      let result = new code.SymbolInformation(item.name, asSymbolKind(item.kind), asRange(item.location.range), item.location.uri ? _uriConverter(item.location.uri) : uri);
-      if (item.containerName) {
-        result.containerName = item.containerName;
-      }
-      return result;
-    }
-    function asDocumentSymbols(values) {
-      if (values === void 0 || values === null) {
-        return void 0;
-      }
-      return values.map(asDocumentSymbol);
-    }
-    function asDocumentSymbol(value) {
-      let result = new code.DocumentSymbol(value.name, value.detail || "", asSymbolKind(value.kind), asRange(value.range), asRange(value.selectionRange));
-      if (value.children !== void 0 && value.children.length > 0) {
-        let children = [];
-        for (let child of value.children) {
-          children.push(asDocumentSymbol(child));
-        }
-        result.children = children;
-      }
-      return result;
-    }
-    function asCommand(item) {
-      let result = {title: item.title, command: item.command};
-      if (item.arguments) {
-        result.arguments = item.arguments;
-      }
-      return result;
-    }
-    function asCommands(items) {
-      if (!items) {
-        return void 0;
-      }
-      return items.map(asCommand);
-    }
-    const kindMapping = new Map();
-    kindMapping.set(ls.CodeActionKind.Empty, code.CodeActionKind.Empty);
-    kindMapping.set(ls.CodeActionKind.QuickFix, code.CodeActionKind.QuickFix);
-    kindMapping.set(ls.CodeActionKind.Refactor, code.CodeActionKind.Refactor);
-    kindMapping.set(ls.CodeActionKind.RefactorExtract, code.CodeActionKind.RefactorExtract);
-    kindMapping.set(ls.CodeActionKind.RefactorInline, code.CodeActionKind.RefactorInline);
-    kindMapping.set(ls.CodeActionKind.RefactorRewrite, code.CodeActionKind.RefactorRewrite);
-    kindMapping.set(ls.CodeActionKind.Source, code.CodeActionKind.Source);
-    kindMapping.set(ls.CodeActionKind.SourceOrganizeImports, code.CodeActionKind.SourceOrganizeImports);
-    function asCodeActionKind(item) {
-      if (item === void 0 || item === null) {
-        return void 0;
-      }
-      let result = kindMapping.get(item);
-      if (result) {
-        return result;
-      }
-      let parts = item.split(".");
-      result = code.CodeActionKind.Empty;
-      for (let part of parts) {
-        result = result.append(part);
-      }
-      return result;
-    }
-    function asCodeActionKinds(items) {
-      if (items === void 0 || items === null) {
-        return void 0;
-      }
-      return items.map((kind) => asCodeActionKind(kind));
-    }
-    function asCodeAction(item) {
-      if (item === void 0 || item === null) {
-        return void 0;
-      }
-      let result = new code.CodeAction(item.title);
-      if (item.kind !== void 0) {
-        result.kind = asCodeActionKind(item.kind);
-      }
-      if (item.diagnostics) {
-        result.diagnostics = asDiagnostics(item.diagnostics);
-      }
-      if (item.edit) {
-        result.edit = asWorkspaceEdit(item.edit);
-      }
-      if (item.command) {
-        result.command = asCommand(item.command);
-      }
-      if (item.isPreferred !== void 0) {
-        result.isPreferred = item.isPreferred;
-      }
-      return result;
-    }
-    function asCodeLens(item) {
-      if (!item) {
-        return void 0;
-      }
-      let result = new protocolCodeLens_1.default(asRange(item.range));
-      if (item.command) {
-        result.command = asCommand(item.command);
-      }
-      if (item.data !== void 0 && item.data !== null) {
-        result.data = item.data;
-      }
-      return result;
-    }
-    function asCodeLenses(items) {
-      if (!items) {
-        return void 0;
-      }
-      return items.map((codeLens) => asCodeLens(codeLens));
-    }
-    function asWorkspaceEdit(item) {
-      if (!item) {
-        return void 0;
-      }
-      let result = new code.WorkspaceEdit();
-      if (item.documentChanges) {
-        item.documentChanges.forEach((change) => {
-          if (ls.CreateFile.is(change)) {
-            result.createFile(_uriConverter(change.uri), change.options);
-          } else if (ls.RenameFile.is(change)) {
-            result.renameFile(_uriConverter(change.oldUri), _uriConverter(change.newUri), change.options);
-          } else if (ls.DeleteFile.is(change)) {
-            result.deleteFile(_uriConverter(change.uri), change.options);
-          } else if (ls.TextDocumentEdit.is(change)) {
-            result.set(_uriConverter(change.textDocument.uri), asTextEdits(change.edits));
-          } else {
-            console.error(`Unknown workspace edit change received:
-${JSON.stringify(change, void 0, 4)}`);
-          }
-        });
-      } else if (item.changes) {
-        Object.keys(item.changes).forEach((key) => {
-          result.set(_uriConverter(key), asTextEdits(item.changes[key]));
-        });
-      }
-      return result;
-    }
-    function asDocumentLink(item) {
-      let range = asRange(item.range);
-      let target = item.target ? asUri(item.target) : void 0;
-      let link = new protocolDocumentLink_1.default(range, target);
-      if (item.tooltip !== void 0) {
-        link.tooltip = item.tooltip;
-      }
-      if (item.data !== void 0 && item.data !== null) {
-        link.data = item.data;
-      }
-      return link;
-    }
-    function asDocumentLinks(items) {
-      if (!items) {
-        return void 0;
-      }
-      return items.map(asDocumentLink);
-    }
-    function asColor(color) {
-      return new code.Color(color.red, color.green, color.blue, color.alpha);
-    }
-    function asColorInformation(ci) {
-      return new code.ColorInformation(asRange(ci.range), asColor(ci.color));
-    }
-    function asColorInformations(colorInformation) {
-      if (Array.isArray(colorInformation)) {
-        return colorInformation.map(asColorInformation);
-      }
-      return void 0;
-    }
-    function asColorPresentation(cp) {
-      let presentation = new code.ColorPresentation(cp.label);
-      presentation.additionalTextEdits = asTextEdits(cp.additionalTextEdits);
-      if (cp.textEdit) {
-        presentation.textEdit = asTextEdit(cp.textEdit);
-      }
-      return presentation;
-    }
-    function asColorPresentations(colorPresentations) {
-      if (Array.isArray(colorPresentations)) {
-        return colorPresentations.map(asColorPresentation);
-      }
-      return void 0;
-    }
-    function asFoldingRangeKind(kind) {
-      if (kind) {
-        switch (kind) {
-          case ls.FoldingRangeKind.Comment:
-            return code.FoldingRangeKind.Comment;
-          case ls.FoldingRangeKind.Imports:
-            return code.FoldingRangeKind.Imports;
-          case ls.FoldingRangeKind.Region:
-            return code.FoldingRangeKind.Region;
-        }
-      }
-      return void 0;
-    }
-    function asFoldingRange(r) {
-      return new code.FoldingRange(r.startLine, r.endLine, asFoldingRangeKind(r.kind));
-    }
-    function asFoldingRanges(foldingRanges) {
-      if (Array.isArray(foldingRanges)) {
-        return foldingRanges.map(asFoldingRange);
-      }
-      return void 0;
-    }
-    function asSelectionRange(selectionRange) {
-      return new code.SelectionRange(asRange(selectionRange.range), selectionRange.parent ? asSelectionRange(selectionRange.parent) : void 0);
-    }
-    function asSelectionRanges(selectionRanges) {
-      if (!Array.isArray(selectionRanges)) {
-        return [];
-      }
-      let result = [];
-      for (let range of selectionRanges) {
-        result.push(asSelectionRange(range));
-      }
-      return result;
-    }
-    return {
-      asUri,
-      asDiagnostics,
-      asDiagnostic,
-      asRange,
-      asRanges,
-      asPosition,
-      asDiagnosticSeverity,
-      asDiagnosticTag,
-      asHover,
-      asCompletionResult,
-      asCompletionItem,
-      asTextEdit,
-      asTextEdits,
-      asSignatureHelp,
-      asSignatureInformations,
-      asSignatureInformation,
-      asParameterInformations,
-      asParameterInformation,
-      asDeclarationResult,
-      asDefinitionResult,
-      asLocation,
-      asReferences,
-      asDocumentHighlights,
-      asDocumentHighlight,
-      asDocumentHighlightKind,
-      asSymbolKind,
-      asSymbolTag,
-      asSymbolTags,
-      asSymbolInformations,
-      asSymbolInformation,
-      asDocumentSymbols,
-      asDocumentSymbol,
-      asCommand,
-      asCommands,
-      asCodeAction,
-      asCodeActionKind,
-      asCodeActionKinds,
-      asCodeLens,
-      asCodeLenses,
-      asWorkspaceEdit,
-      asDocumentLink,
-      asDocumentLinks,
-      asFoldingRangeKind,
-      asFoldingRange,
-      asFoldingRanges,
-      asColor,
-      asColorInformation,
-      asColorInformations,
-      asColorPresentation,
-      asColorPresentations,
-      asSelectionRange,
-      asSelectionRanges
-    };
-  }
-  exports2.createConverter = createConverter;
-});
-
-// node_modules/vscode-languageclient/lib/utils/async.js
-var require_async = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var Delayer = class {
-    constructor(defaultDelay) {
-      this.defaultDelay = defaultDelay;
-      this.timeout = void 0;
-      this.completionPromise = void 0;
-      this.onSuccess = void 0;
-      this.task = void 0;
-    }
-    trigger(task, delay = this.defaultDelay) {
-      this.task = task;
-      if (delay >= 0) {
-        this.cancelTimeout();
-      }
-      if (!this.completionPromise) {
-        this.completionPromise = new Promise((resolve) => {
-          this.onSuccess = resolve;
-        }).then(() => {
-          this.completionPromise = void 0;
-          this.onSuccess = void 0;
-          var result = this.task();
-          this.task = void 0;
-          return result;
-        });
-      }
-      if (delay >= 0 || this.timeout === void 0) {
-        this.timeout = setTimeout(() => {
-          this.timeout = void 0;
-          this.onSuccess(void 0);
-        }, delay >= 0 ? delay : this.defaultDelay);
-      }
-      return this.completionPromise;
-    }
-    forceDelivery() {
-      if (!this.completionPromise) {
-        return void 0;
-      }
-      this.cancelTimeout();
-      let result = this.task();
-      this.completionPromise = void 0;
-      this.onSuccess = void 0;
-      this.task = void 0;
-      return result;
-    }
-    isTriggered() {
-      return this.timeout !== void 0;
-    }
-    cancel() {
-      this.cancelTimeout();
-      this.completionPromise = void 0;
-    }
-    cancelTimeout() {
-      if (this.timeout !== void 0) {
-        clearTimeout(this.timeout);
-        this.timeout = void 0;
-      }
-    }
-  };
-  exports2.Delayer = Delayer;
-});
-
-// node_modules/vscode-languageclient/lib/utils/uuid.js
-var require_uuid = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var ValueUUID = class {
-    constructor(_value) {
-      this._value = _value;
-    }
-    asHex() {
-      return this._value;
-    }
-    equals(other) {
-      return this.asHex() === other.asHex();
-    }
-  };
-  var V4UUID = class extends ValueUUID {
-    constructor() {
-      super([
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        "-",
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        "-",
-        "4",
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        "-",
-        V4UUID._oneOf(V4UUID._timeHighBits),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        "-",
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex(),
-        V4UUID._randomHex()
-      ].join(""));
-    }
-    static _oneOf(array) {
-      return array[Math.floor(array.length * Math.random())];
-    }
-    static _randomHex() {
-      return V4UUID._oneOf(V4UUID._chars);
-    }
-  };
-  V4UUID._chars = ["0", "1", "2", "3", "4", "5", "6", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
-  V4UUID._timeHighBits = ["8", "9", "a", "b"];
-  exports2.empty = new ValueUUID("00000000-0000-0000-0000-000000000000");
-  function v4() {
-    return new V4UUID();
-  }
-  exports2.v4 = v4;
-  var _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
-  function isUUID(value) {
-    return _UUIDPattern.test(value);
-  }
-  exports2.isUUID = isUUID;
-  function parse(value) {
-    if (!isUUID(value)) {
-      throw new Error("invalid uuid");
-    }
-    return new ValueUUID(value);
-  }
-  exports2.parse = parse;
-  function generateUuid() {
-    return v4().asHex();
-  }
-  exports2.generateUuid = generateUuid;
-});
-
-// node_modules/vscode-languageclient/lib/progressPart.js
-var require_progressPart = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var Is = require_is3();
-  var ProgressPart = class {
-    constructor(_client, _token) {
-      this._client = _client;
-      this._token = _token;
-      this._reported = 0;
-      this._disposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {
-        switch (value.kind) {
-          case "begin":
-            this.begin(value);
-            break;
-          case "report":
-            this.report(value);
-            break;
-          case "end":
-            this.done();
-            break;
-        }
-      });
-    }
-    begin(params) {
-      let location = params.cancellable ? vscode_1.ProgressLocation.Notification : vscode_1.ProgressLocation.Window;
-      vscode_1.window.withProgress({location, cancellable: params.cancellable, title: params.title}, async (progress, cancellationToken) => {
-        this._progress = progress;
-        this._infinite = params.percentage === void 0;
-        this._cancellationToken = cancellationToken;
-        this._cancellationToken.onCancellationRequested(() => {
-          this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, {token: this._token});
-        });
-        this.report(params);
-        return new Promise((resolve, reject) => {
-          this._resolve = resolve;
-          this._reject = reject;
-        });
-      });
-    }
-    report(params) {
-      if (this._infinite && Is.string(params.message)) {
-        this._progress.report({message: params.message});
-      } else if (Is.number(params.percentage)) {
-        let percentage = Math.max(0, Math.min(params.percentage, 100));
-        let delta = Math.max(0, percentage - this._reported);
-        this._progress.report({message: params.message, increment: delta});
-        this._reported += delta;
-      }
-    }
-    cancel() {
-      if (this._disposable) {
-        this._disposable.dispose();
-        this._disposable = void 0;
-      }
-      if (this._reject) {
-        this._reject();
-        this._resolve = void 0;
-        this._reject = void 0;
-      }
-    }
-    done() {
-      if (this._disposable) {
-        this._disposable.dispose();
-        this._disposable = void 0;
-      }
-      if (this._resolve) {
-        this._resolve();
-        this._resolve = void 0;
-        this._reject = void 0;
-      }
-    }
-  };
-  exports2.ProgressPart = ProgressPart;
-});
-
-// node_modules/vscode-languageclient/lib/client.js
-var require_client = __commonJS((exports2) => {
-  "use strict";
-  function __export2(m) {
-    for (var p in m)
-      if (!exports2.hasOwnProperty(p))
-        exports2[p] = m[p];
-  }
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var c2p = require_codeConverter();
-  var p2c = require_protocolConverter();
-  var Is = require_is3();
-  var async_1 = require_async();
-  var UUID = require_uuid();
-  var progressPart_1 = require_progressPart();
-  __export2(require_main3());
-  var ConsoleLogger = class {
-    error(message) {
-      console.error(message);
-    }
-    warn(message) {
-      console.warn(message);
-    }
-    info(message) {
-      console.info(message);
-    }
-    log(message) {
-      console.log(message);
-    }
-  };
-  function createConnection(input, output, errorHandler, closeHandler) {
-    let logger = new ConsoleLogger();
-    let connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger);
-    connection.onError((data) => {
-      errorHandler(data[0], data[1], data[2]);
-    });
-    connection.onClose(closeHandler);
-    let result = {
-      listen: () => connection.listen(),
-      sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
-      onRequest: (type, handler) => connection.onRequest(Is.string(type) ? type : type.method, handler),
-      sendNotification: (type, params) => connection.sendNotification(Is.string(type) ? type : type.method, params),
-      onNotification: (type, handler) => connection.onNotification(Is.string(type) ? type : type.method, handler),
-      onProgress: connection.onProgress,
-      sendProgress: connection.sendProgress,
-      trace: (value, tracer, sendNotificationOrTraceOptions) => {
-        const defaultTraceOptions = {
-          sendNotification: false,
-          traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text
-        };
-        if (sendNotificationOrTraceOptions === void 0) {
-          connection.trace(value, tracer, defaultTraceOptions);
-        } else if (Is.boolean(sendNotificationOrTraceOptions)) {
-          connection.trace(value, tracer, sendNotificationOrTraceOptions);
-        } else {
-          connection.trace(value, tracer, sendNotificationOrTraceOptions);
-        }
-      },
-      initialize: (params) => connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params),
-      shutdown: () => connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, void 0),
-      exit: () => connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type),
-      onLogMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, handler),
-      onShowMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, handler),
-      onTelemetry: (handler) => connection.onNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, handler),
-      didChangeConfiguration: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, params),
-      didChangeWatchedFiles: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, params),
-      didOpenTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, params),
-      didChangeTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params),
-      didCloseTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, params),
-      didSaveTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, params),
-      onDiagnostics: (handler) => connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, handler),
-      dispose: () => connection.dispose()
-    };
-    return result;
-  }
-  var ErrorAction;
-  (function(ErrorAction2) {
-    ErrorAction2[ErrorAction2["Continue"] = 1] = "Continue";
-    ErrorAction2[ErrorAction2["Shutdown"] = 2] = "Shutdown";
-  })(ErrorAction = exports2.ErrorAction || (exports2.ErrorAction = {}));
-  var CloseAction;
-  (function(CloseAction2) {
-    CloseAction2[CloseAction2["DoNotRestart"] = 1] = "DoNotRestart";
-    CloseAction2[CloseAction2["Restart"] = 2] = "Restart";
-  })(CloseAction = exports2.CloseAction || (exports2.CloseAction = {}));
-  var DefaultErrorHandler = class {
-    constructor(name) {
-      this.name = name;
-      this.restarts = [];
-    }
-    error(_error, _message, count) {
-      if (count && count <= 3) {
-        return ErrorAction.Continue;
-      }
-      return ErrorAction.Shutdown;
-    }
-    closed() {
-      this.restarts.push(Date.now());
-      if (this.restarts.length < 5) {
-        return CloseAction.Restart;
-      } else {
-        let diff = this.restarts[this.restarts.length - 1] - this.restarts[0];
-        if (diff <= 3 * 60 * 1e3) {
-          vscode_1.window.showErrorMessage(`The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`);
-          return CloseAction.DoNotRestart;
-        } else {
-          this.restarts.shift();
-          return CloseAction.Restart;
-        }
-      }
-    }
-  };
-  var RevealOutputChannelOn;
-  (function(RevealOutputChannelOn2) {
-    RevealOutputChannelOn2[RevealOutputChannelOn2["Info"] = 1] = "Info";
-    RevealOutputChannelOn2[RevealOutputChannelOn2["Warn"] = 2] = "Warn";
-    RevealOutputChannelOn2[RevealOutputChannelOn2["Error"] = 3] = "Error";
-    RevealOutputChannelOn2[RevealOutputChannelOn2["Never"] = 4] = "Never";
-  })(RevealOutputChannelOn = exports2.RevealOutputChannelOn || (exports2.RevealOutputChannelOn = {}));
-  var State;
-  (function(State2) {
-    State2[State2["Stopped"] = 1] = "Stopped";
-    State2[State2["Starting"] = 3] = "Starting";
-    State2[State2["Running"] = 2] = "Running";
-  })(State = exports2.State || (exports2.State = {}));
-  var ClientState;
-  (function(ClientState2) {
-    ClientState2[ClientState2["Initial"] = 0] = "Initial";
-    ClientState2[ClientState2["Starting"] = 1] = "Starting";
-    ClientState2[ClientState2["StartFailed"] = 2] = "StartFailed";
-    ClientState2[ClientState2["Running"] = 3] = "Running";
-    ClientState2[ClientState2["Stopping"] = 4] = "Stopping";
-    ClientState2[ClientState2["Stopped"] = 5] = "Stopped";
-  })(ClientState || (ClientState = {}));
-  var SupportedSymbolKinds = [
-    vscode_languageserver_protocol_1.SymbolKind.File,
-    vscode_languageserver_protocol_1.SymbolKind.Module,
-    vscode_languageserver_protocol_1.SymbolKind.Namespace,
-    vscode_languageserver_protocol_1.SymbolKind.Package,
-    vscode_languageserver_protocol_1.SymbolKind.Class,
-    vscode_languageserver_protocol_1.SymbolKind.Method,
-    vscode_languageserver_protocol_1.SymbolKind.Property,
-    vscode_languageserver_protocol_1.SymbolKind.Field,
-    vscode_languageserver_protocol_1.SymbolKind.Constructor,
-    vscode_languageserver_protocol_1.SymbolKind.Enum,
-    vscode_languageserver_protocol_1.SymbolKind.Interface,
-    vscode_languageserver_protocol_1.SymbolKind.Function,
-    vscode_languageserver_protocol_1.SymbolKind.Variable,
-    vscode_languageserver_protocol_1.SymbolKind.Constant,
-    vscode_languageserver_protocol_1.SymbolKind.String,
-    vscode_languageserver_protocol_1.SymbolKind.Number,
-    vscode_languageserver_protocol_1.SymbolKind.Boolean,
-    vscode_languageserver_protocol_1.SymbolKind.Array,
-    vscode_languageserver_protocol_1.SymbolKind.Object,
-    vscode_languageserver_protocol_1.SymbolKind.Key,
-    vscode_languageserver_protocol_1.SymbolKind.Null,
-    vscode_languageserver_protocol_1.SymbolKind.EnumMember,
-    vscode_languageserver_protocol_1.SymbolKind.Struct,
-    vscode_languageserver_protocol_1.SymbolKind.Event,
-    vscode_languageserver_protocol_1.SymbolKind.Operator,
-    vscode_languageserver_protocol_1.SymbolKind.TypeParameter
-  ];
-  var SupportedCompletionItemKinds = [
-    vscode_languageserver_protocol_1.CompletionItemKind.Text,
-    vscode_languageserver_protocol_1.CompletionItemKind.Method,
-    vscode_languageserver_protocol_1.CompletionItemKind.Function,
-    vscode_languageserver_protocol_1.CompletionItemKind.Constructor,
-    vscode_languageserver_protocol_1.CompletionItemKind.Field,
-    vscode_languageserver_protocol_1.CompletionItemKind.Variable,
-    vscode_languageserver_protocol_1.CompletionItemKind.Class,
-    vscode_languageserver_protocol_1.CompletionItemKind.Interface,
-    vscode_languageserver_protocol_1.CompletionItemKind.Module,
-    vscode_languageserver_protocol_1.CompletionItemKind.Property,
-    vscode_languageserver_protocol_1.CompletionItemKind.Unit,
-    vscode_languageserver_protocol_1.CompletionItemKind.Value,
-    vscode_languageserver_protocol_1.CompletionItemKind.Enum,
-    vscode_languageserver_protocol_1.CompletionItemKind.Keyword,
-    vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
-    vscode_languageserver_protocol_1.CompletionItemKind.Color,
-    vscode_languageserver_protocol_1.CompletionItemKind.File,
-    vscode_languageserver_protocol_1.CompletionItemKind.Reference,
-    vscode_languageserver_protocol_1.CompletionItemKind.Folder,
-    vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,
-    vscode_languageserver_protocol_1.CompletionItemKind.Constant,
-    vscode_languageserver_protocol_1.CompletionItemKind.Struct,
-    vscode_languageserver_protocol_1.CompletionItemKind.Event,
-    vscode_languageserver_protocol_1.CompletionItemKind.Operator,
-    vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter
-  ];
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var DynamicFeature;
-  (function(DynamicFeature2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && Is.func(candidate.register) && Is.func(candidate.unregister) && Is.func(candidate.dispose) && candidate.messages !== void 0;
-    }
-    DynamicFeature2.is = is;
-  })(DynamicFeature || (DynamicFeature = {}));
-  var DocumentNotifiactions = class {
-    constructor(_client, _event, _type, _middleware, _createParams, _selectorFilter) {
-      this._client = _client;
-      this._event = _event;
-      this._type = _type;
-      this._middleware = _middleware;
-      this._createParams = _createParams;
-      this._selectorFilter = _selectorFilter;
-      this._selectors = new Map();
-    }
-    static textDocumentFilter(selectors, textDocument) {
-      for (const selector of selectors) {
-        if (vscode_1.languages.match(selector, textDocument)) {
-          return true;
-        }
-      }
-      return false;
-    }
-    register(_message, data) {
-      if (!data.registerOptions.documentSelector) {
-        return;
-      }
-      if (!this._listener) {
-        this._listener = this._event(this.callback, this);
-      }
-      this._selectors.set(data.id, data.registerOptions.documentSelector);
-    }
-    callback(data) {
-      if (!this._selectorFilter || this._selectorFilter(this._selectors.values(), data)) {
-        if (this._middleware) {
-          this._middleware(data, (data2) => this._client.sendNotification(this._type, this._createParams(data2)));
-        } else {
-          this._client.sendNotification(this._type, this._createParams(data));
-        }
-        this.notificationSent(data);
-      }
-    }
-    notificationSent(_data) {
-    }
-    unregister(id) {
-      this._selectors.delete(id);
-      if (this._selectors.size === 0 && this._listener) {
-        this._listener.dispose();
-        this._listener = void 0;
-      }
-    }
-    dispose() {
-      this._selectors.clear();
-      if (this._listener) {
-        this._listener.dispose();
-        this._listener = void 0;
-      }
-    }
-    getProvider(document) {
-      for (const selector of this._selectors.values()) {
-        if (vscode_1.languages.match(selector, document)) {
-          return {
-            send: (data) => {
-              this.callback(data);
-            }
-          };
-        }
-      }
-      throw new Error(`No provider available for the given text document`);
-    }
-  };
-  var DidOpenTextDocumentFeature = class extends DocumentNotifiactions {
-    constructor(client2, _syncedDocuments) {
-      super(client2, vscode_1.workspace.onDidOpenTextDocument, vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, client2.clientOptions.middleware.didOpen, (textDocument) => client2.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);
-      this._syncedDocuments = _syncedDocuments;
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
-      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {
-        this.register(this.messages, {id: UUID.generateUuid(), registerOptions: {documentSelector}});
-      }
-    }
-    register(message, data) {
-      super.register(message, data);
-      if (!data.registerOptions.documentSelector) {
-        return;
-      }
-      let documentSelector = data.registerOptions.documentSelector;
-      vscode_1.workspace.textDocuments.forEach((textDocument) => {
-        let uri = textDocument.uri.toString();
-        if (this._syncedDocuments.has(uri)) {
-          return;
-        }
-        if (vscode_1.languages.match(documentSelector, textDocument)) {
-          let middleware = this._client.clientOptions.middleware;
-          let didOpen = (textDocument2) => {
-            this._client.sendNotification(this._type, this._createParams(textDocument2));
-          };
-          if (middleware.didOpen) {
-            middleware.didOpen(textDocument, didOpen);
-          } else {
-            didOpen(textDocument);
-          }
-          this._syncedDocuments.set(uri, textDocument);
-        }
-      });
-    }
-    notificationSent(textDocument) {
-      super.notificationSent(textDocument);
-      this._syncedDocuments.set(textDocument.uri.toString(), textDocument);
-    }
-  };
-  var DidCloseTextDocumentFeature = class extends DocumentNotifiactions {
-    constructor(client2, _syncedDocuments) {
-      super(client2, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, client2.clientOptions.middleware.didClose, (textDocument) => client2.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);
-      this._syncedDocuments = _syncedDocuments;
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
-      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {
-        this.register(this.messages, {id: UUID.generateUuid(), registerOptions: {documentSelector}});
-      }
-    }
-    notificationSent(textDocument) {
-      super.notificationSent(textDocument);
-      this._syncedDocuments.delete(textDocument.uri.toString());
-    }
-    unregister(id) {
-      let selector = this._selectors.get(id);
-      super.unregister(id);
-      let selectors = this._selectors.values();
-      this._syncedDocuments.forEach((textDocument) => {
-        if (vscode_1.languages.match(selector, textDocument) && !this._selectorFilter(selectors, textDocument)) {
-          let middleware = this._client.clientOptions.middleware;
-          let didClose = (textDocument2) => {
-            this._client.sendNotification(this._type, this._createParams(textDocument2));
-          };
-          this._syncedDocuments.delete(textDocument.uri.toString());
-          if (middleware.didClose) {
-            middleware.didClose(textDocument, didClose);
-          } else {
-            didClose(textDocument);
-          }
-        }
-      });
-    }
-  };
-  var DidChangeTextDocumentFeature = class {
-    constructor(_client) {
-      this._client = _client;
-      this._changeData = new Map();
-      this._forcingDelivery = false;
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
-      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== void 0 && textDocumentSyncOptions.change !== vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
-        this.register(this.messages, {
-          id: UUID.generateUuid(),
-          registerOptions: Object.assign({}, {documentSelector}, {syncKind: textDocumentSyncOptions.change})
-        });
-      }
-    }
-    register(_message, data) {
-      if (!data.registerOptions.documentSelector) {
-        return;
-      }
-      if (!this._listener) {
-        this._listener = vscode_1.workspace.onDidChangeTextDocument(this.callback, this);
-      }
-      this._changeData.set(data.id, {
-        documentSelector: data.registerOptions.documentSelector,
-        syncKind: data.registerOptions.syncKind
-      });
-    }
-    callback(event) {
-      if (event.contentChanges.length === 0) {
-        return;
-      }
-      for (const changeData of this._changeData.values()) {
-        if (vscode_1.languages.match(changeData.documentSelector, event.document)) {
-          let middleware = this._client.clientOptions.middleware;
-          if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental) {
-            let params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event);
-            if (middleware.didChange) {
-              middleware.didChange(event, () => this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params));
-            } else {
-              this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
-            }
-          } else if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {
-            let didChange = (event2) => {
-              if (this._changeDelayer) {
-                if (this._changeDelayer.uri !== event2.document.uri.toString()) {
-                  this.forceDelivery();
-                  this._changeDelayer.uri = event2.document.uri.toString();
-                }
-                this._changeDelayer.delayer.trigger(() => {
-                  this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event2.document));
-                });
-              } else {
-                this._changeDelayer = {
-                  uri: event2.document.uri.toString(),
-                  delayer: new async_1.Delayer(200)
-                };
-                this._changeDelayer.delayer.trigger(() => {
-                  this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event2.document));
-                }, -1);
-              }
-            };
-            if (middleware.didChange) {
-              middleware.didChange(event, didChange);
-            } else {
-              didChange(event);
-            }
-          }
-        }
-      }
-    }
-    unregister(id) {
-      this._changeData.delete(id);
-      if (this._changeData.size === 0 && this._listener) {
-        this._listener.dispose();
-        this._listener = void 0;
-      }
-    }
-    dispose() {
-      this._changeDelayer = void 0;
-      this._forcingDelivery = false;
-      this._changeData.clear();
-      if (this._listener) {
-        this._listener.dispose();
-        this._listener = void 0;
-      }
-    }
-    forceDelivery() {
-      if (this._forcingDelivery || !this._changeDelayer) {
-        return;
-      }
-      try {
-        this._forcingDelivery = true;
-        this._changeDelayer.delayer.forceDelivery();
-      } finally {
-        this._forcingDelivery = false;
-      }
-    }
-    getProvider(document) {
-      for (const changeData of this._changeData.values()) {
-        if (vscode_1.languages.match(changeData.documentSelector, document)) {
-          return {
-            send: (event) => {
-              this.callback(event);
-            }
-          };
-        }
-      }
-      throw new Error(`No provider available for the given text document`);
-    }
-  };
-  var WillSaveFeature = class extends DocumentNotifiactions {
-    constructor(client2) {
-      super(client2, vscode_1.workspace.onWillSaveTextDocument, vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, client2.clientOptions.middleware.willSave, (willSaveEvent) => client2.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (selectors, willSaveEvent) => DocumentNotifiactions.textDocumentFilter(selectors, willSaveEvent.document));
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      let value = ensure(ensure(capabilities, "textDocument"), "synchronization");
-      value.willSave = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
-      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) {
-        this.register(this.messages, {
-          id: UUID.generateUuid(),
-          registerOptions: {documentSelector}
-        });
-      }
-    }
-  };
-  var WillSaveWaitUntilFeature = class {
-    constructor(_client) {
-      this._client = _client;
-      this._selectors = new Map();
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type;
-    }
-    fillClientCapabilities(capabilities) {
-      let value = ensure(ensure(capabilities, "textDocument"), "synchronization");
-      value.willSaveWaitUntil = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
-      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) {
-        this.register(this.messages, {
-          id: UUID.generateUuid(),
-          registerOptions: {documentSelector}
-        });
-      }
-    }
-    register(_message, data) {
-      if (!data.registerOptions.documentSelector) {
-        return;
-      }
-      if (!this._listener) {
-        this._listener = vscode_1.workspace.onWillSaveTextDocument(this.callback, this);
-      }
-      this._selectors.set(data.id, data.registerOptions.documentSelector);
-    }
-    callback(event) {
-      if (DocumentNotifiactions.textDocumentFilter(this._selectors.values(), event.document)) {
-        let middleware = this._client.clientOptions.middleware;
-        let willSaveWaitUntil = (event2) => {
-          return this._client.sendRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, this._client.code2ProtocolConverter.asWillSaveTextDocumentParams(event2)).then((edits) => {
-            let vEdits = this._client.protocol2CodeConverter.asTextEdits(edits);
-            return vEdits === void 0 ? [] : vEdits;
-          });
-        };
-        event.waitUntil(middleware.willSaveWaitUntil ? middleware.willSaveWaitUntil(event, willSaveWaitUntil) : willSaveWaitUntil(event));
-      }
-    }
-    unregister(id) {
-      this._selectors.delete(id);
-      if (this._selectors.size === 0 && this._listener) {
-        this._listener.dispose();
-        this._listener = void 0;
-      }
-    }
-    dispose() {
-      this._selectors.clear();
-      if (this._listener) {
-        this._listener.dispose();
-        this._listener = void 0;
-      }
-    }
-  };
-  var DidSaveTextDocumentFeature = class extends DocumentNotifiactions {
-    constructor(client2) {
-      super(client2, vscode_1.workspace.onDidSaveTextDocument, vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, client2.clientOptions.middleware.didSave, (textDocument) => client2.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), DocumentNotifiactions.textDocumentFilter);
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "textDocument"), "synchronization").didSave = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
-      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {
-        this.register(this.messages, {
-          id: UUID.generateUuid(),
-          registerOptions: Object.assign({}, {documentSelector}, {includeText: !!textDocumentSyncOptions.save.includeText})
-        });
-      }
-    }
-    register(method, data) {
-      this._includeText = !!data.registerOptions.includeText;
-      super.register(method, data);
-    }
-  };
-  var FileSystemWatcherFeature = class {
-    constructor(_client, _notifyFileEvent) {
-      this._client = _client;
-      this._notifyFileEvent = _notifyFileEvent;
-      this._watchers = new Map();
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "workspace"), "didChangeWatchedFiles").dynamicRegistration = true;
-    }
-    initialize(_capabilities, _documentSelector) {
-    }
-    register(_method, data) {
-      if (!Array.isArray(data.registerOptions.watchers)) {
-        return;
-      }
-      let disposeables = [];
-      for (let watcher of data.registerOptions.watchers) {
-        if (!Is.string(watcher.globPattern)) {
-          continue;
-        }
-        let watchCreate = true, watchChange = true, watchDelete = true;
-        if (watcher.kind !== void 0 && watcher.kind !== null) {
-          watchCreate = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Create) !== 0;
-          watchChange = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Change) !== 0;
-          watchDelete = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Delete) !== 0;
-        }
-        let fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher(watcher.globPattern, !watchCreate, !watchChange, !watchDelete);
-        this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete);
-        disposeables.push(fileSystemWatcher);
-      }
-      this._watchers.set(data.id, disposeables);
-    }
-    registerRaw(id, fileSystemWatchers) {
-      let disposeables = [];
-      for (let fileSystemWatcher of fileSystemWatchers) {
-        this.hookListeners(fileSystemWatcher, true, true, true, disposeables);
-      }
-      this._watchers.set(id, disposeables);
-    }
-    hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {
-      if (watchCreate) {
-        fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({
-          uri: this._client.code2ProtocolConverter.asUri(resource),
-          type: vscode_languageserver_protocol_1.FileChangeType.Created
-        }), null, listeners);
-      }
-      if (watchChange) {
-        fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({
-          uri: this._client.code2ProtocolConverter.asUri(resource),
-          type: vscode_languageserver_protocol_1.FileChangeType.Changed
-        }), null, listeners);
-      }
-      if (watchDelete) {
-        fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({
-          uri: this._client.code2ProtocolConverter.asUri(resource),
-          type: vscode_languageserver_protocol_1.FileChangeType.Deleted
-        }), null, listeners);
-      }
-    }
-    unregister(id) {
-      let disposeables = this._watchers.get(id);
-      if (disposeables) {
-        for (let disposable of disposeables) {
-          disposable.dispose();
-        }
-      }
-    }
-    dispose() {
-      this._watchers.forEach((disposeables) => {
-        for (let disposable of disposeables) {
-          disposable.dispose();
-        }
-      });
-      this._watchers.clear();
-    }
-  };
-  var TextDocumentFeature = class {
-    constructor(_client, _message) {
-      this._client = _client;
-      this._message = _message;
-      this._registrations = new Map();
-    }
-    get messages() {
-      return this._message;
-    }
-    register(message, data) {
-      if (message.method !== this.messages.method) {
-        throw new Error(`Register called on wrong feature. Requested ${message.method} but reached feature ${this.messages.method}`);
-      }
-      if (!data.registerOptions.documentSelector) {
-        return;
-      }
-      let registration = this.registerLanguageProvider(data.registerOptions);
-      this._registrations.set(data.id, {disposable: registration[0], data, provider: registration[1]});
-    }
-    unregister(id) {
-      let registration = this._registrations.get(id);
-      if (registration !== void 0) {
-        registration.disposable.dispose();
-      }
-    }
-    dispose() {
-      this._registrations.forEach((value) => {
-        value.disposable.dispose();
-      });
-      this._registrations.clear();
-    }
-    getRegistration(documentSelector, capability) {
-      if (!capability) {
-        return [void 0, void 0];
-      } else if (vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is(capability)) {
-        const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();
-        const selector = capability.documentSelector || documentSelector;
-        if (selector) {
-          return [id, Object.assign({}, capability, {documentSelector: selector})];
-        }
-      } else if (Is.boolean(capability) && capability === true || vscode_languageserver_protocol_1.WorkDoneProgressOptions.is(capability)) {
-        if (!documentSelector) {
-          return [void 0, void 0];
-        }
-        let options = Is.boolean(capability) && capability === true ? {documentSelector} : Object.assign({}, capability, {documentSelector});
-        return [UUID.generateUuid(), options];
-      }
-      return [void 0, void 0];
-    }
-    getRegistrationOptions(documentSelector, capability) {
-      if (!documentSelector || !capability) {
-        return void 0;
-      }
-      return Is.boolean(capability) && capability === true ? {documentSelector} : Object.assign({}, capability, {documentSelector});
-    }
-    getProvider(textDocument) {
-      for (const registration of this._registrations.values()) {
-        let selector = registration.data.registerOptions.documentSelector;
-        if (selector !== null && vscode_1.languages.match(selector, textDocument)) {
-          return registration.provider;
-        }
-      }
-      throw new Error(`The feature has no registration for the provided text document ${textDocument.uri.toString()}`);
-    }
-  };
-  exports2.TextDocumentFeature = TextDocumentFeature;
-  var WorkspaceFeature = class {
-    constructor(_client, _message) {
-      this._client = _client;
-      this._message = _message;
-      this._registrations = new Map();
-    }
-    get messages() {
-      return this._message;
-    }
-    register(message, data) {
-      if (message.method !== this.messages.method) {
-        throw new Error(`Register called on wron feature. Requested ${message.method} but reached feature ${this.messages.method}`);
-      }
-      const registration = this.registerLanguageProvider(data.registerOptions);
-      this._registrations.set(data.id, {disposable: registration[0], provider: registration[1]});
-    }
-    unregister(id) {
-      let registration = this._registrations.get(id);
-      if (registration !== void 0) {
-        registration.disposable.dispose();
-      }
-    }
-    dispose() {
-      this._registrations.forEach((registration) => {
-        registration.disposable.dispose();
-      });
-      this._registrations.clear();
-    }
-    getProviders() {
-      const result = [];
-      for (const registration of this._registrations.values()) {
-        result.push(registration.provider);
-      }
-      return result;
-    }
-  };
-  var CompletionItemFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.CompletionRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let completion = ensure(ensure(capabilites, "textDocument"), "completion");
-      completion.dynamicRegistration = true;
-      completion.contextSupport = true;
-      completion.completionItem = {
-        snippetSupport: true,
-        commitCharactersSupport: true,
-        documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],
-        deprecatedSupport: true,
-        preselectSupport: true,
-        tagSupport: {valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated]}
-      };
-      completion.completionItemKind = {valueSet: SupportedCompletionItemKinds};
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {
-        id: UUID.generateUuid(),
-        registerOptions: options
-      });
-    }
-    registerLanguageProvider(options) {
-      const triggerCharacters = options.triggerCharacters || [];
-      const provider = {
-        provideCompletionItems: (document, position, token, context) => {
-          const client2 = this._client;
-          const middleware = this._client.clientOptions.middleware;
-          const provideCompletionItems = (document2, position2, context2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, client2.code2ProtocolConverter.asCompletionParams(document2, position2, context2), token2).then(client2.protocol2CodeConverter.asCompletionResult, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.CompletionRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          return middleware.provideCompletionItem ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems) : provideCompletionItems(document, position, context, token);
-        },
-        resolveCompletionItem: options.resolveProvider ? (item, token) => {
-          const client2 = this._client;
-          const middleware = this._client.clientOptions.middleware;
-          const resolveCompletionItem = (item2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, client2.code2ProtocolConverter.asCompletionItem(item2), token2).then(client2.protocol2CodeConverter.asCompletionItem, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, error);
-              return Promise.resolve(item2);
-            });
-          };
-          return middleware.resolveCompletionItem ? middleware.resolveCompletionItem(item, token, resolveCompletionItem) : resolveCompletionItem(item, token);
-        } : void 0
-      };
-      return [vscode_1.languages.registerCompletionItemProvider(options.documentSelector, provider, ...triggerCharacters), provider];
-    }
-  };
-  var HoverFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.HoverRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      const hoverCapability = ensure(ensure(capabilites, "textDocument"), "hover");
-      hoverCapability.dynamicRegistration = true;
-      hoverCapability.contentFormat = [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText];
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {
-        id: UUID.generateUuid(),
-        registerOptions: options
-      });
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideHover: (document, position, token) => {
-          const client2 = this._client;
-          const provideHover = (document2, position2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asHover, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.HoverRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideHover ? middleware.provideHover(document, position, token, provideHover) : provideHover(document, position, token);
-        }
-      };
-      return [vscode_1.languages.registerHoverProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var SignatureHelpFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.SignatureHelpRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let config = ensure(ensure(capabilites, "textDocument"), "signatureHelp");
-      config.dynamicRegistration = true;
-      config.signatureInformation = {documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText]};
-      config.signatureInformation.parameterInformation = {labelOffsetSupport: true};
-      config.contextSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {
-        id: UUID.generateUuid(),
-        registerOptions: options
-      });
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideSignatureHelp: (document, position, token, context) => {
-          const client2 = this._client;
-          const providerSignatureHelp = (document2, position2, context2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, client2.code2ProtocolConverter.asSignatureHelpParams(document2, position2, context2), token2).then(client2.protocol2CodeConverter.asSignatureHelp, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideSignatureHelp ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp) : providerSignatureHelp(document, position, context, token);
-        }
-      };
-      let disposable;
-      if (options.retriggerCharacters === void 0) {
-        const triggerCharacters = options.triggerCharacters || [];
-        disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, ...triggerCharacters);
-      } else {
-        const metaData = {
-          triggerCharacters: options.triggerCharacters || [],
-          retriggerCharacters: options.retriggerCharacters || []
-        };
-        disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, metaData);
-      }
-      return [disposable, provider];
-    }
-  };
-  var DefinitionFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DefinitionRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let definitionSupport = ensure(ensure(capabilites, "textDocument"), "definition");
-      definitionSupport.dynamicRegistration = true;
-      definitionSupport.linkSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDefinition: (document, position, token) => {
-          const client2 = this._client;
-          const provideDefinition = (document2, position2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDefinitionResult, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDefinition ? middleware.provideDefinition(document, position, token, provideDefinition) : provideDefinition(document, position, token);
-        }
-      };
-      return [vscode_1.languages.registerDefinitionProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var ReferencesFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.ReferencesRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "references").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideReferences: (document, position, options2, token) => {
-          const client2 = this._client;
-          const _providerReferences = (document2, position2, options3, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, client2.code2ProtocolConverter.asReferenceParams(document2, position2, options3), token2).then(client2.protocol2CodeConverter.asReferences, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideReferences ? middleware.provideReferences(document, position, options2, token, _providerReferences) : _providerReferences(document, position, options2, token);
-        }
-      };
-      return [vscode_1.languages.registerReferenceProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var DocumentHighlightFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentHighlightRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "documentHighlight").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDocumentHighlights: (document, position, token) => {
-          const client2 = this._client;
-          const _provideDocumentHighlights = (document2, position2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDocumentHighlights, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDocumentHighlights ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights) : _provideDocumentHighlights(document, position, token);
-        }
-      };
-      return [vscode_1.languages.registerDocumentHighlightProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var DocumentSymbolFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentSymbolRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let symbolCapabilities = ensure(ensure(capabilites, "textDocument"), "documentSymbol");
-      symbolCapabilities.dynamicRegistration = true;
-      symbolCapabilities.symbolKind = {
-        valueSet: SupportedSymbolKinds
-      };
-      symbolCapabilities.hierarchicalDocumentSymbolSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDocumentSymbols: (document, token) => {
-          const client2 = this._client;
-          const _provideDocumentSymbols = (document2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client2.code2ProtocolConverter.asDocumentSymbolParams(document2), token2).then((data) => {
-              if (data === null) {
-                return void 0;
-              }
-              if (data.length === 0) {
-                return [];
-              } else {
-                let element = data[0];
-                if (vscode_languageserver_protocol_1.DocumentSymbol.is(element)) {
-                  return client2.protocol2CodeConverter.asDocumentSymbols(data);
-                } else {
-                  return client2.protocol2CodeConverter.asSymbolInformations(data);
-                }
-              }
-            }, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDocumentSymbols ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols) : _provideDocumentSymbols(document, token);
-        }
-      };
-      return [vscode_1.languages.registerDocumentSymbolProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var WorkspaceSymbolFeature = class extends WorkspaceFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let symbolCapabilities = ensure(ensure(capabilites, "workspace"), "symbol");
-      symbolCapabilities.dynamicRegistration = true;
-      symbolCapabilities.symbolKind = {
-        valueSet: SupportedSymbolKinds
-      };
-    }
-    initialize(capabilities) {
-      if (!capabilities.workspaceSymbolProvider) {
-        return;
-      }
-      this.register(this.messages, {
-        id: UUID.generateUuid(),
-        registerOptions: capabilities.workspaceSymbolProvider === true ? {workDoneProgress: false} : capabilities.workspaceSymbolProvider
-      });
-    }
-    registerLanguageProvider(_options) {
-      const provider = {
-        provideWorkspaceSymbols: (query, token) => {
-          const client2 = this._client;
-          const provideWorkspaceSymbols = (query2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, {query: query2}, token2).then(client2.protocol2CodeConverter.asSymbolInformations, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideWorkspaceSymbols ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols) : provideWorkspaceSymbols(query, token);
-        }
-      };
-      return [vscode_1.languages.registerWorkspaceSymbolProvider(provider), provider];
-    }
-  };
-  var CodeActionFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.CodeActionRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      const cap = ensure(ensure(capabilites, "textDocument"), "codeAction");
-      cap.dynamicRegistration = true;
-      cap.isPreferredSupport = true;
-      cap.codeActionLiteralSupport = {
-        codeActionKind: {
-          valueSet: [
-            vscode_languageserver_protocol_1.CodeActionKind.Empty,
-            vscode_languageserver_protocol_1.CodeActionKind.QuickFix,
-            vscode_languageserver_protocol_1.CodeActionKind.Refactor,
-            vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract,
-            vscode_languageserver_protocol_1.CodeActionKind.RefactorInline,
-            vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite,
-            vscode_languageserver_protocol_1.CodeActionKind.Source,
-            vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports
-          ]
-        }
-      };
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideCodeActions: (document, range, context, token) => {
-          const client2 = this._client;
-          const _provideCodeActions = (document2, range2, context2, token2) => {
-            const params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              range: client2.code2ProtocolConverter.asRange(range2),
-              context: client2.code2ProtocolConverter.asCodeActionContext(context2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, params, token2).then((values) => {
-              if (values === null) {
-                return void 0;
-              }
-              const result = [];
-              for (let item of values) {
-                if (vscode_languageserver_protocol_1.Command.is(item)) {
-                  result.push(client2.protocol2CodeConverter.asCommand(item));
-                } else {
-                  result.push(client2.protocol2CodeConverter.asCodeAction(item));
-                }
-              }
-              return result;
-            }, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideCodeActions ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions) : _provideCodeActions(document, range, context, token);
-        }
-      };
-      return [vscode_1.languages.registerCodeActionsProvider(options.documentSelector, provider, options.codeActionKinds ? {providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds)} : void 0), provider];
-    }
-  };
-  var CodeLensFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.CodeLensRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "codeLens").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideCodeLenses: (document, token) => {
-          const client2 = this._client;
-          const provideCodeLenses = (document2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, client2.code2ProtocolConverter.asCodeLensParams(document2), token2).then(client2.protocol2CodeConverter.asCodeLenses, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideCodeLenses ? middleware.provideCodeLenses(document, token, provideCodeLenses) : provideCodeLenses(document, token);
-        },
-        resolveCodeLens: options.resolveProvider ? (codeLens, token) => {
-          const client2 = this._client;
-          const resolveCodeLens = (codeLens2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, client2.code2ProtocolConverter.asCodeLens(codeLens2), token2).then(client2.protocol2CodeConverter.asCodeLens, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, error);
-              return codeLens2;
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.resolveCodeLens ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens) : resolveCodeLens(codeLens, token);
-        } : void 0
-      };
-      return [vscode_1.languages.registerCodeLensProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var DocumentFormattingFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentFormattingRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "formatting").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDocumentFormattingEdits: (document, options2, token) => {
-          const client2 = this._client;
-          const provideDocumentFormattingEdits = (document2, options3, token2) => {
-            const params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              options: client2.code2ProtocolConverter.asFormattingOptions(options3)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, params, token2).then(client2.protocol2CodeConverter.asTextEdits, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDocumentFormattingEdits ? middleware.provideDocumentFormattingEdits(document, options2, token, provideDocumentFormattingEdits) : provideDocumentFormattingEdits(document, options2, token);
-        }
-      };
-      return [vscode_1.languages.registerDocumentFormattingEditProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var DocumentRangeFormattingFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "rangeFormatting").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDocumentRangeFormattingEdits: (document, range, options2, token) => {
-          const client2 = this._client;
-          const provideDocumentRangeFormattingEdits = (document2, range2, options3, token2) => {
-            let params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              range: client2.code2ProtocolConverter.asRange(range2),
-              options: client2.code2ProtocolConverter.asFormattingOptions(options3)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, params, token2).then(client2.protocol2CodeConverter.asTextEdits, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          let middleware = client2.clientOptions.middleware;
-          return middleware.provideDocumentRangeFormattingEdits ? middleware.provideDocumentRangeFormattingEdits(document, range, options2, token, provideDocumentRangeFormattingEdits) : provideDocumentRangeFormattingEdits(document, range, options2, token);
-        }
-      };
-      return [vscode_1.languages.registerDocumentRangeFormattingEditProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var DocumentOnTypeFormattingFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "onTypeFormatting").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideOnTypeFormattingEdits: (document, position, ch, options2, token) => {
-          const client2 = this._client;
-          const provideOnTypeFormattingEdits = (document2, position2, ch2, options3, token2) => {
-            let params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              position: client2.code2ProtocolConverter.asPosition(position2),
-              ch: ch2,
-              options: client2.code2ProtocolConverter.asFormattingOptions(options3)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, params, token2).then(client2.protocol2CodeConverter.asTextEdits, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideOnTypeFormattingEdits ? middleware.provideOnTypeFormattingEdits(document, position, ch, options2, token, provideOnTypeFormattingEdits) : provideOnTypeFormattingEdits(document, position, ch, options2, token);
-        }
-      };
-      const moreTriggerCharacter = options.moreTriggerCharacter || [];
-      return [vscode_1.languages.registerOnTypeFormattingEditProvider(options.documentSelector, provider, options.firstTriggerCharacter, ...moreTriggerCharacter), provider];
-    }
-  };
-  var RenameFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.RenameRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let rename = ensure(ensure(capabilites, "textDocument"), "rename");
-      rename.dynamicRegistration = true;
-      rename.prepareSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);
-      if (!options) {
-        return;
-      }
-      if (Is.boolean(capabilities.renameProvider)) {
-        options.prepareProvider = false;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideRenameEdits: (document, position, newName, token) => {
-          const client2 = this._client;
-          const provideRenameEdits = (document2, position2, newName2, token2) => {
-            let params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              position: client2.code2ProtocolConverter.asPosition(position2),
-              newName: newName2
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.RenameRequest.type, params, token2).then(client2.protocol2CodeConverter.asWorkspaceEdit, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.RenameRequest.type, error);
-              return Promise.reject(new Error(error.message));
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideRenameEdits ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits) : provideRenameEdits(document, position, newName, token);
-        },
-        prepareRename: options.prepareProvider ? (document, position, token) => {
-          const client2 = this._client;
-          const prepareRename = (document2, position2, token2) => {
-            let params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              position: client2.code2ProtocolConverter.asPosition(position2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, params, token2).then((result) => {
-              if (vscode_languageserver_protocol_1.Range.is(result)) {
-                return client2.protocol2CodeConverter.asRange(result);
-              } else if (result && vscode_languageserver_protocol_1.Range.is(result.range)) {
-                return {
-                  range: client2.protocol2CodeConverter.asRange(result.range),
-                  placeholder: result.placeholder
-                };
-              }
-              return Promise.reject(new Error(`The element can't be renamed.`));
-            }, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, error);
-              return Promise.reject(new Error(error.message));
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.prepareRename ? middleware.prepareRename(document, position, token, prepareRename) : prepareRename(document, position, token);
-        } : void 0
-      };
-      return [vscode_1.languages.registerRenameProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var DocumentLinkFeature = class extends TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentLinkRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      const documentLinkCapabilities = ensure(ensure(capabilites, "textDocument"), "documentLink");
-      documentLinkCapabilities.dynamicRegistration = true;
-      documentLinkCapabilities.tooltipSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);
-      if (!options) {
-        return;
-      }
-      this.register(this.messages, {id: UUID.generateUuid(), registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDocumentLinks: (document, token) => {
-          const client2 = this._client;
-          const provideDocumentLinks = (document2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, client2.code2ProtocolConverter.asDocumentLinkParams(document2), token2).then(client2.protocol2CodeConverter.asDocumentLinks, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, error);
-              return Promise.resolve([]);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDocumentLinks ? middleware.provideDocumentLinks(document, token, provideDocumentLinks) : provideDocumentLinks(document, token);
-        },
-        resolveDocumentLink: options.resolveProvider ? (link, token) => {
-          const client2 = this._client;
-          let resolveDocumentLink = (link2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, client2.code2ProtocolConverter.asDocumentLink(link2), token2).then(client2.protocol2CodeConverter.asDocumentLink, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, error);
-              return Promise.resolve(link2);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.resolveDocumentLink ? middleware.resolveDocumentLink(link, token, resolveDocumentLink) : resolveDocumentLink(link, token);
-        } : void 0
-      };
-      return [vscode_1.languages.registerDocumentLinkProvider(options.documentSelector, provider), provider];
-    }
-  };
-  var ConfigurationFeature = class {
-    constructor(_client) {
-      this._client = _client;
-      this._listeners = new Map();
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "workspace"), "didChangeConfiguration").dynamicRegistration = true;
-    }
-    initialize() {
-      let section = this._client.clientOptions.synchronize.configurationSection;
-      if (section !== void 0) {
-        this.register(this.messages, {
-          id: UUID.generateUuid(),
-          registerOptions: {
-            section
-          }
-        });
-      }
-    }
-    register(_message, data) {
-      let disposable = vscode_1.workspace.onDidChangeConfiguration((event) => {
-        this.onDidChangeConfiguration(data.registerOptions.section, event);
-      });
-      this._listeners.set(data.id, disposable);
-      if (data.registerOptions.section !== void 0) {
-        this.onDidChangeConfiguration(data.registerOptions.section, void 0);
-      }
-    }
-    unregister(id) {
-      let disposable = this._listeners.get(id);
-      if (disposable) {
-        this._listeners.delete(id);
-        disposable.dispose();
-      }
-    }
-    dispose() {
-      for (let disposable of this._listeners.values()) {
-        disposable.dispose();
-      }
-      this._listeners.clear();
-    }
-    onDidChangeConfiguration(configurationSection, event) {
-      let sections;
-      if (Is.string(configurationSection)) {
-        sections = [configurationSection];
-      } else {
-        sections = configurationSection;
-      }
-      if (sections !== void 0 && event !== void 0) {
-        let affected = sections.some((section) => event.affectsConfiguration(section));
-        if (!affected) {
-          return;
-        }
-      }
-      let didChangeConfiguration = (sections2) => {
-        if (sections2 === void 0) {
-          this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, {settings: null});
-          return;
-        }
-        this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, {settings: this.extractSettingsInformation(sections2)});
-      };
-      let middleware = this.getMiddleware();
-      middleware ? middleware(sections, didChangeConfiguration) : didChangeConfiguration(sections);
-    }
-    extractSettingsInformation(keys) {
-      function ensurePath(config, path) {
-        let current = config;
-        for (let i = 0; i < path.length - 1; i++) {
-          let obj = current[path[i]];
-          if (!obj) {
-            obj = Object.create(null);
-            current[path[i]] = obj;
-          }
-          current = obj;
-        }
-        return current;
-      }
-      let resource = this._client.clientOptions.workspaceFolder ? this._client.clientOptions.workspaceFolder.uri : void 0;
-      let result = Object.create(null);
-      for (let i = 0; i < keys.length; i++) {
-        let key = keys[i];
-        let index = key.indexOf(".");
-        let config = null;
-        if (index >= 0) {
-          config = vscode_1.workspace.getConfiguration(key.substr(0, index), resource).get(key.substr(index + 1));
-        } else {
-          config = vscode_1.workspace.getConfiguration(key, resource);
-        }
-        if (config) {
-          let path = keys[i].split(".");
-          ensurePath(result, path)[path[path.length - 1]] = config;
-        }
-      }
-      return result;
-    }
-    getMiddleware() {
-      let middleware = this._client.clientOptions.middleware;
-      if (middleware.workspace && middleware.workspace.didChangeConfiguration) {
-        return middleware.workspace.didChangeConfiguration;
-      } else {
-        return void 0;
-      }
-    }
-  };
-  var ExecuteCommandFeature = class {
-    constructor(_client) {
-      this._client = _client;
-      this._commands = new Map();
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.ExecuteCommandRequest.type;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(ensure(capabilities, "workspace"), "executeCommand").dynamicRegistration = true;
-    }
-    initialize(capabilities) {
-      if (!capabilities.executeCommandProvider) {
-        return;
-      }
-      this.register(this.messages, {
-        id: UUID.generateUuid(),
-        registerOptions: Object.assign({}, capabilities.executeCommandProvider)
-      });
-    }
-    register(_message, data) {
-      const client2 = this._client;
-      const middleware = client2.clientOptions.middleware;
-      const executeCommand = (command, args) => {
-        let params = {
-          command,
-          arguments: args
-        };
-        return client2.sendRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, params).then(void 0, (error) => {
-          client2.logFailedRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, error);
-        });
-      };
-      if (data.registerOptions.commands) {
-        const disposeables = [];
-        for (const command of data.registerOptions.commands) {
-          disposeables.push(vscode_1.commands.registerCommand(command, (...args) => {
-            return middleware.executeCommand ? middleware.executeCommand(command, args, executeCommand) : executeCommand(command, args);
-          }));
-        }
-        this._commands.set(data.id, disposeables);
-      }
-    }
-    unregister(id) {
-      let disposeables = this._commands.get(id);
-      if (disposeables) {
-        disposeables.forEach((disposable) => disposable.dispose());
-      }
-    }
-    dispose() {
-      this._commands.forEach((value) => {
-        value.forEach((disposable) => disposable.dispose());
-      });
-      this._commands.clear();
-    }
-  };
-  var MessageTransports;
-  (function(MessageTransports2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && vscode_languageserver_protocol_1.MessageReader.is(value.reader) && vscode_languageserver_protocol_1.MessageWriter.is(value.writer);
-    }
-    MessageTransports2.is = is;
-  })(MessageTransports = exports2.MessageTransports || (exports2.MessageTransports = {}));
-  var OnReady = class {
-    constructor(_resolve, _reject) {
-      this._resolve = _resolve;
-      this._reject = _reject;
-      this._used = false;
-    }
-    get isUsed() {
-      return this._used;
-    }
-    resolve() {
-      this._used = true;
-      this._resolve();
-    }
-    reject(error) {
-      this._used = true;
-      this._reject(error);
-    }
-  };
-  var BaseLanguageClient = class {
-    constructor(id, name, clientOptions) {
-      this._traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;
-      this._features = [];
-      this._method2Message = new Map();
-      this._dynamicFeatures = new Map();
-      this._id = id;
-      this._name = name;
-      clientOptions = clientOptions || {};
-      this._clientOptions = {
-        documentSelector: clientOptions.documentSelector || [],
-        synchronize: clientOptions.synchronize || {},
-        diagnosticCollectionName: clientOptions.diagnosticCollectionName,
-        outputChannelName: clientOptions.outputChannelName || this._name,
-        revealOutputChannelOn: clientOptions.revealOutputChannelOn || RevealOutputChannelOn.Error,
-        stdioEncoding: clientOptions.stdioEncoding || "utf8",
-        initializationOptions: clientOptions.initializationOptions,
-        initializationFailedHandler: clientOptions.initializationFailedHandler,
-        progressOnInitialization: !!clientOptions.progressOnInitialization,
-        errorHandler: clientOptions.errorHandler || new DefaultErrorHandler(this._name),
-        middleware: clientOptions.middleware || {},
-        uriConverters: clientOptions.uriConverters,
-        workspaceFolder: clientOptions.workspaceFolder
-      };
-      this._clientOptions.synchronize = this._clientOptions.synchronize || {};
-      this.state = ClientState.Initial;
-      this._connectionPromise = void 0;
-      this._resolvedConnection = void 0;
-      this._initializeResult = void 0;
-      if (clientOptions.outputChannel) {
-        this._outputChannel = clientOptions.outputChannel;
-        this._disposeOutputChannel = false;
-      } else {
-        this._outputChannel = void 0;
-        this._disposeOutputChannel = true;
-      }
-      this._traceOutputChannel = clientOptions.traceOutputChannel;
-      this._listeners = void 0;
-      this._providers = void 0;
-      this._diagnostics = void 0;
-      this._fileEvents = [];
-      this._fileEventDelayer = new async_1.Delayer(250);
-      this._onReady = new Promise((resolve, reject) => {
-        this._onReadyCallbacks = new OnReady(resolve, reject);
-      });
-      this._onStop = void 0;
-      this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter();
-      this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter();
-      this._tracer = {
-        log: (messageOrDataObject, data) => {
-          if (Is.string(messageOrDataObject)) {
-            this.logTrace(messageOrDataObject, data);
-          } else {
-            this.logObjectTrace(messageOrDataObject);
-          }
-        }
-      };
-      this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : void 0);
-      this._p2c = p2c.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : void 0);
-      this._syncedDocuments = new Map();
-      this.registerBuiltinFeatures();
-    }
-    get state() {
-      return this._state;
-    }
-    set state(value) {
-      let oldState = this.getPublicState();
-      this._state = value;
-      let newState = this.getPublicState();
-      if (newState !== oldState) {
-        this._stateChangeEmitter.fire({oldState, newState});
-      }
-    }
-    getPublicState() {
-      if (this.state === ClientState.Running) {
-        return State.Running;
-      } else if (this.state === ClientState.Starting) {
-        return State.Starting;
-      } else {
-        return State.Stopped;
-      }
-    }
-    get initializeResult() {
-      return this._initializeResult;
-    }
-    sendRequest(type, ...params) {
-      if (!this.isConnectionActive()) {
-        throw new Error("Language client is not ready yet");
-      }
-      this.forceDocumentSync();
-      try {
-        return this._resolvedConnection.sendRequest(type, ...params);
-      } catch (error) {
-        this.error(`Sending request ${Is.string(type) ? type : type.method} failed.`, error);
-        throw error;
-      }
-    }
-    onRequest(type, handler) {
-      if (!this.isConnectionActive()) {
-        throw new Error("Language client is not ready yet");
-      }
-      try {
-        this._resolvedConnection.onRequest(type, handler);
-      } catch (error) {
-        this.error(`Registering request handler ${Is.string(type) ? type : type.method} failed.`, error);
-        throw error;
-      }
-    }
-    sendNotification(type, params) {
-      if (!this.isConnectionActive()) {
-        throw new Error("Language client is not ready yet");
-      }
-      this.forceDocumentSync();
-      try {
-        this._resolvedConnection.sendNotification(type, params);
-      } catch (error) {
-        this.error(`Sending notification ${Is.string(type) ? type : type.method} failed.`, error);
-        throw error;
-      }
-    }
-    onNotification(type, handler) {
-      if (!this.isConnectionActive()) {
-        throw new Error("Language client is not ready yet");
-      }
-      try {
-        this._resolvedConnection.onNotification(type, handler);
-      } catch (error) {
-        this.error(`Registering notification handler ${Is.string(type) ? type : type.method} failed.`, error);
-        throw error;
-      }
-    }
-    onProgress(type, token, handler) {
-      if (!this.isConnectionActive()) {
-        throw new Error("Language client is not ready yet");
-      }
-      try {
-        return this._resolvedConnection.onProgress(type, token, handler);
-      } catch (error) {
-        this.error(`Registering progress handler for token ${token} failed.`, error);
-        throw error;
-      }
-    }
-    sendProgress(type, token, value) {
-      if (!this.isConnectionActive()) {
-        throw new Error("Language client is not ready yet");
-      }
-      this.forceDocumentSync();
-      try {
-        this._resolvedConnection.sendProgress(type, token, value);
-      } catch (error) {
-        this.error(`Sending progress for token ${token} failed.`, error);
-        throw error;
-      }
-    }
-    get clientOptions() {
-      return this._clientOptions;
-    }
-    get protocol2CodeConverter() {
-      return this._p2c;
-    }
-    get code2ProtocolConverter() {
-      return this._c2p;
-    }
-    get onTelemetry() {
-      return this._telemetryEmitter.event;
-    }
-    get onDidChangeState() {
-      return this._stateChangeEmitter.event;
-    }
-    get outputChannel() {
-      if (!this._outputChannel) {
-        this._outputChannel = vscode_1.window.createOutputChannel(this._clientOptions.outputChannelName ? this._clientOptions.outputChannelName : this._name);
-      }
-      return this._outputChannel;
-    }
-    get traceOutputChannel() {
-      if (this._traceOutputChannel) {
-        return this._traceOutputChannel;
-      }
-      return this.outputChannel;
-    }
-    get diagnostics() {
-      return this._diagnostics;
-    }
-    createDefaultErrorHandler() {
-      return new DefaultErrorHandler(this._name);
-    }
-    set trace(value) {
-      this._trace = value;
-      this.onReady().then(() => {
-        this.resolveConnection().then((connection) => {
-          connection.trace(this._trace, this._tracer, {
-            sendNotification: false,
-            traceFormat: this._traceFormat
-          });
-        });
-      }, () => {
-      });
-    }
-    data2String(data) {
-      if (data instanceof vscode_languageserver_protocol_1.ResponseError) {
-        const responseError = data;
-        return `  Message: ${responseError.message}
-  Code: ${responseError.code} ${responseError.data ? "\n" + responseError.data.toString() : ""}`;
-      }
-      if (data instanceof Error) {
-        if (Is.string(data.stack)) {
-          return data.stack;
-        }
-        return data.message;
-      }
-      if (Is.string(data)) {
-        return data;
-      }
-      return data.toString();
-    }
-    info(message, data, showNotification = true) {
-      this.outputChannel.appendLine(`[Info  - ${new Date().toLocaleTimeString()}] ${message}`);
-      if (data) {
-        this.outputChannel.appendLine(this.data2String(data));
-      }
-      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Info) {
-        this.showNotificationMessage();
-      }
-    }
-    warn(message, data, showNotification = true) {
-      this.outputChannel.appendLine(`[Warn  - ${new Date().toLocaleTimeString()}] ${message}`);
-      if (data) {
-        this.outputChannel.appendLine(this.data2String(data));
-      }
-      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Warn) {
-        this.showNotificationMessage();
-      }
-    }
-    error(message, data, showNotification = true) {
-      this.outputChannel.appendLine(`[Error - ${new Date().toLocaleTimeString()}] ${message}`);
-      if (data) {
-        this.outputChannel.appendLine(this.data2String(data));
-      }
-      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Error) {
-        this.showNotificationMessage();
-      }
-    }
-    showNotificationMessage() {
-      vscode_1.window.showInformationMessage("A request has failed. See the output for more information.", "Go to output").then(() => {
-        this.outputChannel.show(true);
-      });
-    }
-    logTrace(message, data) {
-      this.traceOutputChannel.appendLine(`[Trace - ${new Date().toLocaleTimeString()}] ${message}`);
-      if (data) {
-        this.traceOutputChannel.appendLine(this.data2String(data));
-      }
-    }
-    logObjectTrace(data) {
-      if (data.isLSPMessage && data.type) {
-        this.traceOutputChannel.append(`[LSP   - ${new Date().toLocaleTimeString()}] `);
-      } else {
-        this.traceOutputChannel.append(`[Trace - ${new Date().toLocaleTimeString()}] `);
-      }
-      if (data) {
-        this.traceOutputChannel.appendLine(`${JSON.stringify(data)}`);
-      }
-    }
-    needsStart() {
-      return this.state === ClientState.Initial || this.state === ClientState.Stopping || this.state === ClientState.Stopped;
-    }
-    needsStop() {
-      return this.state === ClientState.Starting || this.state === ClientState.Running;
-    }
-    onReady() {
-      return this._onReady;
-    }
-    isConnectionActive() {
-      return this.state === ClientState.Running && !!this._resolvedConnection;
-    }
-    start() {
-      if (this._onReadyCallbacks.isUsed) {
-        this._onReady = new Promise((resolve, reject) => {
-          this._onReadyCallbacks = new OnReady(resolve, reject);
-        });
-      }
-      this._listeners = [];
-      this._providers = [];
-      if (!this._diagnostics) {
-        this._diagnostics = this._clientOptions.diagnosticCollectionName ? vscode_1.languages.createDiagnosticCollection(this._clientOptions.diagnosticCollectionName) : vscode_1.languages.createDiagnosticCollection();
-      }
-      this.state = ClientState.Starting;
-      this.resolveConnection().then((connection) => {
-        connection.onLogMessage((message) => {
-          switch (message.type) {
-            case vscode_languageserver_protocol_1.MessageType.Error:
-              this.error(message.message, void 0, false);
-              break;
-            case vscode_languageserver_protocol_1.MessageType.Warning:
-              this.warn(message.message, void 0, false);
-              break;
-            case vscode_languageserver_protocol_1.MessageType.Info:
-              this.info(message.message, void 0, false);
-              break;
-            default:
-              this.outputChannel.appendLine(message.message);
-          }
-        });
-        connection.onShowMessage((message) => {
-          switch (message.type) {
-            case vscode_languageserver_protocol_1.MessageType.Error:
-              vscode_1.window.showErrorMessage(message.message);
-              break;
-            case vscode_languageserver_protocol_1.MessageType.Warning:
-              vscode_1.window.showWarningMessage(message.message);
-              break;
-            case vscode_languageserver_protocol_1.MessageType.Info:
-              vscode_1.window.showInformationMessage(message.message);
-              break;
-            default:
-              vscode_1.window.showInformationMessage(message.message);
-          }
-        });
-        connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, (params) => {
-          let messageFunc;
-          switch (params.type) {
-            case vscode_languageserver_protocol_1.MessageType.Error:
-              messageFunc = vscode_1.window.showErrorMessage;
-              break;
-            case vscode_languageserver_protocol_1.MessageType.Warning:
-              messageFunc = vscode_1.window.showWarningMessage;
-              break;
-            case vscode_languageserver_protocol_1.MessageType.Info:
-              messageFunc = vscode_1.window.showInformationMessage;
-              break;
-            default:
-              messageFunc = vscode_1.window.showInformationMessage;
-          }
-          let actions = params.actions || [];
-          return messageFunc(params.message, ...actions);
-        });
-        connection.onTelemetry((data) => {
-          this._telemetryEmitter.fire(data);
-        });
-        connection.listen();
-        return this.initialize(connection);
-      }).then(void 0, (error) => {
-        this.state = ClientState.StartFailed;
-        this._onReadyCallbacks.reject(error);
-        this.error("Starting client failed", error);
-        vscode_1.window.showErrorMessage(`Couldn't start client ${this._name}`);
-      });
-      return new vscode_1.Disposable(() => {
-        if (this.needsStop()) {
-          this.stop();
-        }
-      });
-    }
-    resolveConnection() {
-      if (!this._connectionPromise) {
-        this._connectionPromise = this.createConnection();
-      }
-      return this._connectionPromise;
-    }
-    initialize(connection) {
-      this.refreshTrace(connection, false);
-      let initOption = this._clientOptions.initializationOptions;
-      let rootPath = this._clientOptions.workspaceFolder ? this._clientOptions.workspaceFolder.uri.fsPath : this._clientGetRootPath();
-      let initParams = {
-        processId: process.pid,
-        clientInfo: {
-          name: "vscode",
-          version: vscode_1.version
-        },
-        rootPath: rootPath ? rootPath : null,
-        rootUri: rootPath ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) : null,
-        capabilities: this.computeClientCapabilities(),
-        initializationOptions: Is.func(initOption) ? initOption() : initOption,
-        trace: vscode_languageserver_protocol_1.Trace.toString(this._trace),
-        workspaceFolders: null
-      };
-      this.fillInitializeParams(initParams);
-      if (this._clientOptions.progressOnInitialization) {
-        const token = UUID.generateUuid();
-        const part = new progressPart_1.ProgressPart(connection, token);
-        initParams.workDoneToken = token;
-        return this.doInitialize(connection, initParams).then((result) => {
-          part.done();
-          return result;
-        }, (error) => {
-          part.cancel();
-          throw error;
-        });
-      } else {
-        return this.doInitialize(connection, initParams);
-      }
-    }
-    doInitialize(connection, initParams) {
-      return connection.initialize(initParams).then((result) => {
-        this._resolvedConnection = connection;
-        this._initializeResult = result;
-        this.state = ClientState.Running;
-        let textDocumentSyncOptions = void 0;
-        if (Is.number(result.capabilities.textDocumentSync)) {
-          if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
-            textDocumentSyncOptions = {
-              openClose: false,
-              change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,
-              save: void 0
-            };
-          } else {
-            textDocumentSyncOptions = {
-              openClose: true,
-              change: result.capabilities.textDocumentSync,
-              save: {
-                includeText: false
-              }
-            };
-          }
-        } else if (result.capabilities.textDocumentSync !== void 0 && result.capabilities.textDocumentSync !== null) {
-          textDocumentSyncOptions = result.capabilities.textDocumentSync;
-        }
-        this._capabilities = Object.assign({}, result.capabilities, {resolvedTextDocumentSync: textDocumentSyncOptions});
-        connection.onDiagnostics((params) => this.handleDiagnostics(params));
-        connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, (params) => this.handleRegistrationRequest(params));
-        connection.onRequest("client/registerFeature", (params) => this.handleRegistrationRequest(params));
-        connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, (params) => this.handleUnregistrationRequest(params));
-        connection.onRequest("client/unregisterFeature", (params) => this.handleUnregistrationRequest(params));
-        connection.onRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, (params) => this.handleApplyWorkspaceEdit(params));
-        connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});
-        this.hookFileEvents(connection);
-        this.hookConfigurationChanged(connection);
-        this.initializeFeatures(connection);
-        this._onReadyCallbacks.resolve();
-        return result;
-      }).then(void 0, (error) => {
-        if (this._clientOptions.initializationFailedHandler) {
-          if (this._clientOptions.initializationFailedHandler(error)) {
-            this.initialize(connection);
-          } else {
-            this.stop();
-            this._onReadyCallbacks.reject(error);
-          }
-        } else if (error instanceof vscode_languageserver_protocol_1.ResponseError && error.data && error.data.retry) {
-          vscode_1.window.showErrorMessage(error.message, {title: "Retry", id: "retry"}).then((item) => {
-            if (item && item.id === "retry") {
-              this.initialize(connection);
-            } else {
-              this.stop();
-              this._onReadyCallbacks.reject(error);
-            }
-          });
-        } else {
-          if (error && error.message) {
-            vscode_1.window.showErrorMessage(error.message);
-          }
-          this.error("Server initialization failed.", error);
-          this.stop();
-          this._onReadyCallbacks.reject(error);
-        }
-        throw error;
-      });
-    }
-    _clientGetRootPath() {
-      let folders = vscode_1.workspace.workspaceFolders;
-      if (!folders || folders.length === 0) {
-        return void 0;
-      }
-      let folder = folders[0];
-      if (folder.uri.scheme === "file") {
-        return folder.uri.fsPath;
-      }
-      return void 0;
-    }
-    stop() {
-      this._initializeResult = void 0;
-      if (!this._connectionPromise) {
-        this.state = ClientState.Stopped;
-        return Promise.resolve();
-      }
-      if (this.state === ClientState.Stopping && this._onStop) {
-        return this._onStop;
-      }
-      this.state = ClientState.Stopping;
-      this.cleanUp(false);
-      return this._onStop = this.resolveConnection().then((connection) => {
-        return connection.shutdown().then(() => {
-          connection.exit();
-          connection.dispose();
-          this.state = ClientState.Stopped;
-          this.cleanUpChannel();
-          this._onStop = void 0;
-          this._connectionPromise = void 0;
-          this._resolvedConnection = void 0;
-        });
-      });
-    }
-    cleanUp(channel = true, diagnostics = true) {
-      if (this._listeners) {
-        this._listeners.forEach((listener) => listener.dispose());
-        this._listeners = void 0;
-      }
-      if (this._providers) {
-        this._providers.forEach((provider) => provider.dispose());
-        this._providers = void 0;
-      }
-      if (this._syncedDocuments) {
-        this._syncedDocuments.clear();
-      }
-      for (let handler of this._dynamicFeatures.values()) {
-        handler.dispose();
-      }
-      if (channel) {
-        this.cleanUpChannel();
-      }
-      if (diagnostics && this._diagnostics) {
-        this._diagnostics.dispose();
-        this._diagnostics = void 0;
-      }
-    }
-    cleanUpChannel() {
-      if (this._outputChannel && this._disposeOutputChannel) {
-        this._outputChannel.dispose();
-        this._outputChannel = void 0;
-      }
-    }
-    notifyFileEvent(event) {
-      var _a, _b;
-      const client2 = this;
-      function didChangeWatchedFile(event2) {
-        client2._fileEvents.push(event2);
-        client2._fileEventDelayer.trigger(() => {
-          client2.onReady().then(() => {
-            client2.resolveConnection().then((connection) => {
-              if (client2.isConnectionActive()) {
-                client2.forceDocumentSync();
-                connection.didChangeWatchedFiles({changes: client2._fileEvents});
-              }
-              client2._fileEvents = [];
-            });
-          }, (error) => {
-            client2.error(`Notify file events failed.`, error);
-          });
-        });
-      }
-      const workSpaceMiddleware = (_a = this.clientOptions.middleware) === null || _a === void 0 ? void 0 : _a.workspace;
-      ((_b = workSpaceMiddleware) === null || _b === void 0 ? void 0 : _b.didChangeWatchedFile) ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event);
-    }
-    forceDocumentSync() {
-      this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method).forceDelivery();
-    }
-    handleDiagnostics(params) {
-      if (!this._diagnostics) {
-        return;
-      }
-      let uri = this._p2c.asUri(params.uri);
-      let diagnostics = this._p2c.asDiagnostics(params.diagnostics);
-      let middleware = this.clientOptions.middleware;
-      if (middleware.handleDiagnostics) {
-        middleware.handleDiagnostics(uri, diagnostics, (uri2, diagnostics2) => this.setDiagnostics(uri2, diagnostics2));
-      } else {
-        this.setDiagnostics(uri, diagnostics);
-      }
-    }
-    setDiagnostics(uri, diagnostics) {
-      if (!this._diagnostics) {
-        return;
-      }
-      this._diagnostics.set(uri, diagnostics);
-    }
-    createConnection() {
-      let errorHandler = (error, message, count) => {
-        this.handleConnectionError(error, message, count);
-      };
-      let closeHandler = () => {
-        this.handleConnectionClosed();
-      };
-      return this.createMessageTransports(this._clientOptions.stdioEncoding || "utf8").then((transports) => {
-        return createConnection(transports.reader, transports.writer, errorHandler, closeHandler);
-      });
-    }
-    handleConnectionClosed() {
-      if (this.state === ClientState.Stopping || this.state === ClientState.Stopped) {
-        return;
-      }
-      try {
-        if (this._resolvedConnection) {
-          this._resolvedConnection.dispose();
-        }
-      } catch (error) {
-      }
-      let action = CloseAction.DoNotRestart;
-      try {
-        action = this._clientOptions.errorHandler.closed();
-      } catch (error) {
-      }
-      this._connectionPromise = void 0;
-      this._resolvedConnection = void 0;
-      if (action === CloseAction.DoNotRestart) {
-        this.error("Connection to server got closed. Server will not be restarted.");
-        this.state = ClientState.Stopped;
-        this.cleanUp(false, true);
-      } else if (action === CloseAction.Restart) {
-        this.info("Connection to server got closed. Server will restart.");
-        this.cleanUp(false, false);
-        this.state = ClientState.Initial;
-        this.start();
-      }
-    }
-    handleConnectionError(error, message, count) {
-      let action = this._clientOptions.errorHandler.error(error, message, count);
-      if (action === ErrorAction.Shutdown) {
-        this.error("Connection to server is erroring. Shutting down server.");
-        this.stop();
-      }
-    }
-    hookConfigurationChanged(connection) {
-      vscode_1.workspace.onDidChangeConfiguration(() => {
-        this.refreshTrace(connection, true);
-      });
-    }
-    refreshTrace(connection, sendNotification = false) {
-      let config = vscode_1.workspace.getConfiguration(this._id);
-      let trace = vscode_languageserver_protocol_1.Trace.Off;
-      let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;
-      if (config) {
-        const traceConfig = config.get("trace.server", "off");
-        if (typeof traceConfig === "string") {
-          trace = vscode_languageserver_protocol_1.Trace.fromString(traceConfig);
-        } else {
-          trace = vscode_languageserver_protocol_1.Trace.fromString(config.get("trace.server.verbosity", "off"));
-          traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString(config.get("trace.server.format", "text"));
-        }
-      }
-      this._trace = trace;
-      this._traceFormat = traceFormat;
-      connection.trace(this._trace, this._tracer, {
-        sendNotification,
-        traceFormat: this._traceFormat
-      });
-    }
-    hookFileEvents(_connection) {
-      let fileEvents = this._clientOptions.synchronize.fileEvents;
-      if (!fileEvents) {
-        return;
-      }
-      let watchers;
-      if (Is.array(fileEvents)) {
-        watchers = fileEvents;
-      } else {
-        watchers = [fileEvents];
-      }
-      if (!watchers) {
-        return;
-      }
-      this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type.method).registerRaw(UUID.generateUuid(), watchers);
-    }
-    registerFeatures(features) {
-      for (let feature of features) {
-        this.registerFeature(feature);
-      }
-    }
-    registerFeature(feature) {
-      this._features.push(feature);
-      if (DynamicFeature.is(feature)) {
-        let messages = feature.messages;
-        if (Array.isArray(messages)) {
-          for (let message of messages) {
-            this._method2Message.set(message.method, message);
-            this._dynamicFeatures.set(message.method, feature);
-          }
-        } else {
-          this._method2Message.set(messages.method, messages);
-          this._dynamicFeatures.set(messages.method, feature);
-        }
-      }
-    }
-    getFeature(request) {
-      return this._dynamicFeatures.get(request);
-    }
-    registerBuiltinFeatures() {
-      this.registerFeature(new ConfigurationFeature(this));
-      this.registerFeature(new DidOpenTextDocumentFeature(this, this._syncedDocuments));
-      this.registerFeature(new DidChangeTextDocumentFeature(this));
-      this.registerFeature(new WillSaveFeature(this));
-      this.registerFeature(new WillSaveWaitUntilFeature(this));
-      this.registerFeature(new DidSaveTextDocumentFeature(this));
-      this.registerFeature(new DidCloseTextDocumentFeature(this, this._syncedDocuments));
-      this.registerFeature(new FileSystemWatcherFeature(this, (event) => this.notifyFileEvent(event)));
-      this.registerFeature(new CompletionItemFeature(this));
-      this.registerFeature(new HoverFeature(this));
-      this.registerFeature(new SignatureHelpFeature(this));
-      this.registerFeature(new DefinitionFeature(this));
-      this.registerFeature(new ReferencesFeature(this));
-      this.registerFeature(new DocumentHighlightFeature(this));
-      this.registerFeature(new DocumentSymbolFeature(this));
-      this.registerFeature(new WorkspaceSymbolFeature(this));
-      this.registerFeature(new CodeActionFeature(this));
-      this.registerFeature(new CodeLensFeature(this));
-      this.registerFeature(new DocumentFormattingFeature(this));
-      this.registerFeature(new DocumentRangeFormattingFeature(this));
-      this.registerFeature(new DocumentOnTypeFormattingFeature(this));
-      this.registerFeature(new RenameFeature(this));
-      this.registerFeature(new DocumentLinkFeature(this));
-      this.registerFeature(new ExecuteCommandFeature(this));
-    }
-    fillInitializeParams(params) {
-      for (let feature of this._features) {
-        if (Is.func(feature.fillInitializeParams)) {
-          feature.fillInitializeParams(params);
-        }
-      }
-    }
-    computeClientCapabilities() {
-      let result = {};
-      ensure(result, "workspace").applyEdit = true;
-      let workspaceEdit = ensure(ensure(result, "workspace"), "workspaceEdit");
-      workspaceEdit.documentChanges = true;
-      workspaceEdit.resourceOperations = [vscode_languageserver_protocol_1.ResourceOperationKind.Create, vscode_languageserver_protocol_1.ResourceOperationKind.Rename, vscode_languageserver_protocol_1.ResourceOperationKind.Delete];
-      workspaceEdit.failureHandling = vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional;
-      let diagnostics = ensure(ensure(result, "textDocument"), "publishDiagnostics");
-      diagnostics.relatedInformation = true;
-      diagnostics.versionSupport = false;
-      diagnostics.tagSupport = {valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated]};
-      for (let feature of this._features) {
-        feature.fillClientCapabilities(result);
-      }
-      return result;
-    }
-    initializeFeatures(_connection) {
-      let documentSelector = this._clientOptions.documentSelector;
-      for (let feature of this._features) {
-        feature.initialize(this._capabilities, documentSelector);
-      }
-    }
-    handleRegistrationRequest(params) {
-      return new Promise((resolve, reject) => {
-        for (let registration of params.registrations) {
-          const feature = this._dynamicFeatures.get(registration.method);
-          if (!feature) {
-            reject(new Error(`No feature implementation for ${registration.method} found. Registration failed.`));
-            return;
-          }
-          const options = registration.registerOptions || {};
-          options.documentSelector = options.documentSelector || this._clientOptions.documentSelector;
-          const data = {
-            id: registration.id,
-            registerOptions: options
-          };
-          feature.register(this._method2Message.get(registration.method), data);
-        }
-        resolve();
-      });
-    }
-    handleUnregistrationRequest(params) {
-      return new Promise((resolve, reject) => {
-        for (let unregistration of params.unregisterations) {
-          const feature = this._dynamicFeatures.get(unregistration.method);
-          if (!feature) {
-            reject(new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`));
-            return;
-          }
-          feature.unregister(unregistration.id);
-        }
-        resolve();
-      });
-    }
-    handleApplyWorkspaceEdit(params) {
-      let workspaceEdit = params.edit;
-      let openTextDocuments = new Map();
-      vscode_1.workspace.textDocuments.forEach((document) => openTextDocuments.set(document.uri.toString(), document));
-      let versionMismatch = false;
-      if (workspaceEdit.documentChanges) {
-        for (const change of workspaceEdit.documentChanges) {
-          if (vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && change.textDocument.version && change.textDocument.version >= 0) {
-            let textDocument = openTextDocuments.get(change.textDocument.uri);
-            if (textDocument && textDocument.version !== change.textDocument.version) {
-              versionMismatch = true;
-              break;
-            }
-          }
-        }
-      }
-      if (versionMismatch) {
-        return Promise.resolve({applied: false});
-      }
-      return Is.asPromise(vscode_1.workspace.applyEdit(this._p2c.asWorkspaceEdit(params.edit)).then((value) => {
-        return {applied: value};
-      }));
-    }
-    logFailedRequest(type, error) {
-      if (error instanceof vscode_languageserver_protocol_1.ResponseError && (error.code === vscode_languageserver_protocol_1.ErrorCodes.RequestCancelled || error.code === vscode_languageserver_protocol_1.ErrorCodes.ContentModified)) {
-        return;
-      }
-      this.error(`Request ${type.method} failed.`, error);
-    }
-  };
-  exports2.BaseLanguageClient = BaseLanguageClient;
-});
-
-// node_modules/vscode-languageclient/lib/colorProvider.js
-var require_colorProvider = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var ColorProviderFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DocumentColorRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "colorProvider").dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideColorPresentations: (color, context, token) => {
-          const client2 = this._client;
-          const provideColorPresentations = (color2, context2, token2) => {
-            const requestParams = {
-              color: color2,
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(context2.document),
-              range: client2.code2ProtocolConverter.asRange(context2.range)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, requestParams, token2).then(this.asColorPresentations.bind(this), (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideColorPresentations ? middleware.provideColorPresentations(color, context, token, provideColorPresentations) : provideColorPresentations(color, context, token);
-        },
-        provideDocumentColors: (document, token) => {
-          const client2 = this._client;
-          const provideDocumentColors = (document2, token2) => {
-            const requestParams = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, requestParams, token2).then(this.asColorInformations.bind(this), (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDocumentColors ? middleware.provideDocumentColors(document, token, provideDocumentColors) : provideDocumentColors(document, token);
-        }
-      };
-      return [vscode_1.languages.registerColorProvider(options.documentSelector, provider), provider];
-    }
-    asColor(color) {
-      return new vscode_1.Color(color.red, color.green, color.blue, color.alpha);
-    }
-    asColorInformations(colorInformation) {
-      if (Array.isArray(colorInformation)) {
-        return colorInformation.map((ci) => {
-          return new vscode_1.ColorInformation(this._client.protocol2CodeConverter.asRange(ci.range), this.asColor(ci.color));
-        });
-      }
-      return [];
-    }
-    asColorPresentations(colorPresentations) {
-      if (Array.isArray(colorPresentations)) {
-        return colorPresentations.map((cp) => {
-          let presentation = new vscode_1.ColorPresentation(cp.label);
-          presentation.additionalTextEdits = this._client.protocol2CodeConverter.asTextEdits(cp.additionalTextEdits);
-          presentation.textEdit = this._client.protocol2CodeConverter.asTextEdit(cp.textEdit);
-          return presentation;
-        });
-      }
-      return [];
-    }
-  };
-  exports2.ColorProviderFeature = ColorProviderFeature;
-});
-
-// node_modules/vscode-languageclient/lib/configuration.js
-var require_configuration = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var ConfigurationFeature = class {
-    constructor(_client) {
-      this._client = _client;
-    }
-    fillClientCapabilities(capabilities) {
-      capabilities.workspace = capabilities.workspace || {};
-      capabilities.workspace.configuration = true;
-    }
-    initialize() {
-      let client2 = this._client;
-      client2.onRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, (params, token) => {
-        let configuration = (params2) => {
-          let result = [];
-          for (let item of params2.items) {
-            let resource = item.scopeUri !== void 0 && item.scopeUri !== null ? this._client.protocol2CodeConverter.asUri(item.scopeUri) : void 0;
-            result.push(this.getConfiguration(resource, item.section !== null ? item.section : void 0));
-          }
-          return result;
-        };
-        let middleware = client2.clientOptions.middleware.workspace;
-        return middleware && middleware.configuration ? middleware.configuration(params, token, configuration) : configuration(params, token);
-      });
-    }
-    getConfiguration(resource, section) {
-      let result = null;
-      if (section) {
-        let index = section.lastIndexOf(".");
-        if (index === -1) {
-          result = vscode_1.workspace.getConfiguration(void 0, resource).get(section);
-        } else {
-          let config = vscode_1.workspace.getConfiguration(section.substr(0, index), resource);
-          if (config) {
-            result = config.get(section.substr(index + 1));
-          }
-        }
-      } else {
-        let config = vscode_1.workspace.getConfiguration(void 0, resource);
-        result = {};
-        for (let key of Object.keys(config)) {
-          if (config.has(key)) {
-            result[key] = config.get(key);
-          }
-        }
-      }
-      if (!result) {
-        return null;
-      }
-      return result;
-    }
-  };
-  exports2.ConfigurationFeature = ConfigurationFeature;
-});
-
-// node_modules/vscode-languageclient/lib/implementation.js
-var require_implementation = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var ImplementationFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.ImplementationRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let implementationSupport = ensure(ensure(capabilites, "textDocument"), "implementation");
-      implementationSupport.dynamicRegistration = true;
-      implementationSupport.linkSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideImplementation: (document, position, token) => {
-          const client2 = this._client;
-          const provideImplementation = (document2, position2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDefinitionResult, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideImplementation ? middleware.provideImplementation(document, position, token, provideImplementation) : provideImplementation(document, position, token);
-        }
-      };
-      return [vscode_1.languages.registerImplementationProvider(options.documentSelector, provider), provider];
-    }
-  };
-  exports2.ImplementationFeature = ImplementationFeature;
-});
-
-// node_modules/vscode-languageclient/lib/typeDefinition.js
-var require_typeDefinition = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var TypeDefinitionFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.TypeDefinitionRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      ensure(ensure(capabilites, "textDocument"), "typeDefinition").dynamicRegistration = true;
-      let typeDefinitionSupport = ensure(ensure(capabilites, "textDocument"), "typeDefinition");
-      typeDefinitionSupport.dynamicRegistration = true;
-      typeDefinitionSupport.linkSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideTypeDefinition: (document, position, token) => {
-          const client2 = this._client;
-          const provideTypeDefinition = (document2, position2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDefinitionResult, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideTypeDefinition ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition) : provideTypeDefinition(document, position, token);
-        }
-      };
-      return [vscode_1.languages.registerTypeDefinitionProvider(options.documentSelector, provider), provider];
-    }
-  };
-  exports2.TypeDefinitionFeature = TypeDefinitionFeature;
-});
-
-// node_modules/vscode-languageclient/lib/workspaceFolders.js
-var require_workspaceFolders = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var UUID = require_uuid();
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  function access(target, key) {
-    if (target === void 0) {
-      return void 0;
-    }
-    return target[key];
-  }
-  function arrayDiff(left, right) {
-    return left.filter((element) => right.indexOf(element) < 0);
-  }
-  exports2.arrayDiff = arrayDiff;
-  var WorkspaceFoldersFeature = class {
-    constructor(_client) {
-      this._client = _client;
-      this._listeners = new Map();
-    }
-    get messages() {
-      return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;
-    }
-    fillInitializeParams(params) {
-      let folders = vscode_1.workspace.workspaceFolders;
-      this.initializeWithFolders(folders);
-      if (folders === void 0) {
-        params.workspaceFolders = null;
-      } else {
-        params.workspaceFolders = folders.map((folder) => this.asProtocol(folder));
-      }
-    }
-    initializeWithFolders(currentWorkspaceFolders) {
-      this._initialFolders = currentWorkspaceFolders;
-    }
-    fillClientCapabilities(capabilities) {
-      capabilities.workspace = capabilities.workspace || {};
-      capabilities.workspace.workspaceFolders = true;
-    }
-    initialize(capabilities) {
-      let client2 = this._client;
-      client2.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {
-        let workspaceFolders = () => {
-          let folders = vscode_1.workspace.workspaceFolders;
-          if (folders === void 0) {
-            return null;
-          }
-          let result = folders.map((folder) => {
-            return this.asProtocol(folder);
-          });
-          return result;
-        };
-        let middleware = client2.clientOptions.middleware.workspace;
-        return middleware && middleware.workspaceFolders ? middleware.workspaceFolders(token, workspaceFolders) : workspaceFolders(token);
-      });
-      let value = access(access(access(capabilities, "workspace"), "workspaceFolders"), "changeNotifications");
-      let id;
-      if (typeof value === "string") {
-        id = value;
-      } else if (value === true) {
-        id = UUID.generateUuid();
-      }
-      if (id) {
-        this.register(this.messages, {
-          id,
-          registerOptions: void 0
-        });
-      }
-    }
-    sendInitialEvent(currentWorkspaceFolders) {
-      if (this._initialFolders && currentWorkspaceFolders) {
-        const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);
-        const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);
-        if (added.length > 0 || removed.length > 0) {
-          this.doSendEvent(added, removed);
-        }
-      } else if (this._initialFolders) {
-        this.doSendEvent([], this._initialFolders);
-      } else if (currentWorkspaceFolders) {
-        this.doSendEvent(currentWorkspaceFolders, []);
-      }
-    }
-    doSendEvent(addedFolders, removedFolders) {
-      let params = {
-        event: {
-          added: addedFolders.map((folder) => this.asProtocol(folder)),
-          removed: removedFolders.map((folder) => this.asProtocol(folder))
-        }
-      };
-      this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);
-    }
-    register(_message, data) {
-      let id = data.id;
-      let client2 = this._client;
-      let disposable = vscode_1.workspace.onDidChangeWorkspaceFolders((event) => {
-        let didChangeWorkspaceFolders = (event2) => {
-          this.doSendEvent(event2.added, event2.removed);
-        };
-        let middleware = client2.clientOptions.middleware.workspace;
-        middleware && middleware.didChangeWorkspaceFolders ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders) : didChangeWorkspaceFolders(event);
-      });
-      this._listeners.set(id, disposable);
-      this.sendInitialEvent(vscode_1.workspace.workspaceFolders);
-    }
-    unregister(id) {
-      let disposable = this._listeners.get(id);
-      if (disposable === void 0) {
-        return;
-      }
-      this._listeners.delete(id);
-      disposable.dispose();
-    }
-    dispose() {
-      for (let disposable of this._listeners.values()) {
-        disposable.dispose();
-      }
-      this._listeners.clear();
-    }
-    asProtocol(workspaceFolder) {
-      if (workspaceFolder === void 0) {
-        return null;
-      }
-      return {uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), name: workspaceFolder.name};
-    }
-  };
-  exports2.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
-});
-
-// node_modules/vscode-languageclient/lib/foldingRange.js
-var require_foldingRange = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var FoldingRangeFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.FoldingRangeRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let capability = ensure(ensure(capabilites, "textDocument"), "foldingRange");
-      capability.dynamicRegistration = true;
-      capability.rangeLimit = 5e3;
-      capability.lineFoldingOnly = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideFoldingRanges: (document, context, token) => {
-          const client2 = this._client;
-          const provideFoldingRanges = (document2, _, token2) => {
-            const requestParams = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token2).then(this.asFoldingRanges.bind(this), (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideFoldingRanges ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges) : provideFoldingRanges(document, context, token);
-        }
-      };
-      return [vscode_1.languages.registerFoldingRangeProvider(options.documentSelector, provider), provider];
-    }
-    asFoldingRangeKind(kind) {
-      if (kind) {
-        switch (kind) {
-          case vscode_languageserver_protocol_1.FoldingRangeKind.Comment:
-            return vscode_1.FoldingRangeKind.Comment;
-          case vscode_languageserver_protocol_1.FoldingRangeKind.Imports:
-            return vscode_1.FoldingRangeKind.Imports;
-          case vscode_languageserver_protocol_1.FoldingRangeKind.Region:
-            return vscode_1.FoldingRangeKind.Region;
-        }
-      }
-      return void 0;
-    }
-    asFoldingRanges(foldingRanges) {
-      if (Array.isArray(foldingRanges)) {
-        return foldingRanges.map((r) => {
-          return new vscode_1.FoldingRange(r.startLine, r.endLine, this.asFoldingRangeKind(r.kind));
-        });
-      }
-      return [];
-    }
-  };
-  exports2.FoldingRangeFeature = FoldingRangeFeature;
-});
-
-// node_modules/vscode-languageclient/lib/declaration.js
-var require_declaration = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var DeclarationFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.DeclarationRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      const declarationSupport = ensure(ensure(capabilites, "textDocument"), "declaration");
-      declarationSupport.dynamicRegistration = true;
-      declarationSupport.linkSupport = true;
-    }
-    initialize(capabilities, documentSelector) {
-      const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideDeclaration: (document, position, token) => {
-          const client2 = this._client;
-          const provideDeclaration = (document2, position2, token2) => {
-            return client2.sendRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then(client2.protocol2CodeConverter.asDeclarationResult, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideDeclaration ? middleware.provideDeclaration(document, position, token, provideDeclaration) : provideDeclaration(document, position, token);
-        }
-      };
-      return [vscode_1.languages.registerDeclarationProvider(options.documentSelector, provider), provider];
-    }
-  };
-  exports2.DeclarationFeature = DeclarationFeature;
-});
-
-// node_modules/vscode-languageclient/lib/selectionRange.js
-var require_selectionRange = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = Object.create(null);
-    }
-    return target[key];
-  }
-  var SelectionRangeFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.SelectionRangeRequest.type);
-    }
-    fillClientCapabilities(capabilites) {
-      let capability = ensure(ensure(capabilites, "textDocument"), "selectionRange");
-      capability.dynamicRegistration = true;
-    }
-    initialize(capabilities, documentSelector) {
-      let [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const provider = {
-        provideSelectionRanges: (document, positions, token) => {
-          const client2 = this._client;
-          const provideSelectionRanges = (document2, positions2, token2) => {
-            const requestParams = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              positions: client2.code2ProtocolConverter.asPositions(positions2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, requestParams, token2).then((ranges) => client2.protocol2CodeConverter.asSelectionRanges(ranges), (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, error);
-              return Promise.resolve(null);
-            });
-          };
-          const middleware = client2.clientOptions.middleware;
-          return middleware.provideSelectionRanges ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges) : provideSelectionRanges(document, positions, token);
-        }
-      };
-      return [vscode_1.languages.registerSelectionRangeProvider(options.documentSelector, provider), provider];
-    }
-  };
-  exports2.SelectionRangeFeature = SelectionRangeFeature;
-});
-
-// node_modules/vscode-languageclient/lib/progress.js
-var require_progress = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_languageserver_protocol_1 = require_main3();
-  var progressPart_1 = require_progressPart();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = Object.create(null);
-    }
-    return target[key];
-  }
-  var ProgressFeature = class {
-    constructor(_client) {
-      this._client = _client;
-    }
-    fillClientCapabilities(capabilities) {
-      ensure(capabilities, "window").workDoneProgress = true;
-    }
-    initialize() {
-      let client2 = this._client;
-      let createHandler = (params) => {
-        new progressPart_1.ProgressPart(this._client, params.token);
-      };
-      client2.onRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, createHandler);
-    }
-  };
-  exports2.ProgressFeature = ProgressFeature;
-});
-
-// node_modules/vscode-languageclient/lib/callHierarchy.proposed.js
-var require_callHierarchy_proposed = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var client_1 = require_client();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var protocol2code;
-  (function(protocol2code2) {
-    function asCallHierarchyItem(converter, item) {
-      if (item === null) {
-        return void 0;
-      }
-      let result = new vscode_1.CallHierarchyItem(converter.asSymbolKind(item.kind), item.name, item.detail || "", converter.asUri(item.uri), converter.asRange(item.range), converter.asRange(item.selectionRange));
-      if (item.tags !== void 0) {
-        result.tags = converter.asSymbolTags(item.tags);
-      }
-      return result;
-    }
-    protocol2code2.asCallHierarchyItem = asCallHierarchyItem;
-    function asCallHierarchyItems(converter, items) {
-      if (items === null) {
-        return void 0;
-      }
-      let result = items.map((item) => asCallHierarchyItem(converter, item));
-      return result[0];
-    }
-    protocol2code2.asCallHierarchyItems = asCallHierarchyItems;
-    function asCallHierarchyIncomingCall(converter, item) {
-      return new vscode_1.CallHierarchyIncomingCall(asCallHierarchyItem(converter, item.from), converter.asRanges(item.fromRanges));
-    }
-    protocol2code2.asCallHierarchyIncomingCall = asCallHierarchyIncomingCall;
-    function asCallHierarchyIncomingCalls(converter, items) {
-      if (items === null) {
-        return void 0;
-      }
-      return items.map((item) => asCallHierarchyIncomingCall(converter, item));
-    }
-    protocol2code2.asCallHierarchyIncomingCalls = asCallHierarchyIncomingCalls;
-    function asCallHierarchyOutgoingCall(converter, item) {
-      return new vscode_1.CallHierarchyOutgoingCall(asCallHierarchyItem(converter, item.to), converter.asRanges(item.fromRanges));
-    }
-    protocol2code2.asCallHierarchyOutgoingCall = asCallHierarchyOutgoingCall;
-    function asCallHierarchyOutgoingCalls(converter, items) {
-      if (items === null) {
-        return void 0;
-      }
-      return items.map((item) => asCallHierarchyOutgoingCall(converter, item));
-    }
-    protocol2code2.asCallHierarchyOutgoingCalls = asCallHierarchyOutgoingCalls;
-  })(protocol2code || (protocol2code = {}));
-  var code2protocol;
-  (function(code2protocol2) {
-    function asCallHierarchyItem(converter, value) {
-      const result = {
-        name: value.name,
-        kind: converter.asSymbolKind(value.kind),
-        uri: converter.asUri(value.uri),
-        range: converter.asRange(value.range),
-        selectionRange: converter.asRange(value.selectionRange)
-      };
-      if (value.detail !== void 0 && value.detail.length > 0) {
-        result.detail = value.detail;
-      }
-      if (value.tags !== void 0) {
-        result.tags = converter.asSymbolTags(value.tags);
-      }
-      return result;
-    }
-    code2protocol2.asCallHierarchyItem = asCallHierarchyItem;
-  })(code2protocol || (code2protocol = {}));
-  var CallHierarchyProvider = class {
-    constructor(client2) {
-      this.client = client2;
-      this.middleware = client2.clientOptions.middleware;
-    }
-    prepareCallHierarchy(document, position, token) {
-      const client2 = this.client;
-      const middleware = this.middleware;
-      const prepareCallHierarchy = (document2, position2, token2) => {
-        const params = client2.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2);
-        return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, params, token2).then((result) => {
-          return protocol2code.asCallHierarchyItems(this.client.protocol2CodeConverter, result);
-        }, (error) => {
-          client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, error);
-          return Promise.resolve(null);
-        });
-      };
-      return middleware.prepareCallHierarchy ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy) : prepareCallHierarchy(document, position, token);
-    }
-    provideCallHierarchyIncomingCalls(item, token) {
-      const client2 = this.client;
-      const middleware = this.middleware;
-      const provideCallHierarchyIncomingCalls = (item2, token2) => {
-        const params = {
-          item: code2protocol.asCallHierarchyItem(client2.code2ProtocolConverter, item2)
-        };
-        return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, params, token2).then((result) => {
-          return protocol2code.asCallHierarchyIncomingCalls(client2.protocol2CodeConverter, result);
-        }, (error) => {
-          client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, error);
-          return Promise.resolve(null);
-        });
-      };
-      return middleware.provideCallHierarchyIncomingCalls ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls) : provideCallHierarchyIncomingCalls(item, token);
-    }
-    provideCallHierarchyOutgoingCalls(item, token) {
-      const client2 = this.client;
-      const middleware = this.middleware;
-      const provideCallHierarchyOutgoingCalls = (item2, token2) => {
-        const params = {
-          item: code2protocol.asCallHierarchyItem(client2.code2ProtocolConverter, item2)
-        };
-        return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, params, token2).then((result) => {
-          return protocol2code.asCallHierarchyOutgoingCalls(client2.protocol2CodeConverter, result);
-        }, (error) => {
-          client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, error);
-          return Promise.resolve(null);
-        });
-      };
-      return middleware.provideCallHierarchyOutgingCalls ? middleware.provideCallHierarchyOutgingCalls(item, token, provideCallHierarchyOutgoingCalls) : provideCallHierarchyOutgoingCalls(item, token);
-    }
-  };
-  var CallHierarchyFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type);
-    }
-    fillClientCapabilities(cap) {
-      const capabilites = cap;
-      const capability = ensure(ensure(capabilites, "textDocument"), "callHierarchy");
-      capability.dynamicRegistration = true;
-    }
-    initialize(cap, documentSelector) {
-      const capabilities = cap;
-      const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const client2 = this._client;
-      const provider = new CallHierarchyProvider(client2);
-      return [vscode_1.languages.registerCallHierarchyProvider(options.documentSelector, provider), provider];
-    }
-  };
-  exports2.CallHierarchyFeature = CallHierarchyFeature;
-});
-
-// node_modules/vscode-languageclient/lib/semanticTokens.proposed.js
-var require_semanticTokens_proposed = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var vscode6 = require("vscode");
-  var client_1 = require_client();
-  var vscode_languageserver_protocol_1 = require_main3();
-  function ensure(target, key) {
-    if (target[key] === void 0) {
-      target[key] = {};
-    }
-    return target[key];
-  }
-  var protocol2code;
-  (function(protocol2code2) {
-    function asSemanticTokens(value) {
-      if (value === void 0 || value === null) {
-        return void 0;
-      }
-      return new vscode6.SemanticTokens(new Uint32Array(value.data), value.resultId);
-    }
-    protocol2code2.asSemanticTokens = asSemanticTokens;
-    function asSemanticTokensEdit(value) {
-      return new vscode6.SemanticTokensEdit(value.start, value.deleteCount, value.data !== void 0 ? new Uint32Array(value.data) : void 0);
-    }
-    protocol2code2.asSemanticTokensEdit = asSemanticTokensEdit;
-    function asSemanticTokensEdits(value) {
-      if (value === void 0 || value === null) {
-        return void 0;
-      }
-      return new vscode6.SemanticTokensEdits(value.edits.map(asSemanticTokensEdit), value.resultId);
-    }
-    protocol2code2.asSemanticTokensEdits = asSemanticTokensEdits;
-    function asLegend(value) {
-      return value;
-    }
-    protocol2code2.asLegend = asLegend;
-  })(protocol2code || (protocol2code = {}));
-  var SemanticTokensFeature = class extends client_1.TextDocumentFeature {
-    constructor(client2) {
-      super(client2, vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type);
-    }
-    fillClientCapabilities(cap) {
-      const capabilites = cap;
-      let capability = ensure(ensure(capabilites, "textDocument"), "semanticTokens");
-      capability.dynamicRegistration = true;
-      capability.tokenTypes = [
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.comment,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.keyword,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.number,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.regexp,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.operator,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.namespace,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.type,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.struct,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.class,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.interface,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.enum,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.typeParameter,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.function,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.member,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.macro,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.variable,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.parameter,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.property,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.label
-      ];
-      capability.tokenModifiers = [
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.declaration,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.documentation,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.static,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.abstract,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.deprecated,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.async,
-        vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.readonly
-      ];
-    }
-    initialize(cap, documentSelector) {
-      const capabilities = cap;
-      let [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);
-      if (!id || !options) {
-        return;
-      }
-      this.register(this.messages, {id, registerOptions: options});
-    }
-    registerLanguageProvider(options) {
-      const hasEditProvider = options.documentProvider !== void 0 && typeof options.documentProvider !== "boolean" && options.documentProvider.edits === true;
-      const documentProvider = {
-        provideDocumentSemanticTokens: (document, token) => {
-          const client2 = this._client;
-          const middleware = client2.clientOptions.middleware;
-          const provideDocumentSemanticTokens = (document2, token2) => {
-            const params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, params, token2).then((result) => {
-              return protocol2code.asSemanticTokens(result);
-            }, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, error);
-              return void 0;
-            });
-          };
-          return middleware.provideDocumentSemanticTokens ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens) : provideDocumentSemanticTokens(document, token);
-        },
-        provideDocumentSemanticTokensEdits: hasEditProvider ? (document, previousResultId, token) => {
-          const client2 = this._client;
-          const middleware = client2.clientOptions.middleware;
-          const provideDocumentSemanticTokensEdits = (document2, previousResultId2, token2) => {
-            const params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              previousResultId: previousResultId2
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, params, token2).then((result) => {
-              if (vscode_languageserver_protocol_1.Proposed.SemanticTokens.is(result)) {
-                return protocol2code.asSemanticTokens(result);
-              } else {
-                return protocol2code.asSemanticTokensEdits(result);
-              }
-            }, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, error);
-              return void 0;
-            });
-          };
-          return middleware.provideDocumentSemanticTokensEdits ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits) : provideDocumentSemanticTokensEdits(document, previousResultId, token);
-        } : void 0
-      };
-      const hasRangeProvider = options.rangeProvider === true;
-      const rangeProvider = hasRangeProvider ? {
-        provideDocumentRangeSemanticTokens: (document, range, token) => {
-          const client2 = this._client;
-          const middleware = client2.clientOptions.middleware;
-          const provideDocumentRangeSemanticTokens = (document2, range2, token2) => {
-            const params = {
-              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
-              range: client2.code2ProtocolConverter.asRange(range2)
-            };
-            return client2.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, params, token2).then((result) => {
-              return protocol2code.asSemanticTokens(result);
-            }, (error) => {
-              client2.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, error);
-              return void 0;
-            });
-          };
-          return middleware.provideDocumentRangeSemanticTokens ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens) : provideDocumentRangeSemanticTokens(document, range, token);
-        }
-      } : void 0;
-      const disposables = [];
-      const legend = protocol2code.asLegend(options.legend);
-      disposables.push(vscode6.languages.registerDocumentSemanticTokensProvider(options.documentSelector, documentProvider, legend));
-      if (rangeProvider !== void 0) {
-        disposables.push(vscode6.languages.registerDocumentRangeSemanticTokensProvider(options.documentSelector, rangeProvider, legend));
-      }
-      return [new vscode6.Disposable(() => disposables.forEach((item) => item.dispose())), {document: documentProvider, range: rangeProvider}];
-    }
-  };
-  exports2.SemanticTokensFeature = SemanticTokensFeature;
-});
-
-// node_modules/vscode-languageclient/lib/utils/processes.js
-var require_processes = __commonJS((exports2) => {
-  "use strict";
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var cp = require("child_process");
-  var path_1 = require("path");
-  var isWindows = process.platform === "win32";
-  var isMacintosh = process.platform === "darwin";
-  var isLinux = process.platform === "linux";
-  function terminate(process2, cwd) {
-    if (isWindows) {
-      try {
-        let options = {
-          stdio: ["pipe", "pipe", "ignore"]
-        };
-        if (cwd) {
-          options.cwd = cwd;
-        }
-        cp.execFileSync("taskkill", ["/T", "/F", "/PID", process2.pid.toString()], options);
-        return true;
-      } catch (err) {
-        return false;
-      }
-    } else if (isLinux || isMacintosh) {
-      try {
-        var cmd = path_1.join(__dirname, "terminateProcess.sh");
-        var result = cp.spawnSync(cmd, [process2.pid.toString()]);
-        return result.error ? false : true;
-      } catch (err) {
-        return false;
-      }
-    } else {
-      process2.kill("SIGKILL");
-      return true;
-    }
-  }
-  exports2.terminate = terminate;
-});
-
-// node_modules/vscode-languageclient/lib/main.js
-var require_main4 = __commonJS((exports2) => {
-  "use strict";
-  function __export2(m) {
-    for (var p in m)
-      if (!exports2.hasOwnProperty(p))
-        exports2[p] = m[p];
-  }
-  Object.defineProperty(exports2, "__esModule", {value: true});
-  var cp = require("child_process");
-  var fs = require("fs");
-  var SemVer = require_semver();
-  var client_1 = require_client();
-  var vscode_1 = require("vscode");
-  var vscode_languageserver_protocol_1 = require_main3();
-  var colorProvider_1 = require_colorProvider();
-  var configuration_1 = require_configuration();
-  var implementation_1 = require_implementation();
-  var typeDefinition_1 = require_typeDefinition();
-  var workspaceFolders_1 = require_workspaceFolders();
-  var foldingRange_1 = require_foldingRange();
-  var declaration_1 = require_declaration();
-  var selectionRange_1 = require_selectionRange();
-  var progress_1 = require_progress();
-  var callHierarchy_proposed_1 = require_callHierarchy_proposed();
-  var semanticTokens_proposed_1 = require_semanticTokens_proposed();
-  var Is = require_is3();
-  var processes_1 = require_processes();
-  __export2(require_client());
-  var REQUIRED_VSCODE_VERSION = "^1.41.0";
-  var Executable;
-  (function(Executable2) {
-    function is(value) {
-      return Is.string(value.command);
-    }
-    Executable2.is = is;
-  })(Executable || (Executable = {}));
-  var TransportKind;
-  (function(TransportKind2) {
-    TransportKind2[TransportKind2["stdio"] = 0] = "stdio";
-    TransportKind2[TransportKind2["ipc"] = 1] = "ipc";
-    TransportKind2[TransportKind2["pipe"] = 2] = "pipe";
-    TransportKind2[TransportKind2["socket"] = 3] = "socket";
-  })(TransportKind = exports2.TransportKind || (exports2.TransportKind = {}));
-  var Transport;
-  (function(Transport2) {
-    function isSocket(value) {
-      let candidate = value;
-      return candidate && candidate.kind === TransportKind.socket && Is.number(candidate.port);
-    }
-    Transport2.isSocket = isSocket;
-  })(Transport || (Transport = {}));
-  var NodeModule;
-  (function(NodeModule2) {
-    function is(value) {
-      return Is.string(value.module);
-    }
-    NodeModule2.is = is;
-  })(NodeModule || (NodeModule = {}));
-  var StreamInfo;
-  (function(StreamInfo2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && candidate.writer !== void 0 && candidate.reader !== void 0;
-    }
-    StreamInfo2.is = is;
-  })(StreamInfo || (StreamInfo = {}));
-  var ChildProcessInfo;
-  (function(ChildProcessInfo2) {
-    function is(value) {
-      let candidate = value;
-      return candidate && candidate.process !== void 0 && typeof candidate.detached === "boolean";
-    }
-    ChildProcessInfo2.is = is;
-  })(ChildProcessInfo || (ChildProcessInfo = {}));
-  var LanguageClient2 = class extends client_1.BaseLanguageClient {
-    constructor(arg1, arg2, arg3, arg4, arg5) {
-      let id;
-      let name;
-      let serverOptions;
-      let clientOptions;
-      let forceDebug;
-      if (Is.string(arg2)) {
-        id = arg1;
-        name = arg2;
-        serverOptions = arg3;
-        clientOptions = arg4;
-        forceDebug = !!arg5;
-      } else {
-        id = arg1.toLowerCase();
-        name = arg1;
-        serverOptions = arg2;
-        clientOptions = arg3;
-        forceDebug = arg4;
-      }
-      if (forceDebug === void 0) {
-        forceDebug = false;
-      }
-      super(id, name, clientOptions);
-      this._serverOptions = serverOptions;
-      this._forceDebug = forceDebug;
-      try {
-        this.checkVersion();
-      } catch (error) {
-        if (Is.string(error.message)) {
-          this.outputChannel.appendLine(error.message);
-        }
-        throw error;
-      }
-    }
-    checkVersion() {
-      let codeVersion = SemVer.parse(vscode_1.version);
-      if (!codeVersion) {
-        throw new Error(`No valid VS Code version detected. Version string is: ${vscode_1.version}`);
-      }
-      if (codeVersion.prerelease && codeVersion.prerelease.length > 0) {
-        codeVersion.prerelease = [];
-      }
-      if (!SemVer.satisfies(codeVersion, REQUIRED_VSCODE_VERSION)) {
-        throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${vscode_1.version}`);
-      }
-    }
-    stop() {
-      return super.stop().then(() => {
-        if (this._serverProcess) {
-          let toCheck = this._serverProcess;
-          this._serverProcess = void 0;
-          if (this._isDetached === void 0 || !this._isDetached) {
-            this.checkProcessDied(toCheck);
-          }
-          this._isDetached = void 0;
-        }
-      });
-    }
-    checkProcessDied(childProcess) {
-      if (!childProcess) {
-        return;
-      }
-      setTimeout(() => {
-        try {
-          process.kill(childProcess.pid, 0);
-          processes_1.terminate(childProcess);
-        } catch (error) {
-        }
-      }, 2e3);
-    }
-    handleConnectionClosed() {
-      this._serverProcess = void 0;
-      super.handleConnectionClosed();
-    }
-    createMessageTransports(encoding) {
-      function getEnvironment(env, fork) {
-        if (!env && !fork) {
-          return void 0;
-        }
-        let result = Object.create(null);
-        Object.keys(process.env).forEach((key) => result[key] = process.env[key]);
-        if (fork) {
-          result["ELECTRON_RUN_AS_NODE"] = "1";
-          result["ELECTRON_NO_ASAR"] = "1";
-        }
-        if (env) {
-          Object.keys(env).forEach((key) => result[key] = env[key]);
-        }
-        return result;
-      }
-      const debugStartWith = ["--debug=", "--debug-brk=", "--inspect=", "--inspect-brk="];
-      const debugEquals = ["--debug", "--debug-brk", "--inspect", "--inspect-brk"];
-      function startedInDebugMode() {
-        let args = process.execArgv;
-        if (args) {
-          return args.some((arg) => {
-            return debugStartWith.some((value) => arg.startsWith(value)) || debugEquals.some((value) => arg === value);
-          });
-        }
-        return false;
-      }
-      function assertStdio(process2) {
-        if (process2.stdin === null || process2.stdout === null || process2.stderr === null) {
-          throw new Error("Process created without stdio streams");
-        }
-      }
-      let server = this._serverOptions;
-      if (Is.func(server)) {
-        return server().then((result) => {
-          if (client_1.MessageTransports.is(result)) {
-            this._isDetached = !!result.detached;
-            return result;
-          } else if (StreamInfo.is(result)) {
-            this._isDetached = !!result.detached;
-            return {reader: new vscode_languageserver_protocol_1.StreamMessageReader(result.reader), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(result.writer)};
-          } else {
-            let cp2;
-            if (ChildProcessInfo.is(result)) {
-              cp2 = result.process;
-              this._isDetached = result.detached;
-            } else {
-              cp2 = result;
-              this._isDetached = false;
-            }
-            cp2.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-            return {reader: new vscode_languageserver_protocol_1.StreamMessageReader(cp2.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(cp2.stdin)};
-          }
-        });
-      }
-      let json;
-      let runDebug = server;
-      if (runDebug.run || runDebug.debug) {
-        if (this._forceDebug || startedInDebugMode()) {
-          json = runDebug.debug;
-        } else {
-          json = runDebug.run;
-        }
-      } else {
-        json = server;
-      }
-      return this._getServerWorkingDir(json.options).then((serverWorkingDir) => {
-        if (NodeModule.is(json) && json.module) {
-          let node = json;
-          let transport = node.transport || TransportKind.stdio;
-          if (node.runtime) {
-            let args = [];
-            let options = node.options || Object.create(null);
-            if (options.execArgv) {
-              options.execArgv.forEach((element) => args.push(element));
-            }
-            args.push(node.module);
-            if (node.args) {
-              node.args.forEach((element) => args.push(element));
-            }
-            let execOptions = Object.create(null);
-            execOptions.cwd = serverWorkingDir;
-            execOptions.env = getEnvironment(options.env, false);
-            let pipeName = void 0;
-            if (transport === TransportKind.ipc) {
-              execOptions.stdio = [null, null, null, "ipc"];
-              args.push("--node-ipc");
-            } else if (transport === TransportKind.stdio) {
-              args.push("--stdio");
-            } else if (transport === TransportKind.pipe) {
-              pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();
-              args.push(`--pipe=${pipeName}`);
-            } else if (Transport.isSocket(transport)) {
-              args.push(`--socket=${transport.port}`);
-            }
-            args.push(`--clientProcessId=${process.pid.toString()}`);
-            if (transport === TransportKind.ipc || transport === TransportKind.stdio) {
-              let serverProcess = cp.spawn(node.runtime, args, execOptions);
-              if (!serverProcess || !serverProcess.pid) {
-                return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);
-              }
-              this._serverProcess = serverProcess;
-              serverProcess.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-              if (transport === TransportKind.ipc) {
-                serverProcess.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                return Promise.resolve({reader: new vscode_languageserver_protocol_1.IPCMessageReader(serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(serverProcess)});
-              } else {
-                return Promise.resolve({reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin)});
-              }
-            } else if (transport === TransportKind.pipe) {
-              return vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport2) => {
-                let process2 = cp.spawn(node.runtime, args, execOptions);
-                if (!process2 || !process2.pid) {
-                  return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);
-                }
-                this._serverProcess = process2;
-                process2.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                process2.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                return transport2.onConnected().then((protocol) => {
-                  return {reader: protocol[0], writer: protocol[1]};
-                });
-              });
-            } else if (Transport.isSocket(transport)) {
-              return vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport2) => {
-                let process2 = cp.spawn(node.runtime, args, execOptions);
-                if (!process2 || !process2.pid) {
-                  return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);
-                }
-                this._serverProcess = process2;
-                process2.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                process2.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                return transport2.onConnected().then((protocol) => {
-                  return {reader: protocol[0], writer: protocol[1]};
-                });
-              });
-            }
-          } else {
-            let pipeName = void 0;
-            return new Promise((resolve, _reject) => {
-              let args = node.args && node.args.slice() || [];
-              if (transport === TransportKind.ipc) {
-                args.push("--node-ipc");
-              } else if (transport === TransportKind.stdio) {
-                args.push("--stdio");
-              } else if (transport === TransportKind.pipe) {
-                pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();
-                args.push(`--pipe=${pipeName}`);
-              } else if (Transport.isSocket(transport)) {
-                args.push(`--socket=${transport.port}`);
-              }
-              args.push(`--clientProcessId=${process.pid.toString()}`);
-              let options = node.options || Object.create(null);
-              options.env = getEnvironment(options.env, true);
-              options.execArgv = options.execArgv || [];
-              options.cwd = serverWorkingDir;
-              options.silent = true;
-              if (transport === TransportKind.ipc || transport === TransportKind.stdio) {
-                let sp = cp.fork(node.module, args || [], options);
-                assertStdio(sp);
-                this._serverProcess = sp;
-                sp.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                if (transport === TransportKind.ipc) {
-                  sp.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                  resolve({reader: new vscode_languageserver_protocol_1.IPCMessageReader(this._serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(this._serverProcess)});
-                } else {
-                  resolve({reader: new vscode_languageserver_protocol_1.StreamMessageReader(sp.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(sp.stdin)});
-                }
-              } else if (transport === TransportKind.pipe) {
-                vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport2) => {
-                  let sp = cp.fork(node.module, args || [], options);
-                  assertStdio(sp);
-                  this._serverProcess = sp;
-                  sp.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                  sp.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                  transport2.onConnected().then((protocol) => {
-                    resolve({reader: protocol[0], writer: protocol[1]});
-                  });
-                });
-              } else if (Transport.isSocket(transport)) {
-                vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport2) => {
-                  let sp = cp.fork(node.module, args || [], options);
-                  assertStdio(sp);
-                  this._serverProcess = sp;
-                  sp.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                  sp.stdout.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-                  transport2.onConnected().then((protocol) => {
-                    resolve({reader: protocol[0], writer: protocol[1]});
-                  });
-                });
-              }
-            });
-          }
-        } else if (Executable.is(json) && json.command) {
-          let command = json;
-          let args = command.args || [];
-          let options = Object.assign({}, command.options);
-          options.cwd = options.cwd || serverWorkingDir;
-          let serverProcess = cp.spawn(command.command, args, options);
-          if (!serverProcess || !serverProcess.pid) {
-            return Promise.reject(`Launching server using command ${command.command} failed.`);
-          }
-          serverProcess.stderr.on("data", (data) => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));
-          this._serverProcess = serverProcess;
-          this._isDetached = !!options.detached;
-          return Promise.resolve({reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin)});
-        }
-        return Promise.reject(new Error(`Unsupported server configuration ` + JSON.stringify(server, null, 4)));
-      });
-    }
-    registerProposedFeatures() {
-      this.registerFeatures(ProposedFeatures.createAll(this));
-    }
-    registerBuiltinFeatures() {
-      super.registerBuiltinFeatures();
-      this.registerFeature(new configuration_1.ConfigurationFeature(this));
-      this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this));
-      this.registerFeature(new implementation_1.ImplementationFeature(this));
-      this.registerFeature(new colorProvider_1.ColorProviderFeature(this));
-      this.registerFeature(new workspaceFolders_1.WorkspaceFoldersFeature(this));
-      this.registerFeature(new foldingRange_1.FoldingRangeFeature(this));
-      this.registerFeature(new declaration_1.DeclarationFeature(this));
-      this.registerFeature(new selectionRange_1.SelectionRangeFeature(this));
-      this.registerFeature(new progress_1.ProgressFeature(this));
-    }
-    _mainGetRootPath() {
-      let folders = vscode_1.workspace.workspaceFolders;
-      if (!folders || folders.length === 0) {
-        return void 0;
-      }
-      let folder = folders[0];
-      if (folder.uri.scheme === "file") {
-        return folder.uri.fsPath;
-      }
-      return void 0;
-    }
-    _getServerWorkingDir(options) {
-      let cwd = options && options.cwd;
-      if (!cwd) {
-        cwd = this.clientOptions.workspaceFolder ? this.clientOptions.workspaceFolder.uri.fsPath : this._mainGetRootPath();
-      }
-      if (cwd) {
-        return new Promise((s) => {
-          fs.lstat(cwd, (err, stats) => {
-            s(!err && stats.isDirectory() ? cwd : void 0);
-          });
-        });
-      }
-      return Promise.resolve(void 0);
-    }
-  };
-  exports2.LanguageClient = LanguageClient2;
-  var SettingMonitor = class {
-    constructor(_client, _setting) {
-      this._client = _client;
-      this._setting = _setting;
-      this._listeners = [];
-    }
-    start() {
-      vscode_1.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this._listeners);
-      this.onDidChangeConfiguration();
-      return new vscode_1.Disposable(() => {
-        if (this._client.needsStop()) {
-          this._client.stop();
-        }
-      });
-    }
-    onDidChangeConfiguration() {
-      let index = this._setting.indexOf(".");
-      let primary = index >= 0 ? this._setting.substr(0, index) : this._setting;
-      let rest = index >= 0 ? this._setting.substr(index + 1) : void 0;
-      let enabled = rest ? vscode_1.workspace.getConfiguration(primary).get(rest, false) : vscode_1.workspace.getConfiguration(primary);
-      if (enabled && this._client.needsStart()) {
-        this._client.start();
-      } else if (!enabled && this._client.needsStop()) {
-        this._client.stop();
-      }
-    }
-  };
-  exports2.SettingMonitor = SettingMonitor;
-  var ProposedFeatures;
-  (function(ProposedFeatures2) {
-    function createAll(client2) {
-      let result = [
-        new callHierarchy_proposed_1.CallHierarchyFeature(client2),
-        new semanticTokens_proposed_1.SemanticTokensFeature(client2)
-      ];
-      return result;
-    }
-    ProposedFeatures2.createAll = createAll;
-  })(ProposedFeatures = exports2.ProposedFeatures || (exports2.ProposedFeatures = {}));
-});
-
-// src/extension.ts
-__markAsModule(exports);
-__export(exports, {
-  activate: () => activate,
-  client: () => client,
-  deactivate: () => deactivate
-});
-var vscode5 = __toModule(require("vscode"));
-var import_vscode = __toModule(require("vscode"));
-var import_vscode_languageclient = __toModule(require_main4());
-
-// src/requirements.ts
-var vscode = __toModule(require("vscode"));
-async function resolveRequirements() {
-  const pathToVM = await checkPathToVM();
-  const pathToImage = await checkPathToImage();
-  return Promise.resolve({pathToVM, pathToImage});
-}
-async function checkPathToVM() {
-  return new Promise(async (resolve, reject) => {
-    if (vscode.workspace.getConfiguration("pharo").get("pathToVM") === "") {
-      reject({
-        message: "Path to VM not set",
-        label: "Open settings",
-        command: "workbench.action.openSettingsJson"
-      });
-    }
-    return resolve(vscode.workspace.getConfiguration("pharo").get("pathToVM"));
-  });
-}
-async function checkPathToImage() {
-  return new Promise(async (resolve, reject) => {
-    if (vscode.workspace.getConfiguration("pharo").get("pathToImage") === "") {
-      reject({
-        message: "Path to Image not set",
-        label: "Open settings",
-        command: "workbench.action.openSettingsJson"
-      });
-    }
-    return resolve(vscode.workspace.getConfiguration("pharo").get("pathToImage"));
-  });
-}
-
-// src/extension.ts
-var net = __toModule(require("net"));
-var child_process = __toModule(require("child_process"));
-
-// src/activateDebug.ts
-var vscode2 = __toModule(require("vscode"));
-function activateDebug(context, factory) {
-  context.subscriptions.push(vscode2.commands.registerCommand("extension.pharo-debug.debugEditorContents", (resource) => {
-    let targetResource = resource;
-    if (!targetResource && vscode2.window.activeTextEditor) {
-      targetResource = vscode2.window.activeTextEditor.document.uri;
-    }
-    if (targetResource) {
-      vscode2.debug.startDebugging(void 0, {
-        type: "pharodb",
-        name: "Debug File",
-        request: "launch",
-        program: targetResource.fsPath
-      });
-    }
-  }));
-  context.subscriptions.push(vscode2.debug.registerDebugAdapterDescriptorFactory("pharodb", factory));
-}
-
-// src/debugFactory.ts
-var vscode3 = __toModule(require("vscode"));
-var DebugAdapterFactory = class {
-  async createDebugAdapterDescriptor(session, executable) {
-    const port = client.sendRequest("dap:startServer", {}).then((result) => {
-      return result;
-    });
-    return new vscode3.DebugAdapterServer(await port, "localhost");
-  }
-};
-
-// src/moosebookProvider.ts
-var vscode4 = __toModule(require("vscode"));
-
-// src/moosebook.ts
-var Moosebook = class {
-  constructor(doc) {
-  }
-  async dispose() {
-  }
-  async restartKernel() {
-  }
-  async toggleDebugging(document) {
-  }
-  async eval(cell) {
-    return client.sendRequest("command:notebookPrintIt", {line: cell.document.getText()}).then((result) => {
-      if (result.mimetype == "error")
-        throw new Error(result.content);
-      return result;
-    }).catch((error) => {
-      throw new Error(error);
-    });
-  }
-  addDebugSession(session) {
-  }
-  removeDebugSession(session) {
-  }
-};
-
-// src/moosebookProvider.ts
-var MoosebookContentProvider = class {
-  constructor() {
-    this.id = "moosebookKernel";
-    this.label = "Moosebook Kernel";
-    this._associations = new Map();
-    this._localDisposables = [];
-    this.supportedLanguages = ["pharo"];
-    this._executionOrder = 0;
-    this._localDisposables.push(vscode4.notebook.onDidOpenNotebookDocument((document) => {
-      const docKey = document.uri.toString();
-      if (!this.lookupMoosebook(docKey)) {
-        const project = new Moosebook(document);
-        this.register(docKey, project, (key) => document.cells.some((cell) => cell.index.toString() === key) || key === docKey);
-      }
-    }), vscode4.notebook.onDidCloseNotebookDocument((document) => {
-      const project = this.unregister(document.uri.toString());
-      if (project) {
-        project.dispose();
-      }
-    }));
-    vscode4.notebook.registerNotebookKernelProvider({
-      viewType: "moosebook"
-    }, {
-      provideKernels: () => {
-        return [this];
-      }
-    });
-  }
-  interrupt(document) {
-    throw new Error("Method not implemented.");
-  }
-  async executeCellsRequest(document, ranges) {
-    const cells = [];
-    for (let range of ranges) {
-      for (let i = range.start; i < range.end; i++) {
-        cells.push(document.cells[i]);
-      }
-    }
-    this._executeCells(cells);
-  }
-  async _executeCells(cells) {
-    for (const cell of cells) {
-      const execution = vscode4.notebook.createNotebookCellExecutionTask(cell.notebook.uri, cell.index, this.id);
-      await this._doExecuteCell(execution);
-    }
-  }
-  async _doExecuteCell(execution) {
-    execution.executionOrder = ++this._executionOrder;
-    execution.start({startTime: Date.now()});
-    let output = {mimetype: "text/html", content: "error... "};
-    let error;
-    const moosebook = this.lookupMoosebook(execution.cell.index);
-    try {
-      output = await moosebook.eval(execution.cell);
-    } catch (err) {
-      execution.replaceOutput([new vscode4.NotebookCellOutput([
-        new vscode4.NotebookCellOutputItem("application/x.notebook.error-traceback", {
-          ename: err instanceof Error && err.name || "error",
-          evalue: err instanceof Error && err.message || JSON.stringify(err, void 0, 4),
-          traceback: []
-        })
-      ])]);
-      execution.end({success: false});
-      return;
-    }
-    execution.replaceOutput([new vscode4.NotebookCellOutput([
-      new vscode4.NotebookCellOutputItem(output.mimetype, output.content)
-    ])]);
-    execution.end({success: true});
-  }
-  lookupMoosebook(keyOrUri) {
-    if (keyOrUri) {
-      let key;
-      if (typeof keyOrUri === "string") {
-        key = keyOrUri;
-      } else {
-        key = keyOrUri.toString();
-      }
-      for (let [association, value] of this._associations.values()) {
-        if (association(key)) {
-          return value;
-        }
-      }
-    }
-    return void 0;
-  }
-  async openNotebook(uri) {
-    let contents = "";
-    try {
-      contents = Buffer.from(await vscode4.workspace.fs.readFile(uri)).toString("utf8");
-    } catch {
-    }
-    let raw;
-    try {
-      raw = JSON.parse(contents);
-    } catch {
-      raw = [];
-    }
-    const notebookData = {
-      metadata: new vscode4.NotebookDocumentMetadata().with({editable: true}),
-      cells: raw.map((item) => ({
-        kind: item.kind,
-        source: item.value,
-        language: item.language,
-        outputs: [],
-        metadata: new vscode4.NotebookCellMetadata().with({
-          editable: true,
-          breakpointMargin: false
-        })
-      }))
-    };
-    return notebookData;
-  }
-  saveNotebook(document, _cancellation) {
-    return this._save(document, document.uri);
-  }
-  saveNotebookAs(targetResource, document, _cancellation) {
-    return this._save(document, targetResource);
-  }
-  async resolveNotebook(_document, _webview) {
-  }
-  async backupNotebook(document, context, _cancellation) {
-    return {id: "", delete: () => {
-    }};
-  }
-  dispose() {
-  }
-  async _save(document, targetResource) {
-    let contents = [];
-    for (let cell of document.cells) {
-      contents.push({
-        kind: cell.kind,
-        language: cell.document.languageId,
-        value: cell.document.getText()
-      });
-    }
-    await vscode4.workspace.fs.writeFile(targetResource, Buffer.from(JSON.stringify(contents)));
-  }
-  register(key, project, association) {
-    this._associations.set(key, [association, project]);
-  }
-  unregister(key) {
-    const project = this.lookupMoosebook(key);
-    if (project) {
-      this._associations.delete(key);
-    }
-    return project;
-  }
-};
-
-// src/extension.ts
-var client;
-var socket;
-async function activate(context) {
-  console.info("Start Pharo Language extension");
-  return resolveRequirements().catch((error) => {
-    import_vscode.window.showErrorMessage(error.message, error.label).then((selection) => {
-      if (error.label && error.label === selection && error.command) {
-        import_vscode.commands.executeCommand(error.command, error.commandParam);
-      }
-    });
-  }).then(async (requirements2) => {
-    client = createPharoLanguageServer(requirements2, context);
-    context.subscriptions.push(client.start());
-    import_vscode.window.showInformationMessage("Client started");
-    createCommands(context);
-    let factory = new DebugAdapterFactory();
-    activateDebug(context, factory);
-    console.info("Start moosebook");
-    const moosebookContentProvider = new MoosebookContentProvider();
-    context.subscriptions.push(vscode5.notebook.registerNotebookContentProvider("moosebook", moosebookContentProvider));
-  });
-}
-function createCommands(context) {
-  context.subscriptions.push(vscode5.commands.registerCommand("pharo.extensionVersion", commandPharoExtensionVersion));
-  context.subscriptions.push(vscode5.commands.registerCommand("pharo.printIt", commandPharoPrintIt));
-  context.subscriptions.push(vscode5.commands.registerCommand("pharo.showIt", commandPharoShowIt));
-  context.subscriptions.push(vscode5.commands.registerCommand("pharo.save", commandPharoSave));
-}
-function deactivate() {
-}
-function commandPharoExtensionVersion() {
-  client.sendRequest("command:version").then((result) => {
-    console.log(result);
-    import_vscode.window.showInformationMessage(result);
-  });
-}
-function commandPharoPrintIt() {
-  let editor = vscode5.window.activeTextEditor;
-  let selection = editor.selection;
-  client.sendRequest("command:printIt", {line: editor.document.getText(selection)}).then((result) => {
-    editor.edit((editBuilder) => {
-      editBuilder.replace(new vscode5.Selection(selection.end, selection.end), ' "' + result + '" ');
-    });
-  }).catch((error) => import_vscode.window.showErrorMessage(error));
-}
-function commandPharoShowIt() {
-  let editor = vscode5.window.activeTextEditor;
-  client.sendRequest("command:printIt", {line: editor.document.getText(editor.selection)}).then((result) => {
-    import_vscode.window.showInformationMessage(result);
-  }).catch((error) => import_vscode.window.showErrorMessage(error));
-}
-function commandPharoSave() {
-  client.sendRequest("command:save").then((result) => {
-    import_vscode.window.showInformationMessage(result);
-  }).catch((error) => import_vscode.window.showErrorMessage(error));
-}
-function createPharoLanguageServer(requirements2, context) {
-  let serverOptions = () => createServerWithSocket(requirements2.pathToVM, requirements2.pathToImage, context);
-  let clientOptions = {
-    documentSelector: [{scheme: "file", language: "pharo"}],
-    synchronize: {
-      fileEvents: import_vscode.workspace.createFileSystemWatcher("**/.clientrc")
-    }
-  };
-  return new import_vscode_languageclient.LanguageClient("pharoLanguageServer", "Pharo Language Server", serverOptions, clientOptions);
-}
-async function createServerWithSocket(pharoPath, pathToImage, context) {
-  let dls;
-  dls = child_process.spawn(pharoPath.trim(), [
-    pathToImage,
-    "st",
-    context.asAbsolutePath("/res/run-server.st")
-  ]);
-  await sleep(8e3);
-  socket = net.connect({port: 4e3, host: "127.0.0.1"}, () => {
-    console.log("connected to server!");
-  });
-  let result = {
-    writer: socket,
-    reader: socket
-  };
-  return Promise.resolve(result);
-}
-async function sleep(ms) {
-  return new Promise((resolve) => setTimeout(resolve, ms));
-}
-//# sourceMappingURL=extension.js.map
diff --git a/dist/extension.js.map b/dist/extension.js.map
deleted file mode 100644
index 97ac931..0000000
--- a/dist/extension.js.map
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "version": 3,
-  "sources": ["../node_modules/vscode-languageclient/node_modules/semver/semver.js", "../node_modules/vscode-jsonrpc/lib/is.js", "../node_modules/vscode-jsonrpc/lib/messages.js", "../node_modules/vscode-jsonrpc/lib/events.js", "../node_modules/vscode-jsonrpc/lib/messageReader.js", "../node_modules/vscode-jsonrpc/lib/messageWriter.js", "../node_modules/vscode-jsonrpc/lib/cancellation.js", "../node_modules/vscode-jsonrpc/lib/linkedMap.js", "../node_modules/vscode-jsonrpc/lib/pipeSupport.js", "../node_modules/vscode-jsonrpc/lib/socketSupport.js", "../node_modules/vscode-jsonrpc/lib/main.js", "../node_modules/vscode-languageserver-types/lib/umd/main.js", "../node_modules/vscode-languageserver-protocol/lib/utils/is.js", "../node_modules/vscode-languageserver-protocol/lib/messages.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.implementation.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.typeDefinition.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.workspaceFolders.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.configuration.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.colorProvider.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.foldingRange.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.declaration.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.selectionRange.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.progress.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.callHierarchy.proposed.js", "../node_modules/vscode-languageserver-protocol/lib/protocol.sematicTokens.proposed.js", "../node_modules/vscode-languageserver-protocol/lib/main.js", "../node_modules/vscode-languageclient/lib/utils/is.js", "../node_modules/vscode-languageclient/lib/protocolCompletionItem.js", "../node_modules/vscode-languageclient/lib/protocolCodeLens.js", "../node_modules/vscode-languageclient/lib/protocolDocumentLink.js", "../node_modules/vscode-languageclient/lib/codeConverter.js", "../node_modules/vscode-languageclient/lib/protocolConverter.js", "../node_modules/vscode-languageclient/lib/utils/async.js", "../node_modules/vscode-languageclient/lib/utils/uuid.js", "../node_modules/vscode-languageclient/lib/progressPart.js", "../node_modules/vscode-languageclient/lib/client.js", "../node_modules/vscode-languageclient/lib/colorProvider.js", "../node_modules/vscode-languageclient/lib/configuration.js", "../node_modules/vscode-languageclient/lib/implementation.js", "../node_modules/vscode-languageclient/lib/typeDefinition.js", "../node_modules/vscode-languageclient/lib/workspaceFolders.js", "../node_modules/vscode-languageclient/lib/foldingRange.js", "../node_modules/vscode-languageclient/lib/declaration.js", "../node_modules/vscode-languageclient/lib/selectionRange.js", "../node_modules/vscode-languageclient/lib/progress.js", "../node_modules/vscode-languageclient/lib/callHierarchy.proposed.js", "../node_modules/vscode-languageclient/lib/semanticTokens.proposed.js", "../node_modules/vscode-languageclient/lib/utils/processes.js", "../node_modules/vscode-languageclient/lib/main.js", "../src/extension.ts", "../src/requirements.ts", "../src/activateDebug.ts", "../src/debugFactory.ts", "../src/moosebookProvider.ts", "../src/moosebook.ts"],
-  "sourcesContent": ["exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n    process.env &&\n    process.env.NODE_DEBUG &&\n    /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n  debug = function () {\n    var args = Array.prototype.slice.call(arguments, 0)\n    args.unshift('SEMVER')\n    console.log.apply(console, args)\n  }\n} else {\n  debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n  /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar t = exports.tokens = {}\nvar R = 0\n\nfunction tok (n) {\n  t[n] = R++\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ntok('NUMERICIDENTIFIER')\nsrc[t.NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\ntok('NUMERICIDENTIFIERLOOSE')\nsrc[t.NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ntok('NONNUMERICIDENTIFIER')\nsrc[t.NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ntok('MAINVERSION')\nsrc[t.MAINVERSION] = '(' + src[t.NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[t.NUMERICIDENTIFIER] + ')\\\\.' +\n                   '(' + src[t.NUMERICIDENTIFIER] + ')'\n\ntok('MAINVERSIONLOOSE')\nsrc[t.MAINVERSIONLOOSE] = '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n                        '(' + src[t.NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\ntok('PRERELEASEIDENTIFIER')\nsrc[t.PRERELEASEIDENTIFIER] = '(?:' + src[t.NUMERICIDENTIFIER] +\n                            '|' + src[t.NONNUMERICIDENTIFIER] + ')'\n\ntok('PRERELEASEIDENTIFIERLOOSE')\nsrc[t.PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[t.NUMERICIDENTIFIERLOOSE] +\n                                 '|' + src[t.NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ntok('PRERELEASE')\nsrc[t.PRERELEASE] = '(?:-(' + src[t.PRERELEASEIDENTIFIER] +\n                  '(?:\\\\.' + src[t.PRERELEASEIDENTIFIER] + ')*))'\n\ntok('PRERELEASELOOSE')\nsrc[t.PRERELEASELOOSE] = '(?:-?(' + src[t.PRERELEASEIDENTIFIERLOOSE] +\n                       '(?:\\\\.' + src[t.PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ntok('BUILDIDENTIFIER')\nsrc[t.BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ntok('BUILD')\nsrc[t.BUILD] = '(?:\\\\+(' + src[t.BUILDIDENTIFIER] +\n             '(?:\\\\.' + src[t.BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups.  The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ntok('FULL')\ntok('FULLPLAIN')\nsrc[t.FULLPLAIN] = 'v?' + src[t.MAINVERSION] +\n                  src[t.PRERELEASE] + '?' +\n                  src[t.BUILD] + '?'\n\nsrc[t.FULL] = '^' + src[t.FULLPLAIN] + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ntok('LOOSEPLAIN')\nsrc[t.LOOSEPLAIN] = '[v=\\\\s]*' + src[t.MAINVERSIONLOOSE] +\n                  src[t.PRERELEASELOOSE] + '?' +\n                  src[t.BUILD] + '?'\n\ntok('LOOSE')\nsrc[t.LOOSE] = '^' + src[t.LOOSEPLAIN] + '$'\n\ntok('GTLT')\nsrc[t.GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ntok('XRANGEIDENTIFIERLOOSE')\nsrc[t.XRANGEIDENTIFIERLOOSE] = src[t.NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\ntok('XRANGEIDENTIFIER')\nsrc[t.XRANGEIDENTIFIER] = src[t.NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\ntok('XRANGEPLAIN')\nsrc[t.XRANGEPLAIN] = '[v=\\\\s]*(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:\\\\.(' + src[t.XRANGEIDENTIFIER] + ')' +\n                   '(?:' + src[t.PRERELEASE] + ')?' +\n                   src[t.BUILD] + '?' +\n                   ')?)?'\n\ntok('XRANGEPLAINLOOSE')\nsrc[t.XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:\\\\.(' + src[t.XRANGEIDENTIFIERLOOSE] + ')' +\n                        '(?:' + src[t.PRERELEASELOOSE] + ')?' +\n                        src[t.BUILD] + '?' +\n                        ')?)?'\n\ntok('XRANGE')\nsrc[t.XRANGE] = '^' + src[t.GTLT] + '\\\\s*' + src[t.XRANGEPLAIN] + '$'\ntok('XRANGELOOSE')\nsrc[t.XRANGELOOSE] = '^' + src[t.GTLT] + '\\\\s*' + src[t.XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ntok('COERCE')\nsrc[t.COERCE] = '(^|[^\\\\d])' +\n              '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n              '(?:$|[^\\\\d])'\ntok('COERCERTL')\nre[t.COERCERTL] = new RegExp(src[t.COERCE], 'g')\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ntok('LONETILDE')\nsrc[t.LONETILDE] = '(?:~>?)'\n\ntok('TILDETRIM')\nsrc[t.TILDETRIM] = '(\\\\s*)' + src[t.LONETILDE] + '\\\\s+'\nre[t.TILDETRIM] = new RegExp(src[t.TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\ntok('TILDE')\nsrc[t.TILDE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAIN] + '$'\ntok('TILDELOOSE')\nsrc[t.TILDELOOSE] = '^' + src[t.LONETILDE] + src[t.XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ntok('LONECARET')\nsrc[t.LONECARET] = '(?:\\\\^)'\n\ntok('CARETTRIM')\nsrc[t.CARETTRIM] = '(\\\\s*)' + src[t.LONECARET] + '\\\\s+'\nre[t.CARETTRIM] = new RegExp(src[t.CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\ntok('CARET')\nsrc[t.CARET] = '^' + src[t.LONECARET] + src[t.XRANGEPLAIN] + '$'\ntok('CARETLOOSE')\nsrc[t.CARETLOOSE] = '^' + src[t.LONECARET] + src[t.XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ntok('COMPARATORLOOSE')\nsrc[t.COMPARATORLOOSE] = '^' + src[t.GTLT] + '\\\\s*(' + src[t.LOOSEPLAIN] + ')$|^$'\ntok('COMPARATOR')\nsrc[t.COMPARATOR] = '^' + src[t.GTLT] + '\\\\s*(' + src[t.FULLPLAIN] + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ntok('COMPARATORTRIM')\nsrc[t.COMPARATORTRIM] = '(\\\\s*)' + src[t.GTLT] +\n                      '\\\\s*(' + src[t.LOOSEPLAIN] + '|' + src[t.XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[t.COMPARATORTRIM] = new RegExp(src[t.COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ntok('HYPHENRANGE')\nsrc[t.HYPHENRANGE] = '^\\\\s*(' + src[t.XRANGEPLAIN] + ')' +\n                   '\\\\s+-\\\\s+' +\n                   '(' + src[t.XRANGEPLAIN] + ')' +\n                   '\\\\s*$'\n\ntok('HYPHENRANGELOOSE')\nsrc[t.HYPHENRANGELOOSE] = '^\\\\s*(' + src[t.XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s+-\\\\s+' +\n                        '(' + src[t.XRANGEPLAINLOOSE] + ')' +\n                        '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\ntok('STAR')\nsrc[t.STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n  debug(i, src[i])\n  if (!re[i]) {\n    re[i] = new RegExp(src[i])\n  }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  if (version.length > MAX_LENGTH) {\n    return null\n  }\n\n  var r = options.loose ? re[t.LOOSE] : re[t.FULL]\n  if (!r.test(version)) {\n    return null\n  }\n\n  try {\n    return new SemVer(version, options)\n  } catch (er) {\n    return null\n  }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n  var v = parse(version, options)\n  return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n  var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n  return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n  if (version instanceof SemVer) {\n    if (version.loose === options.loose) {\n      return version\n    } else {\n      version = version.version\n    }\n  } else if (typeof version !== 'string') {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  if (version.length > MAX_LENGTH) {\n    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n  }\n\n  if (!(this instanceof SemVer)) {\n    return new SemVer(version, options)\n  }\n\n  debug('SemVer', version, options)\n  this.options = options\n  this.loose = !!options.loose\n\n  var m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n  if (!m) {\n    throw new TypeError('Invalid Version: ' + version)\n  }\n\n  this.raw = version\n\n  // these are actually numbers\n  this.major = +m[1]\n  this.minor = +m[2]\n  this.patch = +m[3]\n\n  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n    throw new TypeError('Invalid major version')\n  }\n\n  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n    throw new TypeError('Invalid minor version')\n  }\n\n  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n    throw new TypeError('Invalid patch version')\n  }\n\n  // numberify any prerelease numeric ids\n  if (!m[4]) {\n    this.prerelease = []\n  } else {\n    this.prerelease = m[4].split('.').map(function (id) {\n      if (/^[0-9]+$/.test(id)) {\n        var num = +id\n        if (num >= 0 && num < MAX_SAFE_INTEGER) {\n          return num\n        }\n      }\n      return id\n    })\n  }\n\n  this.build = m[5] ? m[5].split('.') : []\n  this.format()\n}\n\nSemVer.prototype.format = function () {\n  this.version = this.major + '.' + this.minor + '.' + this.patch\n  if (this.prerelease.length) {\n    this.version += '-' + this.prerelease.join('.')\n  }\n  return this.version\n}\n\nSemVer.prototype.toString = function () {\n  return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n  debug('SemVer.compare', this.version, this.options, other)\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  return compareIdentifiers(this.major, other.major) ||\n         compareIdentifiers(this.minor, other.minor) ||\n         compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  // NOT having a prerelease is > having one\n  if (this.prerelease.length && !other.prerelease.length) {\n    return -1\n  } else if (!this.prerelease.length && other.prerelease.length) {\n    return 1\n  } else if (!this.prerelease.length && !other.prerelease.length) {\n    return 0\n  }\n\n  var i = 0\n  do {\n    var a = this.prerelease[i]\n    var b = other.prerelease[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\nSemVer.prototype.compareBuild = function (other) {\n  if (!(other instanceof SemVer)) {\n    other = new SemVer(other, this.options)\n  }\n\n  var i = 0\n  do {\n    var a = this.build[i]\n    var b = other.build[i]\n    debug('prerelease compare', i, a, b)\n    if (a === undefined && b === undefined) {\n      return 0\n    } else if (b === undefined) {\n      return 1\n    } else if (a === undefined) {\n      return -1\n    } else if (a === b) {\n      continue\n    } else {\n      return compareIdentifiers(a, b)\n    }\n  } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n  switch (release) {\n    case 'premajor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor = 0\n      this.major++\n      this.inc('pre', identifier)\n      break\n    case 'preminor':\n      this.prerelease.length = 0\n      this.patch = 0\n      this.minor++\n      this.inc('pre', identifier)\n      break\n    case 'prepatch':\n      // If this is already a prerelease, it will bump to the next version\n      // drop any prereleases that might already exist, since they are not\n      // relevant at this point.\n      this.prerelease.length = 0\n      this.inc('patch', identifier)\n      this.inc('pre', identifier)\n      break\n    // If the input is a non-prerelease version, this acts the same as\n    // prepatch.\n    case 'prerelease':\n      if (this.prerelease.length === 0) {\n        this.inc('patch', identifier)\n      }\n      this.inc('pre', identifier)\n      break\n\n    case 'major':\n      // If this is a pre-major version, bump up to the same major version.\n      // Otherwise increment major.\n      // 1.0.0-5 bumps to 1.0.0\n      // 1.1.0 bumps to 2.0.0\n      if (this.minor !== 0 ||\n          this.patch !== 0 ||\n          this.prerelease.length === 0) {\n        this.major++\n      }\n      this.minor = 0\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'minor':\n      // If this is a pre-minor version, bump up to the same minor version.\n      // Otherwise increment minor.\n      // 1.2.0-5 bumps to 1.2.0\n      // 1.2.1 bumps to 1.3.0\n      if (this.patch !== 0 || this.prerelease.length === 0) {\n        this.minor++\n      }\n      this.patch = 0\n      this.prerelease = []\n      break\n    case 'patch':\n      // If this is not a pre-release version, it will increment the patch.\n      // If it is a pre-release it will bump up to the same patch version.\n      // 1.2.0-5 patches to 1.2.0\n      // 1.2.0 patches to 1.2.1\n      if (this.prerelease.length === 0) {\n        this.patch++\n      }\n      this.prerelease = []\n      break\n    // This probably shouldn't be used publicly.\n    // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n    case 'pre':\n      if (this.prerelease.length === 0) {\n        this.prerelease = [0]\n      } else {\n        var i = this.prerelease.length\n        while (--i >= 0) {\n          if (typeof this.prerelease[i] === 'number') {\n            this.prerelease[i]++\n            i = -2\n          }\n        }\n        if (i === -1) {\n          // didn't increment anything\n          this.prerelease.push(0)\n        }\n      }\n      if (identifier) {\n        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n        if (this.prerelease[0] === identifier) {\n          if (isNaN(this.prerelease[1])) {\n            this.prerelease = [identifier, 0]\n          }\n        } else {\n          this.prerelease = [identifier, 0]\n        }\n      }\n      break\n\n    default:\n      throw new Error('invalid increment argument: ' + release)\n  }\n  this.format()\n  this.raw = this.version\n  return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n  if (typeof (loose) === 'string') {\n    identifier = loose\n    loose = undefined\n  }\n\n  try {\n    return new SemVer(version, loose).inc(release, identifier).version\n  } catch (er) {\n    return null\n  }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n  if (eq(version1, version2)) {\n    return null\n  } else {\n    var v1 = parse(version1)\n    var v2 = parse(version2)\n    var prefix = ''\n    if (v1.prerelease.length || v2.prerelease.length) {\n      prefix = 'pre'\n      var defaultResult = 'prerelease'\n    }\n    for (var key in v1) {\n      if (key === 'major' || key === 'minor' || key === 'patch') {\n        if (v1[key] !== v2[key]) {\n          return prefix + key\n        }\n      }\n    }\n    return defaultResult // may be undefined\n  }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n  var anum = numeric.test(a)\n  var bnum = numeric.test(b)\n\n  if (anum && bnum) {\n    a = +a\n    b = +b\n  }\n\n  return a === b ? 0\n    : (anum && !bnum) ? -1\n    : (bnum && !anum) ? 1\n    : a < b ? -1\n    : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n  return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n  return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n  return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n  return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n  return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n  return compare(a, b, true)\n}\n\nexports.compareBuild = compareBuild\nfunction compareBuild (a, b, loose) {\n  var versionA = new SemVer(a, loose)\n  var versionB = new SemVer(b, loose)\n  return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n  return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compareBuild(a, b, loose)\n  })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n  return list.sort(function (a, b) {\n    return exports.compareBuild(b, a, loose)\n  })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n  return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n  return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n  return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n  return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n  return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n  return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n  switch (op) {\n    case '===':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a === b\n\n    case '!==':\n      if (typeof a === 'object')\n        a = a.version\n      if (typeof b === 'object')\n        b = b.version\n      return a !== b\n\n    case '':\n    case '=':\n    case '==':\n      return eq(a, b, loose)\n\n    case '!=':\n      return neq(a, b, loose)\n\n    case '>':\n      return gt(a, b, loose)\n\n    case '>=':\n      return gte(a, b, loose)\n\n    case '<':\n      return lt(a, b, loose)\n\n    case '<=':\n      return lte(a, b, loose)\n\n    default:\n      throw new TypeError('Invalid operator: ' + op)\n  }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (comp instanceof Comparator) {\n    if (comp.loose === !!options.loose) {\n      return comp\n    } else {\n      comp = comp.value\n    }\n  }\n\n  if (!(this instanceof Comparator)) {\n    return new Comparator(comp, options)\n  }\n\n  debug('comparator', comp, options)\n  this.options = options\n  this.loose = !!options.loose\n  this.parse(comp)\n\n  if (this.semver === ANY) {\n    this.value = ''\n  } else {\n    this.value = this.operator + this.semver.version\n  }\n\n  debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n  var r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n  var m = comp.match(r)\n\n  if (!m) {\n    throw new TypeError('Invalid comparator: ' + comp)\n  }\n\n  this.operator = m[1] !== undefined ? m[1] : ''\n  if (this.operator === '=') {\n    this.operator = ''\n  }\n\n  // if it literally is just '>' or '' then allow anything.\n  if (!m[2]) {\n    this.semver = ANY\n  } else {\n    this.semver = new SemVer(m[2], this.options.loose)\n  }\n}\n\nComparator.prototype.toString = function () {\n  return this.value\n}\n\nComparator.prototype.test = function (version) {\n  debug('Comparator.test', version, this.options.loose)\n\n  if (this.semver === ANY || version === ANY) {\n    return true\n  }\n\n  if (typeof version === 'string') {\n    try {\n      version = new SemVer(version, this.options)\n    } catch (er) {\n      return false\n    }\n  }\n\n  return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n  if (!(comp instanceof Comparator)) {\n    throw new TypeError('a Comparator is required')\n  }\n\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  var rangeTmp\n\n  if (this.operator === '') {\n    if (this.value === '') {\n      return true\n    }\n    rangeTmp = new Range(comp.value, options)\n    return satisfies(this.value, rangeTmp, options)\n  } else if (comp.operator === '') {\n    if (comp.value === '') {\n      return true\n    }\n    rangeTmp = new Range(this.value, options)\n    return satisfies(comp.semver, rangeTmp, options)\n  }\n\n  var sameDirectionIncreasing =\n    (this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '>=' || comp.operator === '>')\n  var sameDirectionDecreasing =\n    (this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '<=' || comp.operator === '<')\n  var sameSemVer = this.semver.version === comp.semver.version\n  var differentDirectionsInclusive =\n    (this.operator === '>=' || this.operator === '<=') &&\n    (comp.operator === '>=' || comp.operator === '<=')\n  var oppositeDirectionsLessThan =\n    cmp(this.semver, '<', comp.semver, options) &&\n    ((this.operator === '>=' || this.operator === '>') &&\n    (comp.operator === '<=' || comp.operator === '<'))\n  var oppositeDirectionsGreaterThan =\n    cmp(this.semver, '>', comp.semver, options) &&\n    ((this.operator === '<=' || this.operator === '<') &&\n    (comp.operator === '>=' || comp.operator === '>'))\n\n  return sameDirectionIncreasing || sameDirectionDecreasing ||\n    (sameSemVer && differentDirectionsInclusive) ||\n    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n  if (!options || typeof options !== 'object') {\n    options = {\n      loose: !!options,\n      includePrerelease: false\n    }\n  }\n\n  if (range instanceof Range) {\n    if (range.loose === !!options.loose &&\n        range.includePrerelease === !!options.includePrerelease) {\n      return range\n    } else {\n      return new Range(range.raw, options)\n    }\n  }\n\n  if (range instanceof Comparator) {\n    return new Range(range.value, options)\n  }\n\n  if (!(this instanceof Range)) {\n    return new Range(range, options)\n  }\n\n  this.options = options\n  this.loose = !!options.loose\n  this.includePrerelease = !!options.includePrerelease\n\n  // First, split based on boolean or ||\n  this.raw = range\n  this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n    return this.parseRange(range.trim())\n  }, this).filter(function (c) {\n    // throw out any that are not relevant for whatever reason\n    return c.length\n  })\n\n  if (!this.set.length) {\n    throw new TypeError('Invalid SemVer Range: ' + range)\n  }\n\n  this.format()\n}\n\nRange.prototype.format = function () {\n  this.range = this.set.map(function (comps) {\n    return comps.join(' ').trim()\n  }).join('||').trim()\n  return this.range\n}\n\nRange.prototype.toString = function () {\n  return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n  var loose = this.options.loose\n  range = range.trim()\n  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n  var hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n  range = range.replace(hr, hyphenReplace)\n  debug('hyphen replace', range)\n  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n  range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n  debug('comparator trim', range, re[t.COMPARATORTRIM])\n\n  // `~ 1.2.3` => `~1.2.3`\n  range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n\n  // `^ 1.2.3` => `^1.2.3`\n  range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n\n  // normalize spaces\n  range = range.split(/\\s+/).join(' ')\n\n  // At this point, the range is completely trimmed and\n  // ready to be split into comparators.\n\n  var compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n  var set = range.split(' ').map(function (comp) {\n    return parseComparator(comp, this.options)\n  }, this).join(' ').split(/\\s+/)\n  if (this.options.loose) {\n    // in loose mode, throw out any that are not valid comparators\n    set = set.filter(function (comp) {\n      return !!comp.match(compRe)\n    })\n  }\n  set = set.map(function (comp) {\n    return new Comparator(comp, this.options)\n  }, this)\n\n  return set\n}\n\nRange.prototype.intersects = function (range, options) {\n  if (!(range instanceof Range)) {\n    throw new TypeError('a Range is required')\n  }\n\n  return this.set.some(function (thisComparators) {\n    return (\n      isSatisfiable(thisComparators, options) &&\n      range.set.some(function (rangeComparators) {\n        return (\n          isSatisfiable(rangeComparators, options) &&\n          thisComparators.every(function (thisComparator) {\n            return rangeComparators.every(function (rangeComparator) {\n              return thisComparator.intersects(rangeComparator, options)\n            })\n          })\n        )\n      })\n    )\n  })\n}\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nfunction isSatisfiable (comparators, options) {\n  var result = true\n  var remainingComparators = comparators.slice()\n  var testComparator = remainingComparators.pop()\n\n  while (result && remainingComparators.length) {\n    result = remainingComparators.every(function (otherComparator) {\n      return testComparator.intersects(otherComparator, options)\n    })\n\n    testComparator = remainingComparators.pop()\n  }\n\n  return result\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n  return new Range(range, options).set.map(function (comp) {\n    return comp.map(function (c) {\n      return c.value\n    }).join(' ').trim().split(' ')\n  })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n  debug('comp', comp, options)\n  comp = replaceCarets(comp, options)\n  debug('caret', comp)\n  comp = replaceTildes(comp, options)\n  debug('tildes', comp)\n  comp = replaceXRanges(comp, options)\n  debug('xrange', comp)\n  comp = replaceStars(comp, options)\n  debug('stars', comp)\n  return comp\n}\n\nfunction isX (id) {\n  return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceTilde(comp, options)\n  }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n  var r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('tilde', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      // ~1.2 == >=1.2.0 <1.3.0\n      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n    } else if (pr) {\n      debug('replaceTilde pr', pr)\n      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    } else {\n      // ~1.2.3 == >=1.2.3 <1.3.0\n      ret = '>=' + M + '.' + m + '.' + p +\n            ' <' + M + '.' + (+m + 1) + '.0'\n    }\n\n    debug('tilde return', ret)\n    return ret\n  })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n  return comp.trim().split(/\\s+/).map(function (comp) {\n    return replaceCaret(comp, options)\n  }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n  debug('caret', comp, options)\n  var r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n  return comp.replace(r, function (_, M, m, p, pr) {\n    debug('caret', comp, _, M, m, p, pr)\n    var ret\n\n    if (isX(M)) {\n      ret = ''\n    } else if (isX(m)) {\n      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n    } else if (isX(p)) {\n      if (M === '0') {\n        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n      } else {\n        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n      }\n    } else if (pr) {\n      debug('replaceCaret pr', pr)\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    } else {\n      debug('no pr')\n      if (M === '0') {\n        if (m === '0') {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + m + '.' + (+p + 1)\n        } else {\n          ret = '>=' + M + '.' + m + '.' + p +\n                ' <' + M + '.' + (+m + 1) + '.0'\n        }\n      } else {\n        ret = '>=' + M + '.' + m + '.' + p +\n              ' <' + (+M + 1) + '.0.0'\n      }\n    }\n\n    debug('caret return', ret)\n    return ret\n  })\n}\n\nfunction replaceXRanges (comp, options) {\n  debug('replaceXRanges', comp, options)\n  return comp.split(/\\s+/).map(function (comp) {\n    return replaceXRange(comp, options)\n  }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n  comp = comp.trim()\n  var r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n    debug('xRange', comp, ret, gtlt, M, m, p, pr)\n    var xM = isX(M)\n    var xm = xM || isX(m)\n    var xp = xm || isX(p)\n    var anyX = xp\n\n    if (gtlt === '=' && anyX) {\n      gtlt = ''\n    }\n\n    // if we're including prereleases in the match, then we need\n    // to fix this to -0, the lowest possible prerelease value\n    pr = options.includePrerelease ? '-0' : ''\n\n    if (xM) {\n      if (gtlt === '>' || gtlt === '<') {\n        // nothing is allowed\n        ret = '<0.0.0-0'\n      } else {\n        // nothing is forbidden\n        ret = '*'\n      }\n    } else if (gtlt && anyX) {\n      // we know patch is an x, because we have any x at all.\n      // replace X with 0\n      if (xm) {\n        m = 0\n      }\n      p = 0\n\n      if (gtlt === '>') {\n        // >1 => >=2.0.0\n        // >1.2 => >=1.3.0\n        // >1.2.3 => >= 1.2.4\n        gtlt = '>='\n        if (xm) {\n          M = +M + 1\n          m = 0\n          p = 0\n        } else {\n          m = +m + 1\n          p = 0\n        }\n      } else if (gtlt === '<=') {\n        // <=0.7.x is actually <0.8.0, since any 0.7.x should\n        // pass.  Similarly, <=7.x is actually <8.0.0, etc.\n        gtlt = '<'\n        if (xm) {\n          M = +M + 1\n        } else {\n          m = +m + 1\n        }\n      }\n\n      ret = gtlt + M + '.' + m + '.' + p + pr\n    } else if (xm) {\n      ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr\n    } else if (xp) {\n      ret = '>=' + M + '.' + m + '.0' + pr +\n        ' <' + M + '.' + (+m + 1) + '.0' + pr\n    }\n\n    debug('xRange return', ret)\n\n    return ret\n  })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n  debug('replaceStars', comp, options)\n  // Looseness is ignored here.  star is always as loose as it gets!\n  return comp.trim().replace(re[t.STAR], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n  from, fM, fm, fp, fpr, fb,\n  to, tM, tm, tp, tpr, tb) {\n  if (isX(fM)) {\n    from = ''\n  } else if (isX(fm)) {\n    from = '>=' + fM + '.0.0'\n  } else if (isX(fp)) {\n    from = '>=' + fM + '.' + fm + '.0'\n  } else {\n    from = '>=' + from\n  }\n\n  if (isX(tM)) {\n    to = ''\n  } else if (isX(tm)) {\n    to = '<' + (+tM + 1) + '.0.0'\n  } else if (isX(tp)) {\n    to = '<' + tM + '.' + (+tm + 1) + '.0'\n  } else if (tpr) {\n    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n  } else {\n    to = '<=' + to\n  }\n\n  return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n  if (!version) {\n    return false\n  }\n\n  if (typeof version === 'string') {\n    try {\n      version = new SemVer(version, this.options)\n    } catch (er) {\n      return false\n    }\n  }\n\n  for (var i = 0; i < this.set.length; i++) {\n    if (testSet(this.set[i], version, this.options)) {\n      return true\n    }\n  }\n  return false\n}\n\nfunction testSet (set, version, options) {\n  for (var i = 0; i < set.length; i++) {\n    if (!set[i].test(version)) {\n      return false\n    }\n  }\n\n  if (version.prerelease.length && !options.includePrerelease) {\n    // Find the set of versions that are allowed to have prereleases\n    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n    // That should allow `1.2.3-pr.2` to pass.\n    // However, `1.2.4-alpha.notready` should NOT be allowed,\n    // even though it's within the range set by the comparators.\n    for (i = 0; i < set.length; i++) {\n      debug(set[i].semver)\n      if (set[i].semver === ANY) {\n        continue\n      }\n\n      if (set[i].semver.prerelease.length > 0) {\n        var allowed = set[i].semver\n        if (allowed.major === version.major &&\n            allowed.minor === version.minor &&\n            allowed.patch === version.patch) {\n          return true\n        }\n      }\n    }\n\n    // Version has a -pre, but it's not one of the ones we like.\n    return false\n  }\n\n  return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n  try {\n    range = new Range(range, options)\n  } catch (er) {\n    return false\n  }\n  return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n  var max = null\n  var maxSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!max || maxSV.compare(v) === -1) {\n        // compare(max, v, true)\n        max = v\n        maxSV = new SemVer(max, options)\n      }\n    }\n  })\n  return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n  var min = null\n  var minSV = null\n  try {\n    var rangeObj = new Range(range, options)\n  } catch (er) {\n    return null\n  }\n  versions.forEach(function (v) {\n    if (rangeObj.test(v)) {\n      // satisfies(v, range, options)\n      if (!min || minSV.compare(v) === 1) {\n        // compare(min, v, true)\n        min = v\n        minSV = new SemVer(min, options)\n      }\n    }\n  })\n  return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n  range = new Range(range, loose)\n\n  var minver = new SemVer('0.0.0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = new SemVer('0.0.0-0')\n  if (range.test(minver)) {\n    return minver\n  }\n\n  minver = null\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    comparators.forEach(function (comparator) {\n      // Clone to avoid manipulating the comparator's semver object.\n      var compver = new SemVer(comparator.semver.version)\n      switch (comparator.operator) {\n        case '>':\n          if (compver.prerelease.length === 0) {\n            compver.patch++\n          } else {\n            compver.prerelease.push(0)\n          }\n          compver.raw = compver.format()\n          /* fallthrough */\n        case '':\n        case '>=':\n          if (!minver || gt(minver, compver)) {\n            minver = compver\n          }\n          break\n        case '<':\n        case '<=':\n          /* Ignore maximum versions */\n          break\n        /* istanbul ignore next */\n        default:\n          throw new Error('Unexpected operation: ' + comparator.operator)\n      }\n    })\n  }\n\n  if (minver && range.test(minver)) {\n    return minver\n  }\n\n  return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n  try {\n    // Return '*' instead of '' so that truthiness works.\n    // This will throw if it's invalid anyway\n    return new Range(range, options).range || '*'\n  } catch (er) {\n    return null\n  }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n  return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n  return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n  version = new SemVer(version, options)\n  range = new Range(range, options)\n\n  var gtfn, ltefn, ltfn, comp, ecomp\n  switch (hilo) {\n    case '>':\n      gtfn = gt\n      ltefn = lte\n      ltfn = lt\n      comp = '>'\n      ecomp = '>='\n      break\n    case '<':\n      gtfn = lt\n      ltefn = gte\n      ltfn = gt\n      comp = '<'\n      ecomp = '<='\n      break\n    default:\n      throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n  }\n\n  // If it satisifes the range it is not outside\n  if (satisfies(version, range, options)) {\n    return false\n  }\n\n  // From now on, variable terms are as if we're in \"gtr\" mode.\n  // but note that everything is flipped for the \"ltr\" function.\n\n  for (var i = 0; i < range.set.length; ++i) {\n    var comparators = range.set[i]\n\n    var high = null\n    var low = null\n\n    comparators.forEach(function (comparator) {\n      if (comparator.semver === ANY) {\n        comparator = new Comparator('>=0.0.0')\n      }\n      high = high || comparator\n      low = low || comparator\n      if (gtfn(comparator.semver, high.semver, options)) {\n        high = comparator\n      } else if (ltfn(comparator.semver, low.semver, options)) {\n        low = comparator\n      }\n    })\n\n    // If the edge version comparator has a operator then our version\n    // isn't outside it\n    if (high.operator === comp || high.operator === ecomp) {\n      return false\n    }\n\n    // If the lowest version comparator has an operator and our version\n    // is less than it then it isn't higher than the range\n    if ((!low.operator || low.operator === comp) &&\n        ltefn(version, low.semver)) {\n      return false\n    } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n      return false\n    }\n  }\n  return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n  var parsed = parse(version, options)\n  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n  r1 = new Range(r1, options)\n  r2 = new Range(r2, options)\n  return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version, options) {\n  if (version instanceof SemVer) {\n    return version\n  }\n\n  if (typeof version === 'number') {\n    version = String(version)\n  }\n\n  if (typeof version !== 'string') {\n    return null\n  }\n\n  options = options || {}\n\n  var match = null\n  if (!options.rtl) {\n    match = version.match(re[t.COERCE])\n  } else {\n    // Find the right-most coercible string that does not share\n    // a terminus with a more left-ward coercible string.\n    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n    //\n    // Walk through the string checking with a /g regexp\n    // Manually set the index so as to pick up overlapping matches.\n    // Stop when we get a match that ends at the string end, since no\n    // coercible string can be more right-ward without the same terminus.\n    var next\n    while ((next = re[t.COERCERTL].exec(version)) &&\n      (!match || match.index + match[0].length !== version.length)\n    ) {\n      if (!match ||\n          next.index + next[0].length !== match.index + match[0].length) {\n        match = next\n      }\n      re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length\n    }\n    // leave it in a clean state\n    re[t.COERCERTL].lastIndex = -1\n  }\n\n  if (match === null) {\n    return null\n  }\n\n  return parse(match[2] +\n    '.' + (match[3] || '0') +\n    '.' + (match[4] || '0'), options)\n}\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction boolean(value) {\r\n    return value === true || value === false;\r\n}\r\nexports.boolean = boolean;\r\nfunction string(value) {\r\n    return typeof value === 'string' || value instanceof String;\r\n}\r\nexports.string = string;\r\nfunction number(value) {\r\n    return typeof value === 'number' || value instanceof Number;\r\n}\r\nexports.number = number;\r\nfunction error(value) {\r\n    return value instanceof Error;\r\n}\r\nexports.error = error;\r\nfunction func(value) {\r\n    return typeof value === 'function';\r\n}\r\nexports.func = func;\r\nfunction array(value) {\r\n    return Array.isArray(value);\r\n}\r\nexports.array = array;\r\nfunction stringArray(value) {\r\n    return array(value) && value.every(elem => string(elem));\r\n}\r\nexports.stringArray = stringArray;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst is = require(\"./is\");\r\n/**\r\n * Predefined error codes.\r\n */\r\nvar ErrorCodes;\r\n(function (ErrorCodes) {\r\n    // Defined by JSON RPC\r\n    ErrorCodes.ParseError = -32700;\r\n    ErrorCodes.InvalidRequest = -32600;\r\n    ErrorCodes.MethodNotFound = -32601;\r\n    ErrorCodes.InvalidParams = -32602;\r\n    ErrorCodes.InternalError = -32603;\r\n    ErrorCodes.serverErrorStart = -32099;\r\n    ErrorCodes.serverErrorEnd = -32000;\r\n    ErrorCodes.ServerNotInitialized = -32002;\r\n    ErrorCodes.UnknownErrorCode = -32001;\r\n    // Defined by the protocol.\r\n    ErrorCodes.RequestCancelled = -32800;\r\n    ErrorCodes.ContentModified = -32801;\r\n    // Defined by VSCode library.\r\n    ErrorCodes.MessageWriteError = 1;\r\n    ErrorCodes.MessageReadError = 2;\r\n})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));\r\n/**\r\n * An error object return in a response in case a request\r\n * has failed.\r\n */\r\nclass ResponseError extends Error {\r\n    constructor(code, message, data) {\r\n        super(message);\r\n        this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;\r\n        this.data = data;\r\n        Object.setPrototypeOf(this, ResponseError.prototype);\r\n    }\r\n    toJson() {\r\n        return {\r\n            code: this.code,\r\n            message: this.message,\r\n            data: this.data,\r\n        };\r\n    }\r\n}\r\nexports.ResponseError = ResponseError;\r\n/**\r\n * An abstract implementation of a MessageType.\r\n */\r\nclass AbstractMessageType {\r\n    constructor(_method, _numberOfParams) {\r\n        this._method = _method;\r\n        this._numberOfParams = _numberOfParams;\r\n    }\r\n    get method() {\r\n        return this._method;\r\n    }\r\n    get numberOfParams() {\r\n        return this._numberOfParams;\r\n    }\r\n}\r\nexports.AbstractMessageType = AbstractMessageType;\r\n/**\r\n * Classes to type request response pairs\r\n *\r\n * The type parameter RO will be removed in the next major version\r\n * of the JSON RPC library since it is a LSP concept and doesn't\r\n * belong here. For now it is tagged as default never.\r\n */\r\nclass RequestType0 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 0);\r\n    }\r\n}\r\nexports.RequestType0 = RequestType0;\r\nclass RequestType extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n    }\r\n}\r\nexports.RequestType = RequestType;\r\nclass RequestType1 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n    }\r\n}\r\nexports.RequestType1 = RequestType1;\r\nclass RequestType2 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 2);\r\n    }\r\n}\r\nexports.RequestType2 = RequestType2;\r\nclass RequestType3 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 3);\r\n    }\r\n}\r\nexports.RequestType3 = RequestType3;\r\nclass RequestType4 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 4);\r\n    }\r\n}\r\nexports.RequestType4 = RequestType4;\r\nclass RequestType5 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 5);\r\n    }\r\n}\r\nexports.RequestType5 = RequestType5;\r\nclass RequestType6 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 6);\r\n    }\r\n}\r\nexports.RequestType6 = RequestType6;\r\nclass RequestType7 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 7);\r\n    }\r\n}\r\nexports.RequestType7 = RequestType7;\r\nclass RequestType8 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 8);\r\n    }\r\n}\r\nexports.RequestType8 = RequestType8;\r\nclass RequestType9 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 9);\r\n    }\r\n}\r\nexports.RequestType9 = RequestType9;\r\n/**\r\n * The type parameter RO will be removed in the next major version\r\n * of the JSON RPC library since it is a LSP concept and doesn't\r\n * belong here. For now it is tagged as default never.\r\n */\r\nclass NotificationType extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n        this._ = undefined;\r\n    }\r\n}\r\nexports.NotificationType = NotificationType;\r\nclass NotificationType0 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 0);\r\n    }\r\n}\r\nexports.NotificationType0 = NotificationType0;\r\nclass NotificationType1 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 1);\r\n    }\r\n}\r\nexports.NotificationType1 = NotificationType1;\r\nclass NotificationType2 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 2);\r\n    }\r\n}\r\nexports.NotificationType2 = NotificationType2;\r\nclass NotificationType3 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 3);\r\n    }\r\n}\r\nexports.NotificationType3 = NotificationType3;\r\nclass NotificationType4 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 4);\r\n    }\r\n}\r\nexports.NotificationType4 = NotificationType4;\r\nclass NotificationType5 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 5);\r\n    }\r\n}\r\nexports.NotificationType5 = NotificationType5;\r\nclass NotificationType6 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 6);\r\n    }\r\n}\r\nexports.NotificationType6 = NotificationType6;\r\nclass NotificationType7 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 7);\r\n    }\r\n}\r\nexports.NotificationType7 = NotificationType7;\r\nclass NotificationType8 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 8);\r\n    }\r\n}\r\nexports.NotificationType8 = NotificationType8;\r\nclass NotificationType9 extends AbstractMessageType {\r\n    constructor(method) {\r\n        super(method, 9);\r\n    }\r\n}\r\nexports.NotificationType9 = NotificationType9;\r\n/**\r\n * Tests if the given message is a request message\r\n */\r\nfunction isRequestMessage(message) {\r\n    let candidate = message;\r\n    return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));\r\n}\r\nexports.isRequestMessage = isRequestMessage;\r\n/**\r\n * Tests if the given message is a notification message\r\n */\r\nfunction isNotificationMessage(message) {\r\n    let candidate = message;\r\n    return candidate && is.string(candidate.method) && message.id === void 0;\r\n}\r\nexports.isNotificationMessage = isNotificationMessage;\r\n/**\r\n * Tests if the given message is a response message\r\n */\r\nfunction isResponseMessage(message) {\r\n    let candidate = message;\r\n    return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);\r\n}\r\nexports.isResponseMessage = isResponseMessage;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Disposable;\r\n(function (Disposable) {\r\n    function create(func) {\r\n        return {\r\n            dispose: func\r\n        };\r\n    }\r\n    Disposable.create = create;\r\n})(Disposable = exports.Disposable || (exports.Disposable = {}));\r\nvar Event;\r\n(function (Event) {\r\n    const _disposable = { dispose() { } };\r\n    Event.None = function () { return _disposable; };\r\n})(Event = exports.Event || (exports.Event = {}));\r\nclass CallbackList {\r\n    add(callback, context = null, bucket) {\r\n        if (!this._callbacks) {\r\n            this._callbacks = [];\r\n            this._contexts = [];\r\n        }\r\n        this._callbacks.push(callback);\r\n        this._contexts.push(context);\r\n        if (Array.isArray(bucket)) {\r\n            bucket.push({ dispose: () => this.remove(callback, context) });\r\n        }\r\n    }\r\n    remove(callback, context = null) {\r\n        if (!this._callbacks) {\r\n            return;\r\n        }\r\n        var foundCallbackWithDifferentContext = false;\r\n        for (var i = 0, len = this._callbacks.length; i < len; i++) {\r\n            if (this._callbacks[i] === callback) {\r\n                if (this._contexts[i] === context) {\r\n                    // callback & context match => remove it\r\n                    this._callbacks.splice(i, 1);\r\n                    this._contexts.splice(i, 1);\r\n                    return;\r\n                }\r\n                else {\r\n                    foundCallbackWithDifferentContext = true;\r\n                }\r\n            }\r\n        }\r\n        if (foundCallbackWithDifferentContext) {\r\n            throw new Error('When adding a listener with a context, you should remove it with the same context');\r\n        }\r\n    }\r\n    invoke(...args) {\r\n        if (!this._callbacks) {\r\n            return [];\r\n        }\r\n        var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);\r\n        for (var i = 0, len = callbacks.length; i < len; i++) {\r\n            try {\r\n                ret.push(callbacks[i].apply(contexts[i], args));\r\n            }\r\n            catch (e) {\r\n                // eslint-disable-next-line no-console\r\n                console.error(e);\r\n            }\r\n        }\r\n        return ret;\r\n    }\r\n    isEmpty() {\r\n        return !this._callbacks || this._callbacks.length === 0;\r\n    }\r\n    dispose() {\r\n        this._callbacks = undefined;\r\n        this._contexts = undefined;\r\n    }\r\n}\r\nclass Emitter {\r\n    constructor(_options) {\r\n        this._options = _options;\r\n    }\r\n    /**\r\n     * For the public to allow to subscribe\r\n     * to events from this Emitter\r\n     */\r\n    get event() {\r\n        if (!this._event) {\r\n            this._event = (listener, thisArgs, disposables) => {\r\n                if (!this._callbacks) {\r\n                    this._callbacks = new CallbackList();\r\n                }\r\n                if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {\r\n                    this._options.onFirstListenerAdd(this);\r\n                }\r\n                this._callbacks.add(listener, thisArgs);\r\n                let result;\r\n                result = {\r\n                    dispose: () => {\r\n                        this._callbacks.remove(listener, thisArgs);\r\n                        result.dispose = Emitter._noop;\r\n                        if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {\r\n                            this._options.onLastListenerRemove(this);\r\n                        }\r\n                    }\r\n                };\r\n                if (Array.isArray(disposables)) {\r\n                    disposables.push(result);\r\n                }\r\n                return result;\r\n            };\r\n        }\r\n        return this._event;\r\n    }\r\n    /**\r\n     * To be kept private to fire an event to\r\n     * subscribers\r\n     */\r\n    fire(event) {\r\n        if (this._callbacks) {\r\n            this._callbacks.invoke.call(this._callbacks, event);\r\n        }\r\n    }\r\n    dispose() {\r\n        if (this._callbacks) {\r\n            this._callbacks.dispose();\r\n            this._callbacks = undefined;\r\n        }\r\n    }\r\n}\r\nexports.Emitter = Emitter;\r\nEmitter._noop = function () { };\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"./events\");\r\nconst Is = require(\"./is\");\r\nlet DefaultSize = 8192;\r\nlet CR = Buffer.from('\\r', 'ascii')[0];\r\nlet LF = Buffer.from('\\n', 'ascii')[0];\r\nlet CRLF = '\\r\\n';\r\nclass MessageBuffer {\r\n    constructor(encoding = 'utf8') {\r\n        this.encoding = encoding;\r\n        this.index = 0;\r\n        this.buffer = Buffer.allocUnsafe(DefaultSize);\r\n    }\r\n    append(chunk) {\r\n        var toAppend = chunk;\r\n        if (typeof (chunk) === 'string') {\r\n            var str = chunk;\r\n            var bufferLen = Buffer.byteLength(str, this.encoding);\r\n            toAppend = Buffer.allocUnsafe(bufferLen);\r\n            toAppend.write(str, 0, bufferLen, this.encoding);\r\n        }\r\n        if (this.buffer.length - this.index >= toAppend.length) {\r\n            toAppend.copy(this.buffer, this.index, 0, toAppend.length);\r\n        }\r\n        else {\r\n            var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;\r\n            if (this.index === 0) {\r\n                this.buffer = Buffer.allocUnsafe(newSize);\r\n                toAppend.copy(this.buffer, 0, 0, toAppend.length);\r\n            }\r\n            else {\r\n                this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);\r\n            }\r\n        }\r\n        this.index += toAppend.length;\r\n    }\r\n    tryReadHeaders() {\r\n        let result = undefined;\r\n        let current = 0;\r\n        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\n            current++;\r\n        }\r\n        // No header / body separator found (e.g CRLFCRLF)\r\n        if (current + 3 >= this.index) {\r\n            return result;\r\n        }\r\n        result = Object.create(null);\r\n        let headers = this.buffer.toString('ascii', 0, current).split(CRLF);\r\n        headers.forEach((header) => {\r\n            let index = header.indexOf(':');\r\n            if (index === -1) {\r\n                throw new Error('Message header must separate key and value using :');\r\n            }\r\n            let key = header.substr(0, index);\r\n            let value = header.substr(index + 1).trim();\r\n            result[key] = value;\r\n        });\r\n        let nextStart = current + 4;\r\n        this.buffer = this.buffer.slice(nextStart);\r\n        this.index = this.index - nextStart;\r\n        return result;\r\n    }\r\n    tryReadContent(length) {\r\n        if (this.index < length) {\r\n            return null;\r\n        }\r\n        let result = this.buffer.toString(this.encoding, 0, length);\r\n        let nextStart = length;\r\n        this.buffer.copy(this.buffer, 0, nextStart);\r\n        this.index = this.index - nextStart;\r\n        return result;\r\n    }\r\n    get numberOfBytes() {\r\n        return this.index;\r\n    }\r\n}\r\nvar MessageReader;\r\n(function (MessageReader) {\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&\r\n            Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);\r\n    }\r\n    MessageReader.is = is;\r\n})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));\r\nclass AbstractMessageReader {\r\n    constructor() {\r\n        this.errorEmitter = new events_1.Emitter();\r\n        this.closeEmitter = new events_1.Emitter();\r\n        this.partialMessageEmitter = new events_1.Emitter();\r\n    }\r\n    dispose() {\r\n        this.errorEmitter.dispose();\r\n        this.closeEmitter.dispose();\r\n    }\r\n    get onError() {\r\n        return this.errorEmitter.event;\r\n    }\r\n    fireError(error) {\r\n        this.errorEmitter.fire(this.asError(error));\r\n    }\r\n    get onClose() {\r\n        return this.closeEmitter.event;\r\n    }\r\n    fireClose() {\r\n        this.closeEmitter.fire(undefined);\r\n    }\r\n    get onPartialMessage() {\r\n        return this.partialMessageEmitter.event;\r\n    }\r\n    firePartialMessage(info) {\r\n        this.partialMessageEmitter.fire(info);\r\n    }\r\n    asError(error) {\r\n        if (error instanceof Error) {\r\n            return error;\r\n        }\r\n        else {\r\n            return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r\n        }\r\n    }\r\n}\r\nexports.AbstractMessageReader = AbstractMessageReader;\r\nclass StreamMessageReader extends AbstractMessageReader {\r\n    constructor(readable, encoding = 'utf8') {\r\n        super();\r\n        this.readable = readable;\r\n        this.buffer = new MessageBuffer(encoding);\r\n        this._partialMessageTimeout = 10000;\r\n    }\r\n    set partialMessageTimeout(timeout) {\r\n        this._partialMessageTimeout = timeout;\r\n    }\r\n    get partialMessageTimeout() {\r\n        return this._partialMessageTimeout;\r\n    }\r\n    listen(callback) {\r\n        this.nextMessageLength = -1;\r\n        this.messageToken = 0;\r\n        this.partialMessageTimer = undefined;\r\n        this.callback = callback;\r\n        this.readable.on('data', (data) => {\r\n            this.onData(data);\r\n        });\r\n        this.readable.on('error', (error) => this.fireError(error));\r\n        this.readable.on('close', () => this.fireClose());\r\n    }\r\n    onData(data) {\r\n        this.buffer.append(data);\r\n        while (true) {\r\n            if (this.nextMessageLength === -1) {\r\n                let headers = this.buffer.tryReadHeaders();\r\n                if (!headers) {\r\n                    return;\r\n                }\r\n                let contentLength = headers['Content-Length'];\r\n                if (!contentLength) {\r\n                    throw new Error('Header must provide a Content-Length property.');\r\n                }\r\n                let length = parseInt(contentLength);\r\n                if (isNaN(length)) {\r\n                    throw new Error('Content-Length value must be a number.');\r\n                }\r\n                this.nextMessageLength = length;\r\n                // Take the encoding form the header. For compatibility\r\n                // treat both utf-8 and utf8 as node utf8\r\n            }\r\n            var msg = this.buffer.tryReadContent(this.nextMessageLength);\r\n            if (msg === null) {\r\n                /** We haven't received the full message yet. */\r\n                this.setPartialMessageTimer();\r\n                return;\r\n            }\r\n            this.clearPartialMessageTimer();\r\n            this.nextMessageLength = -1;\r\n            this.messageToken++;\r\n            var json = JSON.parse(msg);\r\n            this.callback(json);\r\n        }\r\n    }\r\n    clearPartialMessageTimer() {\r\n        if (this.partialMessageTimer) {\r\n            clearTimeout(this.partialMessageTimer);\r\n            this.partialMessageTimer = undefined;\r\n        }\r\n    }\r\n    setPartialMessageTimer() {\r\n        this.clearPartialMessageTimer();\r\n        if (this._partialMessageTimeout <= 0) {\r\n            return;\r\n        }\r\n        this.partialMessageTimer = setTimeout((token, timeout) => {\r\n            this.partialMessageTimer = undefined;\r\n            if (token === this.messageToken) {\r\n                this.firePartialMessage({ messageToken: token, waitingTime: timeout });\r\n                this.setPartialMessageTimer();\r\n            }\r\n        }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);\r\n    }\r\n}\r\nexports.StreamMessageReader = StreamMessageReader;\r\nclass IPCMessageReader extends AbstractMessageReader {\r\n    constructor(process) {\r\n        super();\r\n        this.process = process;\r\n        let eventEmitter = this.process;\r\n        eventEmitter.on('error', (error) => this.fireError(error));\r\n        eventEmitter.on('close', () => this.fireClose());\r\n    }\r\n    listen(callback) {\r\n        this.process.on('message', callback);\r\n    }\r\n}\r\nexports.IPCMessageReader = IPCMessageReader;\r\nclass SocketMessageReader extends StreamMessageReader {\r\n    constructor(socket, encoding = 'utf-8') {\r\n        super(socket, encoding);\r\n    }\r\n}\r\nexports.SocketMessageReader = SocketMessageReader;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"./events\");\r\nconst Is = require(\"./is\");\r\nlet ContentLength = 'Content-Length: ';\r\nlet CRLF = '\\r\\n';\r\nvar MessageWriter;\r\n(function (MessageWriter) {\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&\r\n            Is.func(candidate.onError) && Is.func(candidate.write);\r\n    }\r\n    MessageWriter.is = is;\r\n})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));\r\nclass AbstractMessageWriter {\r\n    constructor() {\r\n        this.errorEmitter = new events_1.Emitter();\r\n        this.closeEmitter = new events_1.Emitter();\r\n    }\r\n    dispose() {\r\n        this.errorEmitter.dispose();\r\n        this.closeEmitter.dispose();\r\n    }\r\n    get onError() {\r\n        return this.errorEmitter.event;\r\n    }\r\n    fireError(error, message, count) {\r\n        this.errorEmitter.fire([this.asError(error), message, count]);\r\n    }\r\n    get onClose() {\r\n        return this.closeEmitter.event;\r\n    }\r\n    fireClose() {\r\n        this.closeEmitter.fire(undefined);\r\n    }\r\n    asError(error) {\r\n        if (error instanceof Error) {\r\n            return error;\r\n        }\r\n        else {\r\n            return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);\r\n        }\r\n    }\r\n}\r\nexports.AbstractMessageWriter = AbstractMessageWriter;\r\nclass StreamMessageWriter extends AbstractMessageWriter {\r\n    constructor(writable, encoding = 'utf8') {\r\n        super();\r\n        this.writable = writable;\r\n        this.encoding = encoding;\r\n        this.errorCount = 0;\r\n        this.writable.on('error', (error) => this.fireError(error));\r\n        this.writable.on('close', () => this.fireClose());\r\n    }\r\n    write(msg) {\r\n        let json = JSON.stringify(msg);\r\n        let contentLength = Buffer.byteLength(json, this.encoding);\r\n        let headers = [\r\n            ContentLength, contentLength.toString(), CRLF,\r\n            CRLF\r\n        ];\r\n        try {\r\n            // Header must be written in ASCII encoding\r\n            this.writable.write(headers.join(''), 'ascii');\r\n            // Now write the content. This can be written in any encoding\r\n            this.writable.write(json, this.encoding);\r\n            this.errorCount = 0;\r\n        }\r\n        catch (error) {\r\n            this.errorCount++;\r\n            this.fireError(error, msg, this.errorCount);\r\n        }\r\n    }\r\n}\r\nexports.StreamMessageWriter = StreamMessageWriter;\r\nclass IPCMessageWriter extends AbstractMessageWriter {\r\n    constructor(process) {\r\n        super();\r\n        this.process = process;\r\n        this.errorCount = 0;\r\n        this.queue = [];\r\n        this.sending = false;\r\n        let eventEmitter = this.process;\r\n        eventEmitter.on('error', (error) => this.fireError(error));\r\n        eventEmitter.on('close', () => this.fireClose);\r\n    }\r\n    write(msg) {\r\n        if (!this.sending && this.queue.length === 0) {\r\n            // See https://github.com/nodejs/node/issues/7657\r\n            this.doWriteMessage(msg);\r\n        }\r\n        else {\r\n            this.queue.push(msg);\r\n        }\r\n    }\r\n    doWriteMessage(msg) {\r\n        try {\r\n            if (this.process.send) {\r\n                this.sending = true;\r\n                this.process.send(msg, undefined, undefined, (error) => {\r\n                    this.sending = false;\r\n                    if (error) {\r\n                        this.errorCount++;\r\n                        this.fireError(error, msg, this.errorCount);\r\n                    }\r\n                    else {\r\n                        this.errorCount = 0;\r\n                    }\r\n                    if (this.queue.length > 0) {\r\n                        this.doWriteMessage(this.queue.shift());\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        catch (error) {\r\n            this.errorCount++;\r\n            this.fireError(error, msg, this.errorCount);\r\n        }\r\n    }\r\n}\r\nexports.IPCMessageWriter = IPCMessageWriter;\r\nclass SocketMessageWriter extends AbstractMessageWriter {\r\n    constructor(socket, encoding = 'utf8') {\r\n        super();\r\n        this.socket = socket;\r\n        this.queue = [];\r\n        this.sending = false;\r\n        this.encoding = encoding;\r\n        this.errorCount = 0;\r\n        this.socket.on('error', (error) => this.fireError(error));\r\n        this.socket.on('close', () => this.fireClose());\r\n    }\r\n    dispose() {\r\n        super.dispose();\r\n        this.socket.destroy();\r\n    }\r\n    write(msg) {\r\n        if (!this.sending && this.queue.length === 0) {\r\n            // See https://github.com/nodejs/node/issues/7657\r\n            this.doWriteMessage(msg);\r\n        }\r\n        else {\r\n            this.queue.push(msg);\r\n        }\r\n    }\r\n    doWriteMessage(msg) {\r\n        let json = JSON.stringify(msg);\r\n        let contentLength = Buffer.byteLength(json, this.encoding);\r\n        let headers = [\r\n            ContentLength, contentLength.toString(), CRLF,\r\n            CRLF\r\n        ];\r\n        try {\r\n            // Header must be written in ASCII encoding\r\n            this.sending = true;\r\n            this.socket.write(headers.join(''), 'ascii', (error) => {\r\n                if (error) {\r\n                    this.handleError(error, msg);\r\n                }\r\n                try {\r\n                    // Now write the content. This can be written in any encoding\r\n                    this.socket.write(json, this.encoding, (error) => {\r\n                        this.sending = false;\r\n                        if (error) {\r\n                            this.handleError(error, msg);\r\n                        }\r\n                        else {\r\n                            this.errorCount = 0;\r\n                        }\r\n                        if (this.queue.length > 0) {\r\n                            this.doWriteMessage(this.queue.shift());\r\n                        }\r\n                    });\r\n                }\r\n                catch (error) {\r\n                    this.handleError(error, msg);\r\n                }\r\n            });\r\n        }\r\n        catch (error) {\r\n            this.handleError(error, msg);\r\n        }\r\n    }\r\n    handleError(error, msg) {\r\n        this.errorCount++;\r\n        this.fireError(error, msg, this.errorCount);\r\n    }\r\n}\r\nexports.SocketMessageWriter = SocketMessageWriter;\r\n", "/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst events_1 = require(\"./events\");\r\nconst Is = require(\"./is\");\r\nvar CancellationToken;\r\n(function (CancellationToken) {\r\n    CancellationToken.None = Object.freeze({\r\n        isCancellationRequested: false,\r\n        onCancellationRequested: events_1.Event.None\r\n    });\r\n    CancellationToken.Cancelled = Object.freeze({\r\n        isCancellationRequested: true,\r\n        onCancellationRequested: events_1.Event.None\r\n    });\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && (candidate === CancellationToken.None\r\n            || candidate === CancellationToken.Cancelled\r\n            || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));\r\n    }\r\n    CancellationToken.is = is;\r\n})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));\r\nconst shortcutEvent = Object.freeze(function (callback, context) {\r\n    let handle = setTimeout(callback.bind(context), 0);\r\n    return { dispose() { clearTimeout(handle); } };\r\n});\r\nclass MutableToken {\r\n    constructor() {\r\n        this._isCancelled = false;\r\n    }\r\n    cancel() {\r\n        if (!this._isCancelled) {\r\n            this._isCancelled = true;\r\n            if (this._emitter) {\r\n                this._emitter.fire(undefined);\r\n                this.dispose();\r\n            }\r\n        }\r\n    }\r\n    get isCancellationRequested() {\r\n        return this._isCancelled;\r\n    }\r\n    get onCancellationRequested() {\r\n        if (this._isCancelled) {\r\n            return shortcutEvent;\r\n        }\r\n        if (!this._emitter) {\r\n            this._emitter = new events_1.Emitter();\r\n        }\r\n        return this._emitter.event;\r\n    }\r\n    dispose() {\r\n        if (this._emitter) {\r\n            this._emitter.dispose();\r\n            this._emitter = undefined;\r\n        }\r\n    }\r\n}\r\nclass CancellationTokenSource {\r\n    get token() {\r\n        if (!this._token) {\r\n            // be lazy and create the token only when\r\n            // actually needed\r\n            this._token = new MutableToken();\r\n        }\r\n        return this._token;\r\n    }\r\n    cancel() {\r\n        if (!this._token) {\r\n            // save an object by returning the default\r\n            // cancelled token when cancellation happens\r\n            // before someone asks for the token\r\n            this._token = CancellationToken.Cancelled;\r\n        }\r\n        else {\r\n            this._token.cancel();\r\n        }\r\n    }\r\n    dispose() {\r\n        if (!this._token) {\r\n            // ensure to initialize with an empty token if we had none\r\n            this._token = CancellationToken.None;\r\n        }\r\n        else if (this._token instanceof MutableToken) {\r\n            // actually dispose\r\n            this._token.dispose();\r\n        }\r\n    }\r\n}\r\nexports.CancellationTokenSource = CancellationTokenSource;\r\n", "\"use strict\";\r\n/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Touch;\r\n(function (Touch) {\r\n    Touch.None = 0;\r\n    Touch.First = 1;\r\n    Touch.Last = 2;\r\n})(Touch = exports.Touch || (exports.Touch = {}));\r\nclass LinkedMap {\r\n    constructor() {\r\n        this._map = new Map();\r\n        this._head = undefined;\r\n        this._tail = undefined;\r\n        this._size = 0;\r\n    }\r\n    clear() {\r\n        this._map.clear();\r\n        this._head = undefined;\r\n        this._tail = undefined;\r\n        this._size = 0;\r\n    }\r\n    isEmpty() {\r\n        return !this._head && !this._tail;\r\n    }\r\n    get size() {\r\n        return this._size;\r\n    }\r\n    has(key) {\r\n        return this._map.has(key);\r\n    }\r\n    get(key) {\r\n        const item = this._map.get(key);\r\n        if (!item) {\r\n            return undefined;\r\n        }\r\n        return item.value;\r\n    }\r\n    set(key, value, touch = Touch.None) {\r\n        let item = this._map.get(key);\r\n        if (item) {\r\n            item.value = value;\r\n            if (touch !== Touch.None) {\r\n                this.touch(item, touch);\r\n            }\r\n        }\r\n        else {\r\n            item = { key, value, next: undefined, previous: undefined };\r\n            switch (touch) {\r\n                case Touch.None:\r\n                    this.addItemLast(item);\r\n                    break;\r\n                case Touch.First:\r\n                    this.addItemFirst(item);\r\n                    break;\r\n                case Touch.Last:\r\n                    this.addItemLast(item);\r\n                    break;\r\n                default:\r\n                    this.addItemLast(item);\r\n                    break;\r\n            }\r\n            this._map.set(key, item);\r\n            this._size++;\r\n        }\r\n    }\r\n    delete(key) {\r\n        const item = this._map.get(key);\r\n        if (!item) {\r\n            return false;\r\n        }\r\n        this._map.delete(key);\r\n        this.removeItem(item);\r\n        this._size--;\r\n        return true;\r\n    }\r\n    shift() {\r\n        if (!this._head && !this._tail) {\r\n            return undefined;\r\n        }\r\n        if (!this._head || !this._tail) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        const item = this._head;\r\n        this._map.delete(item.key);\r\n        this.removeItem(item);\r\n        this._size--;\r\n        return item.value;\r\n    }\r\n    forEach(callbackfn, thisArg) {\r\n        let current = this._head;\r\n        while (current) {\r\n            if (thisArg) {\r\n                callbackfn.bind(thisArg)(current.value, current.key, this);\r\n            }\r\n            else {\r\n                callbackfn(current.value, current.key, this);\r\n            }\r\n            current = current.next;\r\n        }\r\n    }\r\n    forEachReverse(callbackfn, thisArg) {\r\n        let current = this._tail;\r\n        while (current) {\r\n            if (thisArg) {\r\n                callbackfn.bind(thisArg)(current.value, current.key, this);\r\n            }\r\n            else {\r\n                callbackfn(current.value, current.key, this);\r\n            }\r\n            current = current.previous;\r\n        }\r\n    }\r\n    values() {\r\n        let result = [];\r\n        let current = this._head;\r\n        while (current) {\r\n            result.push(current.value);\r\n            current = current.next;\r\n        }\r\n        return result;\r\n    }\r\n    keys() {\r\n        let result = [];\r\n        let current = this._head;\r\n        while (current) {\r\n            result.push(current.key);\r\n            current = current.next;\r\n        }\r\n        return result;\r\n    }\r\n    /* JSON RPC run on es5 which has no Symbol.iterator\r\n    public keys(): IterableIterator<K> {\r\n        let current = this._head;\r\n        let iterator: IterableIterator<K> = {\r\n            [Symbol.iterator]() {\r\n                return iterator;\r\n            },\r\n            next():IteratorResult<K> {\r\n                if (current) {\r\n                    let result = { value: current.key, done: false };\r\n                    current = current.next;\r\n                    return result;\r\n                } else {\r\n                    return { value: undefined, done: true };\r\n                }\r\n            }\r\n        };\r\n        return iterator;\r\n    }\r\n\r\n    public values(): IterableIterator<V> {\r\n        let current = this._head;\r\n        let iterator: IterableIterator<V> = {\r\n            [Symbol.iterator]() {\r\n                return iterator;\r\n            },\r\n            next():IteratorResult<V> {\r\n                if (current) {\r\n                    let result = { value: current.value, done: false };\r\n                    current = current.next;\r\n                    return result;\r\n                } else {\r\n                    return { value: undefined, done: true };\r\n                }\r\n            }\r\n        };\r\n        return iterator;\r\n    }\r\n    */\r\n    addItemFirst(item) {\r\n        // First time Insert\r\n        if (!this._head && !this._tail) {\r\n            this._tail = item;\r\n        }\r\n        else if (!this._head) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        else {\r\n            item.next = this._head;\r\n            this._head.previous = item;\r\n        }\r\n        this._head = item;\r\n    }\r\n    addItemLast(item) {\r\n        // First time Insert\r\n        if (!this._head && !this._tail) {\r\n            this._head = item;\r\n        }\r\n        else if (!this._tail) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        else {\r\n            item.previous = this._tail;\r\n            this._tail.next = item;\r\n        }\r\n        this._tail = item;\r\n    }\r\n    removeItem(item) {\r\n        if (item === this._head && item === this._tail) {\r\n            this._head = undefined;\r\n            this._tail = undefined;\r\n        }\r\n        else if (item === this._head) {\r\n            this._head = item.next;\r\n        }\r\n        else if (item === this._tail) {\r\n            this._tail = item.previous;\r\n        }\r\n        else {\r\n            const next = item.next;\r\n            const previous = item.previous;\r\n            if (!next || !previous) {\r\n                throw new Error('Invalid list');\r\n            }\r\n            next.previous = previous;\r\n            previous.next = next;\r\n        }\r\n    }\r\n    touch(item, touch) {\r\n        if (!this._head || !this._tail) {\r\n            throw new Error('Invalid list');\r\n        }\r\n        if ((touch !== Touch.First && touch !== Touch.Last)) {\r\n            return;\r\n        }\r\n        if (touch === Touch.First) {\r\n            if (item === this._head) {\r\n                return;\r\n            }\r\n            const next = item.next;\r\n            const previous = item.previous;\r\n            // Unlink the item\r\n            if (item === this._tail) {\r\n                // previous must be defined since item was not head but is tail\r\n                // So there are more than on item in the map\r\n                previous.next = undefined;\r\n                this._tail = previous;\r\n            }\r\n            else {\r\n                // Both next and previous are not undefined since item was neither head nor tail.\r\n                next.previous = previous;\r\n                previous.next = next;\r\n            }\r\n            // Insert the node at head\r\n            item.previous = undefined;\r\n            item.next = this._head;\r\n            this._head.previous = item;\r\n            this._head = item;\r\n        }\r\n        else if (touch === Touch.Last) {\r\n            if (item === this._tail) {\r\n                return;\r\n            }\r\n            const next = item.next;\r\n            const previous = item.previous;\r\n            // Unlink the item.\r\n            if (item === this._head) {\r\n                // next must be defined since item was not tail but is head\r\n                // So there are more than on item in the map\r\n                next.previous = undefined;\r\n                this._head = next;\r\n            }\r\n            else {\r\n                // Both next and previous are not undefined since item was neither head nor tail.\r\n                next.previous = previous;\r\n                previous.next = next;\r\n            }\r\n            item.next = undefined;\r\n            item.previous = this._tail;\r\n            this._tail.next = item;\r\n            this._tail = item;\r\n        }\r\n    }\r\n}\r\nexports.LinkedMap = LinkedMap;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst path_1 = require(\"path\");\r\nconst os_1 = require(\"os\");\r\nconst crypto_1 = require(\"crypto\");\r\nconst net_1 = require(\"net\");\r\nconst messageReader_1 = require(\"./messageReader\");\r\nconst messageWriter_1 = require(\"./messageWriter\");\r\nfunction generateRandomPipeName() {\r\n    const randomSuffix = crypto_1.randomBytes(21).toString('hex');\r\n    if (process.platform === 'win32') {\r\n        return `\\\\\\\\.\\\\pipe\\\\vscode-jsonrpc-${randomSuffix}-sock`;\r\n    }\r\n    else {\r\n        // Mac/Unix: use socket file\r\n        return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);\r\n    }\r\n}\r\nexports.generateRandomPipeName = generateRandomPipeName;\r\nfunction createClientPipeTransport(pipeName, encoding = 'utf-8') {\r\n    let connectResolve;\r\n    let connected = new Promise((resolve, _reject) => {\r\n        connectResolve = resolve;\r\n    });\r\n    return new Promise((resolve, reject) => {\r\n        let server = net_1.createServer((socket) => {\r\n            server.close();\r\n            connectResolve([\r\n                new messageReader_1.SocketMessageReader(socket, encoding),\r\n                new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n            ]);\r\n        });\r\n        server.on('error', reject);\r\n        server.listen(pipeName, () => {\r\n            server.removeListener('error', reject);\r\n            resolve({\r\n                onConnected: () => { return connected; }\r\n            });\r\n        });\r\n    });\r\n}\r\nexports.createClientPipeTransport = createClientPipeTransport;\r\nfunction createServerPipeTransport(pipeName, encoding = 'utf-8') {\r\n    const socket = net_1.createConnection(pipeName);\r\n    return [\r\n        new messageReader_1.SocketMessageReader(socket, encoding),\r\n        new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n    ];\r\n}\r\nexports.createServerPipeTransport = createServerPipeTransport;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst net_1 = require(\"net\");\r\nconst messageReader_1 = require(\"./messageReader\");\r\nconst messageWriter_1 = require(\"./messageWriter\");\r\nfunction createClientSocketTransport(port, encoding = 'utf-8') {\r\n    let connectResolve;\r\n    let connected = new Promise((resolve, _reject) => {\r\n        connectResolve = resolve;\r\n    });\r\n    return new Promise((resolve, reject) => {\r\n        let server = net_1.createServer((socket) => {\r\n            server.close();\r\n            connectResolve([\r\n                new messageReader_1.SocketMessageReader(socket, encoding),\r\n                new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n            ]);\r\n        });\r\n        server.on('error', reject);\r\n        server.listen(port, '127.0.0.1', () => {\r\n            server.removeListener('error', reject);\r\n            resolve({\r\n                onConnected: () => { return connected; }\r\n            });\r\n        });\r\n    });\r\n}\r\nexports.createClientSocketTransport = createClientSocketTransport;\r\nfunction createServerSocketTransport(port, encoding = 'utf-8') {\r\n    const socket = net_1.createConnection(port, '127.0.0.1');\r\n    return [\r\n        new messageReader_1.SocketMessageReader(socket, encoding),\r\n        new messageWriter_1.SocketMessageWriter(socket, encoding)\r\n    ];\r\n}\r\nexports.createServerSocketTransport = createServerSocketTransport;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n/// <reference path=\"../typings/thenable.d.ts\" />\r\n'use strict';\r\nfunction __export(m) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst Is = require(\"./is\");\r\nconst messages_1 = require(\"./messages\");\r\nexports.RequestType = messages_1.RequestType;\r\nexports.RequestType0 = messages_1.RequestType0;\r\nexports.RequestType1 = messages_1.RequestType1;\r\nexports.RequestType2 = messages_1.RequestType2;\r\nexports.RequestType3 = messages_1.RequestType3;\r\nexports.RequestType4 = messages_1.RequestType4;\r\nexports.RequestType5 = messages_1.RequestType5;\r\nexports.RequestType6 = messages_1.RequestType6;\r\nexports.RequestType7 = messages_1.RequestType7;\r\nexports.RequestType8 = messages_1.RequestType8;\r\nexports.RequestType9 = messages_1.RequestType9;\r\nexports.ResponseError = messages_1.ResponseError;\r\nexports.ErrorCodes = messages_1.ErrorCodes;\r\nexports.NotificationType = messages_1.NotificationType;\r\nexports.NotificationType0 = messages_1.NotificationType0;\r\nexports.NotificationType1 = messages_1.NotificationType1;\r\nexports.NotificationType2 = messages_1.NotificationType2;\r\nexports.NotificationType3 = messages_1.NotificationType3;\r\nexports.NotificationType4 = messages_1.NotificationType4;\r\nexports.NotificationType5 = messages_1.NotificationType5;\r\nexports.NotificationType6 = messages_1.NotificationType6;\r\nexports.NotificationType7 = messages_1.NotificationType7;\r\nexports.NotificationType8 = messages_1.NotificationType8;\r\nexports.NotificationType9 = messages_1.NotificationType9;\r\nconst messageReader_1 = require(\"./messageReader\");\r\nexports.MessageReader = messageReader_1.MessageReader;\r\nexports.StreamMessageReader = messageReader_1.StreamMessageReader;\r\nexports.IPCMessageReader = messageReader_1.IPCMessageReader;\r\nexports.SocketMessageReader = messageReader_1.SocketMessageReader;\r\nconst messageWriter_1 = require(\"./messageWriter\");\r\nexports.MessageWriter = messageWriter_1.MessageWriter;\r\nexports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;\r\nexports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;\r\nexports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;\r\nconst events_1 = require(\"./events\");\r\nexports.Disposable = events_1.Disposable;\r\nexports.Event = events_1.Event;\r\nexports.Emitter = events_1.Emitter;\r\nconst cancellation_1 = require(\"./cancellation\");\r\nexports.CancellationTokenSource = cancellation_1.CancellationTokenSource;\r\nexports.CancellationToken = cancellation_1.CancellationToken;\r\nconst linkedMap_1 = require(\"./linkedMap\");\r\n__export(require(\"./pipeSupport\"));\r\n__export(require(\"./socketSupport\"));\r\nvar CancelNotification;\r\n(function (CancelNotification) {\r\n    CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');\r\n})(CancelNotification || (CancelNotification = {}));\r\nvar ProgressNotification;\r\n(function (ProgressNotification) {\r\n    ProgressNotification.type = new messages_1.NotificationType('$/progress');\r\n})(ProgressNotification || (ProgressNotification = {}));\r\nclass ProgressType {\r\n    constructor() {\r\n    }\r\n}\r\nexports.ProgressType = ProgressType;\r\nexports.NullLogger = Object.freeze({\r\n    error: () => { },\r\n    warn: () => { },\r\n    info: () => { },\r\n    log: () => { }\r\n});\r\nvar Trace;\r\n(function (Trace) {\r\n    Trace[Trace[\"Off\"] = 0] = \"Off\";\r\n    Trace[Trace[\"Messages\"] = 1] = \"Messages\";\r\n    Trace[Trace[\"Verbose\"] = 2] = \"Verbose\";\r\n})(Trace = exports.Trace || (exports.Trace = {}));\r\n(function (Trace) {\r\n    function fromString(value) {\r\n        if (!Is.string(value)) {\r\n            return Trace.Off;\r\n        }\r\n        value = value.toLowerCase();\r\n        switch (value) {\r\n            case 'off':\r\n                return Trace.Off;\r\n            case 'messages':\r\n                return Trace.Messages;\r\n            case 'verbose':\r\n                return Trace.Verbose;\r\n            default:\r\n                return Trace.Off;\r\n        }\r\n    }\r\n    Trace.fromString = fromString;\r\n    function toString(value) {\r\n        switch (value) {\r\n            case Trace.Off:\r\n                return 'off';\r\n            case Trace.Messages:\r\n                return 'messages';\r\n            case Trace.Verbose:\r\n                return 'verbose';\r\n            default:\r\n                return 'off';\r\n        }\r\n    }\r\n    Trace.toString = toString;\r\n})(Trace = exports.Trace || (exports.Trace = {}));\r\nvar TraceFormat;\r\n(function (TraceFormat) {\r\n    TraceFormat[\"Text\"] = \"text\";\r\n    TraceFormat[\"JSON\"] = \"json\";\r\n})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));\r\n(function (TraceFormat) {\r\n    function fromString(value) {\r\n        value = value.toLowerCase();\r\n        if (value === 'json') {\r\n            return TraceFormat.JSON;\r\n        }\r\n        else {\r\n            return TraceFormat.Text;\r\n        }\r\n    }\r\n    TraceFormat.fromString = fromString;\r\n})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));\r\nvar SetTraceNotification;\r\n(function (SetTraceNotification) {\r\n    SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');\r\n})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));\r\nvar LogTraceNotification;\r\n(function (LogTraceNotification) {\r\n    LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');\r\n})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));\r\nvar ConnectionErrors;\r\n(function (ConnectionErrors) {\r\n    /**\r\n     * The connection is closed.\r\n     */\r\n    ConnectionErrors[ConnectionErrors[\"Closed\"] = 1] = \"Closed\";\r\n    /**\r\n     * The connection got disposed.\r\n     */\r\n    ConnectionErrors[ConnectionErrors[\"Disposed\"] = 2] = \"Disposed\";\r\n    /**\r\n     * The connection is already in listening mode.\r\n     */\r\n    ConnectionErrors[ConnectionErrors[\"AlreadyListening\"] = 3] = \"AlreadyListening\";\r\n})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));\r\nclass ConnectionError extends Error {\r\n    constructor(code, message) {\r\n        super(message);\r\n        this.code = code;\r\n        Object.setPrototypeOf(this, ConnectionError.prototype);\r\n    }\r\n}\r\nexports.ConnectionError = ConnectionError;\r\nvar ConnectionStrategy;\r\n(function (ConnectionStrategy) {\r\n    function is(value) {\r\n        let candidate = value;\r\n        return candidate && Is.func(candidate.cancelUndispatched);\r\n    }\r\n    ConnectionStrategy.is = is;\r\n})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));\r\nvar ConnectionState;\r\n(function (ConnectionState) {\r\n    ConnectionState[ConnectionState[\"New\"] = 1] = \"New\";\r\n    ConnectionState[ConnectionState[\"Listening\"] = 2] = \"Listening\";\r\n    ConnectionState[ConnectionState[\"Closed\"] = 3] = \"Closed\";\r\n    ConnectionState[ConnectionState[\"Disposed\"] = 4] = \"Disposed\";\r\n})(ConnectionState || (ConnectionState = {}));\r\nfunction _createMessageConnection(messageReader, messageWriter, logger, strategy) {\r\n    let sequenceNumber = 0;\r\n    let notificationSquenceNumber = 0;\r\n    let unknownResponseSquenceNumber = 0;\r\n    const version = '2.0';\r\n    let starRequestHandler = undefined;\r\n    let requestHandlers = Object.create(null);\r\n    let starNotificationHandler = undefined;\r\n    let notificationHandlers = Object.create(null);\r\n    let progressHandlers = new Map();\r\n    let timer;\r\n    let messageQueue = new linkedMap_1.LinkedMap();\r\n    let responsePromises = Object.create(null);\r\n    let requestTokens = Object.create(null);\r\n    let trace = Trace.Off;\r\n    let traceFormat = TraceFormat.Text;\r\n    let tracer;\r\n    let state = ConnectionState.New;\r\n    let errorEmitter = new events_1.Emitter();\r\n    let closeEmitter = new events_1.Emitter();\r\n    let unhandledNotificationEmitter = new events_1.Emitter();\r\n    let unhandledProgressEmitter = new events_1.Emitter();\r\n    let disposeEmitter = new events_1.Emitter();\r\n    function createRequestQueueKey(id) {\r\n        return 'req-' + id.toString();\r\n    }\r\n    function createResponseQueueKey(id) {\r\n        if (id === null) {\r\n            return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();\r\n        }\r\n        else {\r\n            return 'res-' + id.toString();\r\n        }\r\n    }\r\n    function createNotificationQueueKey() {\r\n        return 'not-' + (++notificationSquenceNumber).toString();\r\n    }\r\n    function addMessageToQueue(queue, message) {\r\n        if (messages_1.isRequestMessage(message)) {\r\n            queue.set(createRequestQueueKey(message.id), message);\r\n        }\r\n        else if (messages_1.isResponseMessage(message)) {\r\n            queue.set(createResponseQueueKey(message.id), message);\r\n        }\r\n        else {\r\n            queue.set(createNotificationQueueKey(), message);\r\n        }\r\n    }\r\n    function cancelUndispatched(_message) {\r\n        return undefined;\r\n    }\r\n    function isListening() {\r\n        return state === ConnectionState.Listening;\r\n    }\r\n    function isClosed() {\r\n        return state === ConnectionState.Closed;\r\n    }\r\n    function isDisposed() {\r\n        return state === ConnectionState.Disposed;\r\n    }\r\n    function closeHandler() {\r\n        if (state === ConnectionState.New || state === ConnectionState.Listening) {\r\n            state = ConnectionState.Closed;\r\n            closeEmitter.fire(undefined);\r\n        }\r\n        // If the connection is disposed don't sent close events.\r\n    }\r\n    function readErrorHandler(error) {\r\n        errorEmitter.fire([error, undefined, undefined]);\r\n    }\r\n    function writeErrorHandler(data) {\r\n        errorEmitter.fire(data);\r\n    }\r\n    messageReader.onClose(closeHandler);\r\n    messageReader.onError(readErrorHandler);\r\n    messageWriter.onClose(closeHandler);\r\n    messageWriter.onError(writeErrorHandler);\r\n    function triggerMessageQueue() {\r\n        if (timer || messageQueue.size === 0) {\r\n            return;\r\n        }\r\n        timer = setImmediate(() => {\r\n            timer = undefined;\r\n            processMessageQueue();\r\n        });\r\n    }\r\n    function processMessageQueue() {\r\n        if (messageQueue.size === 0) {\r\n            return;\r\n        }\r\n        let message = messageQueue.shift();\r\n        try {\r\n            if (messages_1.isRequestMessage(message)) {\r\n                handleRequest(message);\r\n            }\r\n            else if (messages_1.isNotificationMessage(message)) {\r\n                handleNotification(message);\r\n            }\r\n            else if (messages_1.isResponseMessage(message)) {\r\n                handleResponse(message);\r\n            }\r\n            else {\r\n                handleInvalidMessage(message);\r\n            }\r\n        }\r\n        finally {\r\n            triggerMessageQueue();\r\n        }\r\n    }\r\n    let callback = (message) => {\r\n        try {\r\n            // We have received a cancellation message. Check if the message is still in the queue\r\n            // and cancel it if allowed to do so.\r\n            if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {\r\n                let key = createRequestQueueKey(message.params.id);\r\n                let toCancel = messageQueue.get(key);\r\n                if (messages_1.isRequestMessage(toCancel)) {\r\n                    let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);\r\n                    if (response && (response.error !== void 0 || response.result !== void 0)) {\r\n                        messageQueue.delete(key);\r\n                        response.id = toCancel.id;\r\n                        traceSendingResponse(response, message.method, Date.now());\r\n                        messageWriter.write(response);\r\n                        return;\r\n                    }\r\n                }\r\n            }\r\n            addMessageToQueue(messageQueue, message);\r\n        }\r\n        finally {\r\n            triggerMessageQueue();\r\n        }\r\n    };\r\n    function handleRequest(requestMessage) {\r\n        if (isDisposed()) {\r\n            // we return here silently since we fired an event when the\r\n            // connection got disposed.\r\n            return;\r\n        }\r\n        function reply(resultOrError, method, startTime) {\r\n            let message = {\r\n                jsonrpc: version,\r\n                id: requestMessage.id\r\n            };\r\n            if (resultOrError instanceof messages_1.ResponseError) {\r\n                message.error = resultOrError.toJson();\r\n            }\r\n            else {\r\n                message.result = resultOrError === void 0 ? null : resultOrError;\r\n            }\r\n            traceSendingResponse(message, method, startTime);\r\n            messageWriter.write(message);\r\n        }\r\n        function replyError(error, method, startTime) {\r\n            let message = {\r\n                jsonrpc: version,\r\n                id: requestMessage.id,\r\n                error: error.toJson()\r\n            };\r\n            traceSendingResponse(message, method, startTime);\r\n            messageWriter.write(message);\r\n        }\r\n        function replySuccess(result, method, startTime) {\r\n            // The JSON RPC defines that a response must either have a result or an error\r\n            // So we can't treat undefined as a valid response result.\r\n            if (result === void 0) {\r\n                result = null;\r\n            }\r\n            let message = {\r\n                jsonrpc: version,\r\n                id: requestMessage.id,\r\n                result: result\r\n            };\r\n            traceSendingResponse(message, method, startTime);\r\n            messageWriter.write(message);\r\n        }\r\n        traceReceivedRequest(requestMessage);\r\n        let element = requestHandlers[requestMessage.method];\r\n        let type;\r\n        let requestHandler;\r\n        if (element) {\r\n            type = element.type;\r\n            requestHandler = element.handler;\r\n        }\r\n        let startTime = Date.now();\r\n        if (requestHandler || starRequestHandler) {\r\n            let cancellationSource = new cancellation_1.CancellationTokenSource();\r\n            let tokenKey = String(requestMessage.id);\r\n            requestTokens[tokenKey] = cancellationSource;\r\n            try {\r\n                let handlerResult;\r\n                if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {\r\n                    handlerResult = requestHandler\r\n                        ? requestHandler(cancellationSource.token)\r\n                        : starRequestHandler(requestMessage.method, cancellationSource.token);\r\n                }\r\n                else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {\r\n                    handlerResult = requestHandler\r\n                        ? requestHandler(...requestMessage.params, cancellationSource.token)\r\n                        : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);\r\n                }\r\n                else {\r\n                    handlerResult = requestHandler\r\n                        ? requestHandler(requestMessage.params, cancellationSource.token)\r\n                        : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);\r\n                }\r\n                let promise = handlerResult;\r\n                if (!handlerResult) {\r\n                    delete requestTokens[tokenKey];\r\n                    replySuccess(handlerResult, requestMessage.method, startTime);\r\n                }\r\n                else if (promise.then) {\r\n                    promise.then((resultOrError) => {\r\n                        delete requestTokens[tokenKey];\r\n                        reply(resultOrError, requestMessage.method, startTime);\r\n                    }, error => {\r\n                        delete requestTokens[tokenKey];\r\n                        if (error instanceof messages_1.ResponseError) {\r\n                            replyError(error, requestMessage.method, startTime);\r\n                        }\r\n                        else if (error && Is.string(error.message)) {\r\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\r\n                        }\r\n                        else {\r\n                            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\r\n                        }\r\n                    });\r\n                }\r\n                else {\r\n                    delete requestTokens[tokenKey];\r\n                    reply(handlerResult, requestMessage.method, startTime);\r\n                }\r\n            }\r\n            catch (error) {\r\n                delete requestTokens[tokenKey];\r\n                if (error instanceof messages_1.ResponseError) {\r\n                    reply(error, requestMessage.method, startTime);\r\n                }\r\n                else if (error && Is.string(error.message)) {\r\n                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);\r\n                }\r\n                else {\r\n                    replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);\r\n        }\r\n    }\r\n    function handleResponse(responseMessage) {\r\n        if (isDisposed()) {\r\n            // See handle request.\r\n            return;\r\n        }\r\n        if (responseMessage.id === null) {\r\n            if (responseMessage.error) {\r\n                logger.error(`Received response message without id: Error is: \\n${JSON.stringify(responseMessage.error, undefined, 4)}`);\r\n            }\r\n            else {\r\n                logger.error(`Received response message without id. No further error information provided.`);\r\n            }\r\n        }\r\n        else {\r\n            let key = String(responseMessage.id);\r\n            let responsePromise = responsePromises[key];\r\n            traceReceivedResponse(responseMessage, responsePromise);\r\n            if (responsePromise) {\r\n                delete responsePromises[key];\r\n                try {\r\n                    if (responseMessage.error) {\r\n                        let error = responseMessage.error;\r\n                        responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));\r\n                    }\r\n                    else if (responseMessage.result !== void 0) {\r\n                        responsePromise.resolve(responseMessage.result);\r\n                    }\r\n                    else {\r\n                        throw new Error('Should never happen.');\r\n                    }\r\n                }\r\n                catch (error) {\r\n                    if (error.message) {\r\n                        logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);\r\n                    }\r\n                    else {\r\n                        logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    function handleNotification(message) {\r\n        if (isDisposed()) {\r\n            // See handle request.\r\n            return;\r\n        }\r\n        let type = undefined;\r\n        let notificationHandler;\r\n        if (message.method === CancelNotification.type.method) {\r\n            notificationHandler = (params) => {\r\n                let id = params.id;\r\n                let source = requestTokens[String(id)];\r\n                if (source) {\r\n                    source.cancel();\r\n                }\r\n            };\r\n        }\r\n        else {\r\n            let element = notificationHandlers[message.method];\r\n            if (element) {\r\n                notificationHandler = element.handler;\r\n                type = element.type;\r\n            }\r\n        }\r\n        if (notificationHandler || starNotificationHandler) {\r\n            try {\r\n                traceReceivedNotification(message);\r\n                if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {\r\n                    notificationHandler ? notificationHandler() : starNotificationHandler(message.method);\r\n                }\r\n                else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {\r\n                    notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);\r\n                }\r\n                else {\r\n                    notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);\r\n                }\r\n            }\r\n            catch (error) {\r\n                if (error.message) {\r\n                    logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);\r\n                }\r\n                else {\r\n                    logger.error(`Notification handler '${message.method}' failed unexpectedly.`);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            unhandledNotificationEmitter.fire(message);\r\n        }\r\n    }\r\n    function handleInvalidMessage(message) {\r\n        if (!message) {\r\n            logger.error('Received empty message.');\r\n            return;\r\n        }\r\n        logger.error(`Received message which is neither a response nor a notification message:\\n${JSON.stringify(message, null, 4)}`);\r\n        // Test whether we find an id to reject the promise\r\n        let responseMessage = message;\r\n        if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {\r\n            let key = String(responseMessage.id);\r\n            let responseHandler = responsePromises[key];\r\n            if (responseHandler) {\r\n                responseHandler.reject(new Error('The received response has neither a result nor an error property.'));\r\n            }\r\n        }\r\n    }\r\n    function traceSendingRequest(message) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose && message.params) {\r\n                data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n            }\r\n            tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('send-request', message);\r\n        }\r\n    }\r\n    function traceSendingNotification(message) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.params) {\r\n                    data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    data = 'No parameters provided.\\n\\n';\r\n                }\r\n            }\r\n            tracer.log(`Sending notification '${message.method}'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('send-notification', message);\r\n        }\r\n    }\r\n    function traceSendingResponse(message, method, startTime) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.error && message.error.data) {\r\n                    data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    if (message.result) {\r\n                        data = `Result: ${JSON.stringify(message.result, null, 4)}\\n\\n`;\r\n                    }\r\n                    else if (message.error === void 0) {\r\n                        data = 'No result returned.\\n\\n';\r\n                    }\r\n                }\r\n            }\r\n            tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('send-response', message);\r\n        }\r\n    }\r\n    function traceReceivedRequest(message) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose && message.params) {\r\n                data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n            }\r\n            tracer.log(`Received request '${message.method} - (${message.id})'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('receive-request', message);\r\n        }\r\n    }\r\n    function traceReceivedNotification(message) {\r\n        if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.params) {\r\n                    data = `Params: ${JSON.stringify(message.params, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    data = 'No parameters provided.\\n\\n';\r\n                }\r\n            }\r\n            tracer.log(`Received notification '${message.method}'.`, data);\r\n        }\r\n        else {\r\n            logLSPMessage('receive-notification', message);\r\n        }\r\n    }\r\n    function traceReceivedResponse(message, responsePromise) {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        if (traceFormat === TraceFormat.Text) {\r\n            let data = undefined;\r\n            if (trace === Trace.Verbose) {\r\n                if (message.error && message.error.data) {\r\n                    data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\\n\\n`;\r\n                }\r\n                else {\r\n                    if (message.result) {\r\n                        data = `Result: ${JSON.stringify(message.result, null, 4)}\\n\\n`;\r\n                    }\r\n                    else if (message.error === void 0) {\r\n                        data = 'No result returned.\\n\\n';\r\n                    }\r\n                }\r\n            }\r\n            if (responsePromise) {\r\n                let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';\r\n                tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);\r\n            }\r\n            else {\r\n                tracer.log(`Received response ${message.id} without active response promise.`, data);\r\n            }\r\n        }\r\n        else {\r\n            logLSPMessage('receive-response', message);\r\n        }\r\n    }\r\n    function logLSPMessage(type, message) {\r\n        if (!tracer || trace === Trace.Off) {\r\n            return;\r\n        }\r\n        const lspMessage = {\r\n            isLSPMessage: true,\r\n            type,\r\n            message,\r\n            timestamp: Date.now()\r\n        };\r\n        tracer.log(lspMessage);\r\n    }\r\n    function throwIfClosedOrDisposed() {\r\n        if (isClosed()) {\r\n            throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');\r\n        }\r\n        if (isDisposed()) {\r\n            throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');\r\n        }\r\n    }\r\n    function throwIfListening() {\r\n        if (isListening()) {\r\n            throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');\r\n        }\r\n    }\r\n    function throwIfNotListening() {\r\n        if (!isListening()) {\r\n            throw new Error('Call listen() first.');\r\n        }\r\n    }\r\n    function undefinedToNull(param) {\r\n        if (param === void 0) {\r\n            return null;\r\n        }\r\n        else {\r\n            return param;\r\n        }\r\n    }\r\n    function computeMessageParams(type, params) {\r\n        let result;\r\n        let numberOfParams = type.numberOfParams;\r\n        switch (numberOfParams) {\r\n            case 0:\r\n                result = null;\r\n                break;\r\n            case 1:\r\n                result = undefinedToNull(params[0]);\r\n                break;\r\n            default:\r\n                result = [];\r\n                for (let i = 0; i < params.length && i < numberOfParams; i++) {\r\n                    result.push(undefinedToNull(params[i]));\r\n                }\r\n                if (params.length < numberOfParams) {\r\n                    for (let i = params.length; i < numberOfParams; i++) {\r\n                        result.push(null);\r\n                    }\r\n                }\r\n                break;\r\n        }\r\n        return result;\r\n    }\r\n    let connection = {\r\n        sendNotification: (type, ...params) => {\r\n            throwIfClosedOrDisposed();\r\n            let method;\r\n            let messageParams;\r\n            if (Is.string(type)) {\r\n                method = type;\r\n                switch (params.length) {\r\n                    case 0:\r\n                        messageParams = null;\r\n                        break;\r\n                    case 1:\r\n                        messageParams = params[0];\r\n                        break;\r\n                    default:\r\n                        messageParams = params;\r\n                        break;\r\n                }\r\n            }\r\n            else {\r\n                method = type.method;\r\n                messageParams = computeMessageParams(type, params);\r\n            }\r\n            let notificationMessage = {\r\n                jsonrpc: version,\r\n                method: method,\r\n                params: messageParams\r\n            };\r\n            traceSendingNotification(notificationMessage);\r\n            messageWriter.write(notificationMessage);\r\n        },\r\n        onNotification: (type, handler) => {\r\n            throwIfClosedOrDisposed();\r\n            if (Is.func(type)) {\r\n                starNotificationHandler = type;\r\n            }\r\n            else if (handler) {\r\n                if (Is.string(type)) {\r\n                    notificationHandlers[type] = { type: undefined, handler };\r\n                }\r\n                else {\r\n                    notificationHandlers[type.method] = { type, handler };\r\n                }\r\n            }\r\n        },\r\n        onProgress: (_type, token, handler) => {\r\n            if (progressHandlers.has(token)) {\r\n                throw new Error(`Progress handler for token ${token} already registered`);\r\n            }\r\n            progressHandlers.set(token, handler);\r\n            return {\r\n                dispose: () => {\r\n                    progressHandlers.delete(token);\r\n                }\r\n            };\r\n        },\r\n        sendProgress: (_type, token, value) => {\r\n            connection.sendNotification(ProgressNotification.type, { token, value });\r\n        },\r\n        onUnhandledProgress: unhandledProgressEmitter.event,\r\n        sendRequest: (type, ...params) => {\r\n            throwIfClosedOrDisposed();\r\n            throwIfNotListening();\r\n            let method;\r\n            let messageParams;\r\n            let token = undefined;\r\n            if (Is.string(type)) {\r\n                method = type;\r\n                switch (params.length) {\r\n                    case 0:\r\n                        messageParams = null;\r\n                        break;\r\n                    case 1:\r\n                        // The cancellation token is optional so it can also be undefined.\r\n                        if (cancellation_1.CancellationToken.is(params[0])) {\r\n                            messageParams = null;\r\n                            token = params[0];\r\n                        }\r\n                        else {\r\n                            messageParams = undefinedToNull(params[0]);\r\n                        }\r\n                        break;\r\n                    default:\r\n                        const last = params.length - 1;\r\n                        if (cancellation_1.CancellationToken.is(params[last])) {\r\n                            token = params[last];\r\n                            if (params.length === 2) {\r\n                                messageParams = undefinedToNull(params[0]);\r\n                            }\r\n                            else {\r\n                                messageParams = params.slice(0, last).map(value => undefinedToNull(value));\r\n                            }\r\n                        }\r\n                        else {\r\n                            messageParams = params.map(value => undefinedToNull(value));\r\n                        }\r\n                        break;\r\n                }\r\n            }\r\n            else {\r\n                method = type.method;\r\n                messageParams = computeMessageParams(type, params);\r\n                let numberOfParams = type.numberOfParams;\r\n                token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;\r\n            }\r\n            let id = sequenceNumber++;\r\n            let result = new Promise((resolve, reject) => {\r\n                let requestMessage = {\r\n                    jsonrpc: version,\r\n                    id: id,\r\n                    method: method,\r\n                    params: messageParams\r\n                };\r\n                let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };\r\n                traceSendingRequest(requestMessage);\r\n                try {\r\n                    messageWriter.write(requestMessage);\r\n                }\r\n                catch (e) {\r\n                    // Writing the message failed. So we need to reject the promise.\r\n                    responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));\r\n                    responsePromise = null;\r\n                }\r\n                if (responsePromise) {\r\n                    responsePromises[String(id)] = responsePromise;\r\n                }\r\n            });\r\n            if (token) {\r\n                token.onCancellationRequested(() => {\r\n                    connection.sendNotification(CancelNotification.type, { id });\r\n                });\r\n            }\r\n            return result;\r\n        },\r\n        onRequest: (type, handler) => {\r\n            throwIfClosedOrDisposed();\r\n            if (Is.func(type)) {\r\n                starRequestHandler = type;\r\n            }\r\n            else if (handler) {\r\n                if (Is.string(type)) {\r\n                    requestHandlers[type] = { type: undefined, handler };\r\n                }\r\n                else {\r\n                    requestHandlers[type.method] = { type, handler };\r\n                }\r\n            }\r\n        },\r\n        trace: (_value, _tracer, sendNotificationOrTraceOptions) => {\r\n            let _sendNotification = false;\r\n            let _traceFormat = TraceFormat.Text;\r\n            if (sendNotificationOrTraceOptions !== void 0) {\r\n                if (Is.boolean(sendNotificationOrTraceOptions)) {\r\n                    _sendNotification = sendNotificationOrTraceOptions;\r\n                }\r\n                else {\r\n                    _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;\r\n                    _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;\r\n                }\r\n            }\r\n            trace = _value;\r\n            traceFormat = _traceFormat;\r\n            if (trace === Trace.Off) {\r\n                tracer = undefined;\r\n            }\r\n            else {\r\n                tracer = _tracer;\r\n            }\r\n            if (_sendNotification && !isClosed() && !isDisposed()) {\r\n                connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });\r\n            }\r\n        },\r\n        onError: errorEmitter.event,\r\n        onClose: closeEmitter.event,\r\n        onUnhandledNotification: unhandledNotificationEmitter.event,\r\n        onDispose: disposeEmitter.event,\r\n        dispose: () => {\r\n            if (isDisposed()) {\r\n                return;\r\n            }\r\n            state = ConnectionState.Disposed;\r\n            disposeEmitter.fire(undefined);\r\n            let error = new Error('Connection got disposed.');\r\n            Object.keys(responsePromises).forEach((key) => {\r\n                responsePromises[key].reject(error);\r\n            });\r\n            responsePromises = Object.create(null);\r\n            requestTokens = Object.create(null);\r\n            messageQueue = new linkedMap_1.LinkedMap();\r\n            // Test for backwards compatibility\r\n            if (Is.func(messageWriter.dispose)) {\r\n                messageWriter.dispose();\r\n            }\r\n            if (Is.func(messageReader.dispose)) {\r\n                messageReader.dispose();\r\n            }\r\n        },\r\n        listen: () => {\r\n            throwIfClosedOrDisposed();\r\n            throwIfListening();\r\n            state = ConnectionState.Listening;\r\n            messageReader.listen(callback);\r\n        },\r\n        inspect: () => {\r\n            // eslint-disable-next-line no-console\r\n            console.log('inspect');\r\n        }\r\n    };\r\n    connection.onNotification(LogTraceNotification.type, (params) => {\r\n        if (trace === Trace.Off || !tracer) {\r\n            return;\r\n        }\r\n        tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);\r\n    });\r\n    connection.onNotification(ProgressNotification.type, (params) => {\r\n        const handler = progressHandlers.get(params.token);\r\n        if (handler) {\r\n            handler(params.value);\r\n        }\r\n        else {\r\n            unhandledProgressEmitter.fire(params);\r\n        }\r\n    });\r\n    return connection;\r\n}\r\nfunction isMessageReader(value) {\r\n    return value.listen !== void 0 && value.read === void 0;\r\n}\r\nfunction isMessageWriter(value) {\r\n    return value.write !== void 0 && value.end === void 0;\r\n}\r\nfunction createMessageConnection(input, output, logger, strategy) {\r\n    if (!logger) {\r\n        logger = exports.NullLogger;\r\n    }\r\n    let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);\r\n    let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);\r\n    return _createMessageConnection(reader, writer, logger, strategy);\r\n}\r\nexports.createMessageConnection = createMessageConnection;\r\n", "(function (factory) {\r\n    if (typeof module === \"object\" && typeof module.exports === \"object\") {\r\n        var v = factory(require, exports);\r\n        if (v !== undefined) module.exports = v;\r\n    }\r\n    else if (typeof define === \"function\" && define.amd) {\r\n        define([\"require\", \"exports\"], factory);\r\n    }\r\n})(function (require, exports) {\r\n    /* --------------------------------------------------------------------------------------------\r\n     * Copyright (c) Microsoft Corporation. All rights reserved.\r\n     * Licensed under the MIT License. See License.txt in the project root for license information.\r\n     * ------------------------------------------------------------------------------------------ */\r\n    'use strict';\r\n    Object.defineProperty(exports, \"__esModule\", { value: true });\r\n    /**\r\n     * The Position namespace provides helper functions to work with\r\n     * [Position](#Position) literals.\r\n     */\r\n    var Position;\r\n    (function (Position) {\r\n        /**\r\n         * Creates a new Position literal from the given line and character.\r\n         * @param line The position's line.\r\n         * @param character The position's character.\r\n         */\r\n        function create(line, character) {\r\n            return { line: line, character: character };\r\n        }\r\n        Position.create = create;\r\n        /**\r\n         * Checks whether the given liternal conforms to the [Position](#Position) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);\r\n        }\r\n        Position.is = is;\r\n    })(Position = exports.Position || (exports.Position = {}));\r\n    /**\r\n     * The Range namespace provides helper functions to work with\r\n     * [Range](#Range) literals.\r\n     */\r\n    var Range;\r\n    (function (Range) {\r\n        function create(one, two, three, four) {\r\n            if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {\r\n                return { start: Position.create(one, two), end: Position.create(three, four) };\r\n            }\r\n            else if (Position.is(one) && Position.is(two)) {\r\n                return { start: one, end: two };\r\n            }\r\n            else {\r\n                throw new Error(\"Range#create called with invalid arguments[\" + one + \", \" + two + \", \" + three + \", \" + four + \"]\");\r\n            }\r\n        }\r\n        Range.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Range](#Range) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);\r\n        }\r\n        Range.is = is;\r\n    })(Range = exports.Range || (exports.Range = {}));\r\n    /**\r\n     * The Location namespace provides helper functions to work with\r\n     * [Location](#Location) literals.\r\n     */\r\n    var Location;\r\n    (function (Location) {\r\n        /**\r\n         * Creates a Location literal.\r\n         * @param uri The location's uri.\r\n         * @param range The location's range.\r\n         */\r\n        function create(uri, range) {\r\n            return { uri: uri, range: range };\r\n        }\r\n        Location.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Location](#Location) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));\r\n        }\r\n        Location.is = is;\r\n    })(Location = exports.Location || (exports.Location = {}));\r\n    /**\r\n     * The LocationLink namespace provides helper functions to work with\r\n     * [LocationLink](#LocationLink) literals.\r\n     */\r\n    var LocationLink;\r\n    (function (LocationLink) {\r\n        /**\r\n         * Creates a LocationLink literal.\r\n         * @param targetUri The definition's uri.\r\n         * @param targetRange The full range of the definition.\r\n         * @param targetSelectionRange The span of the symbol definition at the target.\r\n         * @param originSelectionRange The span of the symbol being defined in the originating source file.\r\n         */\r\n        function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {\r\n            return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };\r\n        }\r\n        LocationLink.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)\r\n                && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))\r\n                && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));\r\n        }\r\n        LocationLink.is = is;\r\n    })(LocationLink = exports.LocationLink || (exports.LocationLink = {}));\r\n    /**\r\n     * The Color namespace provides helper functions to work with\r\n     * [Color](#Color) literals.\r\n     */\r\n    var Color;\r\n    (function (Color) {\r\n        /**\r\n         * Creates a new Color literal.\r\n         */\r\n        function create(red, green, blue, alpha) {\r\n            return {\r\n                red: red,\r\n                green: green,\r\n                blue: blue,\r\n                alpha: alpha,\r\n            };\r\n        }\r\n        Color.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Color](#Color) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.number(candidate.red)\r\n                && Is.number(candidate.green)\r\n                && Is.number(candidate.blue)\r\n                && Is.number(candidate.alpha);\r\n        }\r\n        Color.is = is;\r\n    })(Color = exports.Color || (exports.Color = {}));\r\n    /**\r\n     * The ColorInformation namespace provides helper functions to work with\r\n     * [ColorInformation](#ColorInformation) literals.\r\n     */\r\n    var ColorInformation;\r\n    (function (ColorInformation) {\r\n        /**\r\n         * Creates a new ColorInformation literal.\r\n         */\r\n        function create(range, color) {\r\n            return {\r\n                range: range,\r\n                color: color,\r\n            };\r\n        }\r\n        ColorInformation.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Range.is(candidate.range) && Color.is(candidate.color);\r\n        }\r\n        ColorInformation.is = is;\r\n    })(ColorInformation = exports.ColorInformation || (exports.ColorInformation = {}));\r\n    /**\r\n     * The Color namespace provides helper functions to work with\r\n     * [ColorPresentation](#ColorPresentation) literals.\r\n     */\r\n    var ColorPresentation;\r\n    (function (ColorPresentation) {\r\n        /**\r\n         * Creates a new ColorInformation literal.\r\n         */\r\n        function create(label, textEdit, additionalTextEdits) {\r\n            return {\r\n                label: label,\r\n                textEdit: textEdit,\r\n                additionalTextEdits: additionalTextEdits,\r\n            };\r\n        }\r\n        ColorPresentation.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.string(candidate.label)\r\n                && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))\r\n                && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));\r\n        }\r\n        ColorPresentation.is = is;\r\n    })(ColorPresentation = exports.ColorPresentation || (exports.ColorPresentation = {}));\r\n    /**\r\n     * Enum of known range kinds\r\n     */\r\n    var FoldingRangeKind;\r\n    (function (FoldingRangeKind) {\r\n        /**\r\n         * Folding range for a comment\r\n         */\r\n        FoldingRangeKind[\"Comment\"] = \"comment\";\r\n        /**\r\n         * Folding range for a imports or includes\r\n         */\r\n        FoldingRangeKind[\"Imports\"] = \"imports\";\r\n        /**\r\n         * Folding range for a region (e.g. `#region`)\r\n         */\r\n        FoldingRangeKind[\"Region\"] = \"region\";\r\n    })(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));\r\n    /**\r\n     * The folding range namespace provides helper functions to work with\r\n     * [FoldingRange](#FoldingRange) literals.\r\n     */\r\n    var FoldingRange;\r\n    (function (FoldingRange) {\r\n        /**\r\n         * Creates a new FoldingRange literal.\r\n         */\r\n        function create(startLine, endLine, startCharacter, endCharacter, kind) {\r\n            var result = {\r\n                startLine: startLine,\r\n                endLine: endLine\r\n            };\r\n            if (Is.defined(startCharacter)) {\r\n                result.startCharacter = startCharacter;\r\n            }\r\n            if (Is.defined(endCharacter)) {\r\n                result.endCharacter = endCharacter;\r\n            }\r\n            if (Is.defined(kind)) {\r\n                result.kind = kind;\r\n            }\r\n            return result;\r\n        }\r\n        FoldingRange.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.number(candidate.startLine) && Is.number(candidate.startLine)\r\n                && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))\r\n                && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))\r\n                && (Is.undefined(candidate.kind) || Is.string(candidate.kind));\r\n        }\r\n        FoldingRange.is = is;\r\n    })(FoldingRange = exports.FoldingRange || (exports.FoldingRange = {}));\r\n    /**\r\n     * The DiagnosticRelatedInformation namespace provides helper functions to work with\r\n     * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.\r\n     */\r\n    var DiagnosticRelatedInformation;\r\n    (function (DiagnosticRelatedInformation) {\r\n        /**\r\n         * Creates a new DiagnosticRelatedInformation literal.\r\n         */\r\n        function create(location, message) {\r\n            return {\r\n                location: location,\r\n                message: message\r\n            };\r\n        }\r\n        DiagnosticRelatedInformation.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);\r\n        }\r\n        DiagnosticRelatedInformation.is = is;\r\n    })(DiagnosticRelatedInformation = exports.DiagnosticRelatedInformation || (exports.DiagnosticRelatedInformation = {}));\r\n    /**\r\n     * The diagnostic's severity.\r\n     */\r\n    var DiagnosticSeverity;\r\n    (function (DiagnosticSeverity) {\r\n        /**\r\n         * Reports an error.\r\n         */\r\n        DiagnosticSeverity.Error = 1;\r\n        /**\r\n         * Reports a warning.\r\n         */\r\n        DiagnosticSeverity.Warning = 2;\r\n        /**\r\n         * Reports an information.\r\n         */\r\n        DiagnosticSeverity.Information = 3;\r\n        /**\r\n         * Reports a hint.\r\n         */\r\n        DiagnosticSeverity.Hint = 4;\r\n    })(DiagnosticSeverity = exports.DiagnosticSeverity || (exports.DiagnosticSeverity = {}));\r\n    /**\r\n     * The diagnostic tags.\r\n     *\r\n     * @since 3.15.0\r\n     */\r\n    var DiagnosticTag;\r\n    (function (DiagnosticTag) {\r\n        /**\r\n         * Unused or unnecessary code.\r\n         *\r\n         * Clients are allowed to render diagnostics with this tag faded out instead of having\r\n         * an error squiggle.\r\n         */\r\n        DiagnosticTag.Unnecessary = 1;\r\n        /**\r\n         * Deprecated or obsolete code.\r\n         *\r\n         * Clients are allowed to rendered diagnostics with this tag strike through.\r\n         */\r\n        DiagnosticTag.Deprecated = 2;\r\n    })(DiagnosticTag = exports.DiagnosticTag || (exports.DiagnosticTag = {}));\r\n    /**\r\n     * The Diagnostic namespace provides helper functions to work with\r\n     * [Diagnostic](#Diagnostic) literals.\r\n     */\r\n    var Diagnostic;\r\n    (function (Diagnostic) {\r\n        /**\r\n         * Creates a new Diagnostic literal.\r\n         */\r\n        function create(range, message, severity, code, source, relatedInformation) {\r\n            var result = { range: range, message: message };\r\n            if (Is.defined(severity)) {\r\n                result.severity = severity;\r\n            }\r\n            if (Is.defined(code)) {\r\n                result.code = code;\r\n            }\r\n            if (Is.defined(source)) {\r\n                result.source = source;\r\n            }\r\n            if (Is.defined(relatedInformation)) {\r\n                result.relatedInformation = relatedInformation;\r\n            }\r\n            return result;\r\n        }\r\n        Diagnostic.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate)\r\n                && Range.is(candidate.range)\r\n                && Is.string(candidate.message)\r\n                && (Is.number(candidate.severity) || Is.undefined(candidate.severity))\r\n                && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))\r\n                && (Is.string(candidate.source) || Is.undefined(candidate.source))\r\n                && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));\r\n        }\r\n        Diagnostic.is = is;\r\n    })(Diagnostic = exports.Diagnostic || (exports.Diagnostic = {}));\r\n    /**\r\n     * The Command namespace provides helper functions to work with\r\n     * [Command](#Command) literals.\r\n     */\r\n    var Command;\r\n    (function (Command) {\r\n        /**\r\n         * Creates a new Command literal.\r\n         */\r\n        function create(title, command) {\r\n            var args = [];\r\n            for (var _i = 2; _i < arguments.length; _i++) {\r\n                args[_i - 2] = arguments[_i];\r\n            }\r\n            var result = { title: title, command: command };\r\n            if (Is.defined(args) && args.length > 0) {\r\n                result.arguments = args;\r\n            }\r\n            return result;\r\n        }\r\n        Command.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [Command](#Command) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);\r\n        }\r\n        Command.is = is;\r\n    })(Command = exports.Command || (exports.Command = {}));\r\n    /**\r\n     * The TextEdit namespace provides helper function to create replace,\r\n     * insert and delete edits more easily.\r\n     */\r\n    var TextEdit;\r\n    (function (TextEdit) {\r\n        /**\r\n         * Creates a replace text edit.\r\n         * @param range The range of text to be replaced.\r\n         * @param newText The new text.\r\n         */\r\n        function replace(range, newText) {\r\n            return { range: range, newText: newText };\r\n        }\r\n        TextEdit.replace = replace;\r\n        /**\r\n         * Creates a insert text edit.\r\n         * @param position The position to insert the text at.\r\n         * @param newText The text to be inserted.\r\n         */\r\n        function insert(position, newText) {\r\n            return { range: { start: position, end: position }, newText: newText };\r\n        }\r\n        TextEdit.insert = insert;\r\n        /**\r\n         * Creates a delete text edit.\r\n         * @param range The range of text to be deleted.\r\n         */\r\n        function del(range) {\r\n            return { range: range, newText: '' };\r\n        }\r\n        TextEdit.del = del;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(candidate)\r\n                && Is.string(candidate.newText)\r\n                && Range.is(candidate.range);\r\n        }\r\n        TextEdit.is = is;\r\n    })(TextEdit = exports.TextEdit || (exports.TextEdit = {}));\r\n    /**\r\n     * The TextDocumentEdit namespace provides helper function to create\r\n     * an edit that manipulates a text document.\r\n     */\r\n    var TextDocumentEdit;\r\n    (function (TextDocumentEdit) {\r\n        /**\r\n         * Creates a new `TextDocumentEdit`\r\n         */\r\n        function create(textDocument, edits) {\r\n            return { textDocument: textDocument, edits: edits };\r\n        }\r\n        TextDocumentEdit.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate)\r\n                && VersionedTextDocumentIdentifier.is(candidate.textDocument)\r\n                && Array.isArray(candidate.edits);\r\n        }\r\n        TextDocumentEdit.is = is;\r\n    })(TextDocumentEdit = exports.TextDocumentEdit || (exports.TextDocumentEdit = {}));\r\n    var CreateFile;\r\n    (function (CreateFile) {\r\n        function create(uri, options) {\r\n            var result = {\r\n                kind: 'create',\r\n                uri: uri\r\n            };\r\n            if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\r\n                result.options = options;\r\n            }\r\n            return result;\r\n        }\r\n        CreateFile.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&\r\n                (candidate.options === void 0 ||\r\n                    ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));\r\n        }\r\n        CreateFile.is = is;\r\n    })(CreateFile = exports.CreateFile || (exports.CreateFile = {}));\r\n    var RenameFile;\r\n    (function (RenameFile) {\r\n        function create(oldUri, newUri, options) {\r\n            var result = {\r\n                kind: 'rename',\r\n                oldUri: oldUri,\r\n                newUri: newUri\r\n            };\r\n            if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {\r\n                result.options = options;\r\n            }\r\n            return result;\r\n        }\r\n        RenameFile.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&\r\n                (candidate.options === void 0 ||\r\n                    ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));\r\n        }\r\n        RenameFile.is = is;\r\n    })(RenameFile = exports.RenameFile || (exports.RenameFile = {}));\r\n    var DeleteFile;\r\n    (function (DeleteFile) {\r\n        function create(uri, options) {\r\n            var result = {\r\n                kind: 'delete',\r\n                uri: uri\r\n            };\r\n            if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {\r\n                result.options = options;\r\n            }\r\n            return result;\r\n        }\r\n        DeleteFile.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&\r\n                (candidate.options === void 0 ||\r\n                    ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));\r\n        }\r\n        DeleteFile.is = is;\r\n    })(DeleteFile = exports.DeleteFile || (exports.DeleteFile = {}));\r\n    var WorkspaceEdit;\r\n    (function (WorkspaceEdit) {\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate &&\r\n                (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&\r\n                (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {\r\n                    if (Is.string(change.kind)) {\r\n                        return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);\r\n                    }\r\n                    else {\r\n                        return TextDocumentEdit.is(change);\r\n                    }\r\n                }));\r\n        }\r\n        WorkspaceEdit.is = is;\r\n    })(WorkspaceEdit = exports.WorkspaceEdit || (exports.WorkspaceEdit = {}));\r\n    var TextEditChangeImpl = /** @class */ (function () {\r\n        function TextEditChangeImpl(edits) {\r\n            this.edits = edits;\r\n        }\r\n        TextEditChangeImpl.prototype.insert = function (position, newText) {\r\n            this.edits.push(TextEdit.insert(position, newText));\r\n        };\r\n        TextEditChangeImpl.prototype.replace = function (range, newText) {\r\n            this.edits.push(TextEdit.replace(range, newText));\r\n        };\r\n        TextEditChangeImpl.prototype.delete = function (range) {\r\n            this.edits.push(TextEdit.del(range));\r\n        };\r\n        TextEditChangeImpl.prototype.add = function (edit) {\r\n            this.edits.push(edit);\r\n        };\r\n        TextEditChangeImpl.prototype.all = function () {\r\n            return this.edits;\r\n        };\r\n        TextEditChangeImpl.prototype.clear = function () {\r\n            this.edits.splice(0, this.edits.length);\r\n        };\r\n        return TextEditChangeImpl;\r\n    }());\r\n    /**\r\n     * A workspace change helps constructing changes to a workspace.\r\n     */\r\n    var WorkspaceChange = /** @class */ (function () {\r\n        function WorkspaceChange(workspaceEdit) {\r\n            var _this = this;\r\n            this._textEditChanges = Object.create(null);\r\n            if (workspaceEdit) {\r\n                this._workspaceEdit = workspaceEdit;\r\n                if (workspaceEdit.documentChanges) {\r\n                    workspaceEdit.documentChanges.forEach(function (change) {\r\n                        if (TextDocumentEdit.is(change)) {\r\n                            var textEditChange = new TextEditChangeImpl(change.edits);\r\n                            _this._textEditChanges[change.textDocument.uri] = textEditChange;\r\n                        }\r\n                    });\r\n                }\r\n                else if (workspaceEdit.changes) {\r\n                    Object.keys(workspaceEdit.changes).forEach(function (key) {\r\n                        var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);\r\n                        _this._textEditChanges[key] = textEditChange;\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        Object.defineProperty(WorkspaceChange.prototype, \"edit\", {\r\n            /**\r\n             * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal\r\n             * use to be returned from a workspace edit operation like rename.\r\n             */\r\n            get: function () {\r\n                return this._workspaceEdit;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        WorkspaceChange.prototype.getTextEditChange = function (key) {\r\n            if (VersionedTextDocumentIdentifier.is(key)) {\r\n                if (!this._workspaceEdit) {\r\n                    this._workspaceEdit = {\r\n                        documentChanges: []\r\n                    };\r\n                }\r\n                if (!this._workspaceEdit.documentChanges) {\r\n                    throw new Error('Workspace edit is not configured for document changes.');\r\n                }\r\n                var textDocument = key;\r\n                var result = this._textEditChanges[textDocument.uri];\r\n                if (!result) {\r\n                    var edits = [];\r\n                    var textDocumentEdit = {\r\n                        textDocument: textDocument,\r\n                        edits: edits\r\n                    };\r\n                    this._workspaceEdit.documentChanges.push(textDocumentEdit);\r\n                    result = new TextEditChangeImpl(edits);\r\n                    this._textEditChanges[textDocument.uri] = result;\r\n                }\r\n                return result;\r\n            }\r\n            else {\r\n                if (!this._workspaceEdit) {\r\n                    this._workspaceEdit = {\r\n                        changes: Object.create(null)\r\n                    };\r\n                }\r\n                if (!this._workspaceEdit.changes) {\r\n                    throw new Error('Workspace edit is not configured for normal text edit changes.');\r\n                }\r\n                var result = this._textEditChanges[key];\r\n                if (!result) {\r\n                    var edits = [];\r\n                    this._workspaceEdit.changes[key] = edits;\r\n                    result = new TextEditChangeImpl(edits);\r\n                    this._textEditChanges[key] = result;\r\n                }\r\n                return result;\r\n            }\r\n        };\r\n        WorkspaceChange.prototype.createFile = function (uri, options) {\r\n            this.checkDocumentChanges();\r\n            this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));\r\n        };\r\n        WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {\r\n            this.checkDocumentChanges();\r\n            this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));\r\n        };\r\n        WorkspaceChange.prototype.deleteFile = function (uri, options) {\r\n            this.checkDocumentChanges();\r\n            this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));\r\n        };\r\n        WorkspaceChange.prototype.checkDocumentChanges = function () {\r\n            if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {\r\n                throw new Error('Workspace edit is not configured for document changes.');\r\n            }\r\n        };\r\n        return WorkspaceChange;\r\n    }());\r\n    exports.WorkspaceChange = WorkspaceChange;\r\n    /**\r\n     * The TextDocumentIdentifier namespace provides helper functions to work with\r\n     * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.\r\n     */\r\n    var TextDocumentIdentifier;\r\n    (function (TextDocumentIdentifier) {\r\n        /**\r\n         * Creates a new TextDocumentIdentifier literal.\r\n         * @param uri The document's uri.\r\n         */\r\n        function create(uri) {\r\n            return { uri: uri };\r\n        }\r\n        TextDocumentIdentifier.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri);\r\n        }\r\n        TextDocumentIdentifier.is = is;\r\n    })(TextDocumentIdentifier = exports.TextDocumentIdentifier || (exports.TextDocumentIdentifier = {}));\r\n    /**\r\n     * The VersionedTextDocumentIdentifier namespace provides helper functions to work with\r\n     * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.\r\n     */\r\n    var VersionedTextDocumentIdentifier;\r\n    (function (VersionedTextDocumentIdentifier) {\r\n        /**\r\n         * Creates a new VersionedTextDocumentIdentifier literal.\r\n         * @param uri The document's uri.\r\n         * @param uri The document's text.\r\n         */\r\n        function create(uri, version) {\r\n            return { uri: uri, version: version };\r\n        }\r\n        VersionedTextDocumentIdentifier.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));\r\n        }\r\n        VersionedTextDocumentIdentifier.is = is;\r\n    })(VersionedTextDocumentIdentifier = exports.VersionedTextDocumentIdentifier || (exports.VersionedTextDocumentIdentifier = {}));\r\n    /**\r\n     * The TextDocumentItem namespace provides helper functions to work with\r\n     * [TextDocumentItem](#TextDocumentItem) literals.\r\n     */\r\n    var TextDocumentItem;\r\n    (function (TextDocumentItem) {\r\n        /**\r\n         * Creates a new TextDocumentItem literal.\r\n         * @param uri The document's uri.\r\n         * @param languageId The document's language identifier.\r\n         * @param version The document's version number.\r\n         * @param text The document's text.\r\n         */\r\n        function create(uri, languageId, version, text) {\r\n            return { uri: uri, languageId: languageId, version: version, text: text };\r\n        }\r\n        TextDocumentItem.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);\r\n        }\r\n        TextDocumentItem.is = is;\r\n    })(TextDocumentItem = exports.TextDocumentItem || (exports.TextDocumentItem = {}));\r\n    /**\r\n     * Describes the content type that a client supports in various\r\n     * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.\r\n     *\r\n     * Please note that `MarkupKinds` must not start with a `$`. This kinds\r\n     * are reserved for internal usage.\r\n     */\r\n    var MarkupKind;\r\n    (function (MarkupKind) {\r\n        /**\r\n         * Plain text is supported as a content format\r\n         */\r\n        MarkupKind.PlainText = 'plaintext';\r\n        /**\r\n         * Markdown is supported as a content format\r\n         */\r\n        MarkupKind.Markdown = 'markdown';\r\n    })(MarkupKind = exports.MarkupKind || (exports.MarkupKind = {}));\r\n    (function (MarkupKind) {\r\n        /**\r\n         * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;\r\n        }\r\n        MarkupKind.is = is;\r\n    })(MarkupKind = exports.MarkupKind || (exports.MarkupKind = {}));\r\n    var MarkupContent;\r\n    (function (MarkupContent) {\r\n        /**\r\n         * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);\r\n        }\r\n        MarkupContent.is = is;\r\n    })(MarkupContent = exports.MarkupContent || (exports.MarkupContent = {}));\r\n    /**\r\n     * The kind of a completion entry.\r\n     */\r\n    var CompletionItemKind;\r\n    (function (CompletionItemKind) {\r\n        CompletionItemKind.Text = 1;\r\n        CompletionItemKind.Method = 2;\r\n        CompletionItemKind.Function = 3;\r\n        CompletionItemKind.Constructor = 4;\r\n        CompletionItemKind.Field = 5;\r\n        CompletionItemKind.Variable = 6;\r\n        CompletionItemKind.Class = 7;\r\n        CompletionItemKind.Interface = 8;\r\n        CompletionItemKind.Module = 9;\r\n        CompletionItemKind.Property = 10;\r\n        CompletionItemKind.Unit = 11;\r\n        CompletionItemKind.Value = 12;\r\n        CompletionItemKind.Enum = 13;\r\n        CompletionItemKind.Keyword = 14;\r\n        CompletionItemKind.Snippet = 15;\r\n        CompletionItemKind.Color = 16;\r\n        CompletionItemKind.File = 17;\r\n        CompletionItemKind.Reference = 18;\r\n        CompletionItemKind.Folder = 19;\r\n        CompletionItemKind.EnumMember = 20;\r\n        CompletionItemKind.Constant = 21;\r\n        CompletionItemKind.Struct = 22;\r\n        CompletionItemKind.Event = 23;\r\n        CompletionItemKind.Operator = 24;\r\n        CompletionItemKind.TypeParameter = 25;\r\n    })(CompletionItemKind = exports.CompletionItemKind || (exports.CompletionItemKind = {}));\r\n    /**\r\n     * Defines whether the insert text in a completion item should be interpreted as\r\n     * plain text or a snippet.\r\n     */\r\n    var InsertTextFormat;\r\n    (function (InsertTextFormat) {\r\n        /**\r\n         * The primary text to be inserted is treated as a plain string.\r\n         */\r\n        InsertTextFormat.PlainText = 1;\r\n        /**\r\n         * The primary text to be inserted is treated as a snippet.\r\n         *\r\n         * A snippet can define tab stops and placeholders with `$1`, `$2`\r\n         * and `${3:foo}`. `$0` defines the final tab stop, it defaults to\r\n         * the end of the snippet. Placeholders with equal identifiers are linked,\r\n         * that is typing in one will update others too.\r\n         *\r\n         * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md\r\n         */\r\n        InsertTextFormat.Snippet = 2;\r\n    })(InsertTextFormat = exports.InsertTextFormat || (exports.InsertTextFormat = {}));\r\n    /**\r\n     * Completion item tags are extra annotations that tweak the rendering of a completion\r\n     * item.\r\n     *\r\n     * @since 3.15.0\r\n     */\r\n    var CompletionItemTag;\r\n    (function (CompletionItemTag) {\r\n        /**\r\n         * Render a completion as obsolete, usually using a strike-out.\r\n         */\r\n        CompletionItemTag.Deprecated = 1;\r\n    })(CompletionItemTag = exports.CompletionItemTag || (exports.CompletionItemTag = {}));\r\n    /**\r\n     * The CompletionItem namespace provides functions to deal with\r\n     * completion items.\r\n     */\r\n    var CompletionItem;\r\n    (function (CompletionItem) {\r\n        /**\r\n         * Create a completion item and seed it with a label.\r\n         * @param label The completion item's label\r\n         */\r\n        function create(label) {\r\n            return { label: label };\r\n        }\r\n        CompletionItem.create = create;\r\n    })(CompletionItem = exports.CompletionItem || (exports.CompletionItem = {}));\r\n    /**\r\n     * The CompletionList namespace provides functions to deal with\r\n     * completion lists.\r\n     */\r\n    var CompletionList;\r\n    (function (CompletionList) {\r\n        /**\r\n         * Creates a new completion list.\r\n         *\r\n         * @param items The completion items.\r\n         * @param isIncomplete The list is not complete.\r\n         */\r\n        function create(items, isIncomplete) {\r\n            return { items: items ? items : [], isIncomplete: !!isIncomplete };\r\n        }\r\n        CompletionList.create = create;\r\n    })(CompletionList = exports.CompletionList || (exports.CompletionList = {}));\r\n    var MarkedString;\r\n    (function (MarkedString) {\r\n        /**\r\n         * Creates a marked string from plain text.\r\n         *\r\n         * @param plainText The plain text.\r\n         */\r\n        function fromPlainText(plainText) {\r\n            return plainText.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\r\n        }\r\n        MarkedString.fromPlainText = fromPlainText;\r\n        /**\r\n         * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));\r\n        }\r\n        MarkedString.is = is;\r\n    })(MarkedString = exports.MarkedString || (exports.MarkedString = {}));\r\n    var Hover;\r\n    (function (Hover) {\r\n        /**\r\n         * Checks whether the given value conforms to the [Hover](#Hover) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||\r\n                MarkedString.is(candidate.contents) ||\r\n                Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));\r\n        }\r\n        Hover.is = is;\r\n    })(Hover = exports.Hover || (exports.Hover = {}));\r\n    /**\r\n     * The ParameterInformation namespace provides helper functions to work with\r\n     * [ParameterInformation](#ParameterInformation) literals.\r\n     */\r\n    var ParameterInformation;\r\n    (function (ParameterInformation) {\r\n        /**\r\n         * Creates a new parameter information literal.\r\n         *\r\n         * @param label A label string.\r\n         * @param documentation A doc string.\r\n         */\r\n        function create(label, documentation) {\r\n            return documentation ? { label: label, documentation: documentation } : { label: label };\r\n        }\r\n        ParameterInformation.create = create;\r\n    })(ParameterInformation = exports.ParameterInformation || (exports.ParameterInformation = {}));\r\n    /**\r\n     * The SignatureInformation namespace provides helper functions to work with\r\n     * [SignatureInformation](#SignatureInformation) literals.\r\n     */\r\n    var SignatureInformation;\r\n    (function (SignatureInformation) {\r\n        function create(label, documentation) {\r\n            var parameters = [];\r\n            for (var _i = 2; _i < arguments.length; _i++) {\r\n                parameters[_i - 2] = arguments[_i];\r\n            }\r\n            var result = { label: label };\r\n            if (Is.defined(documentation)) {\r\n                result.documentation = documentation;\r\n            }\r\n            if (Is.defined(parameters)) {\r\n                result.parameters = parameters;\r\n            }\r\n            else {\r\n                result.parameters = [];\r\n            }\r\n            return result;\r\n        }\r\n        SignatureInformation.create = create;\r\n    })(SignatureInformation = exports.SignatureInformation || (exports.SignatureInformation = {}));\r\n    /**\r\n     * A document highlight kind.\r\n     */\r\n    var DocumentHighlightKind;\r\n    (function (DocumentHighlightKind) {\r\n        /**\r\n         * A textual occurrence.\r\n         */\r\n        DocumentHighlightKind.Text = 1;\r\n        /**\r\n         * Read-access of a symbol, like reading a variable.\r\n         */\r\n        DocumentHighlightKind.Read = 2;\r\n        /**\r\n         * Write-access of a symbol, like writing to a variable.\r\n         */\r\n        DocumentHighlightKind.Write = 3;\r\n    })(DocumentHighlightKind = exports.DocumentHighlightKind || (exports.DocumentHighlightKind = {}));\r\n    /**\r\n     * DocumentHighlight namespace to provide helper functions to work with\r\n     * [DocumentHighlight](#DocumentHighlight) literals.\r\n     */\r\n    var DocumentHighlight;\r\n    (function (DocumentHighlight) {\r\n        /**\r\n         * Create a DocumentHighlight object.\r\n         * @param range The range the highlight applies to.\r\n         */\r\n        function create(range, kind) {\r\n            var result = { range: range };\r\n            if (Is.number(kind)) {\r\n                result.kind = kind;\r\n            }\r\n            return result;\r\n        }\r\n        DocumentHighlight.create = create;\r\n    })(DocumentHighlight = exports.DocumentHighlight || (exports.DocumentHighlight = {}));\r\n    /**\r\n     * A symbol kind.\r\n     */\r\n    var SymbolKind;\r\n    (function (SymbolKind) {\r\n        SymbolKind.File = 1;\r\n        SymbolKind.Module = 2;\r\n        SymbolKind.Namespace = 3;\r\n        SymbolKind.Package = 4;\r\n        SymbolKind.Class = 5;\r\n        SymbolKind.Method = 6;\r\n        SymbolKind.Property = 7;\r\n        SymbolKind.Field = 8;\r\n        SymbolKind.Constructor = 9;\r\n        SymbolKind.Enum = 10;\r\n        SymbolKind.Interface = 11;\r\n        SymbolKind.Function = 12;\r\n        SymbolKind.Variable = 13;\r\n        SymbolKind.Constant = 14;\r\n        SymbolKind.String = 15;\r\n        SymbolKind.Number = 16;\r\n        SymbolKind.Boolean = 17;\r\n        SymbolKind.Array = 18;\r\n        SymbolKind.Object = 19;\r\n        SymbolKind.Key = 20;\r\n        SymbolKind.Null = 21;\r\n        SymbolKind.EnumMember = 22;\r\n        SymbolKind.Struct = 23;\r\n        SymbolKind.Event = 24;\r\n        SymbolKind.Operator = 25;\r\n        SymbolKind.TypeParameter = 26;\r\n    })(SymbolKind = exports.SymbolKind || (exports.SymbolKind = {}));\r\n    /**\r\n     * Symbol tags are extra annotations that tweak the rendering of a symbol.\r\n     * @since 3.15\r\n     */\r\n    var SymbolTag;\r\n    (function (SymbolTag) {\r\n        /**\r\n         * Render a symbol as obsolete, usually using a strike-out.\r\n         */\r\n        SymbolTag.Deprecated = 1;\r\n    })(SymbolTag = exports.SymbolTag || (exports.SymbolTag = {}));\r\n    var SymbolInformation;\r\n    (function (SymbolInformation) {\r\n        /**\r\n         * Creates a new symbol information literal.\r\n         *\r\n         * @param name The name of the symbol.\r\n         * @param kind The kind of the symbol.\r\n         * @param range The range of the location of the symbol.\r\n         * @param uri The resource of the location of symbol, defaults to the current document.\r\n         * @param containerName The name of the symbol containing the symbol.\r\n         */\r\n        function create(name, kind, range, uri, containerName) {\r\n            var result = {\r\n                name: name,\r\n                kind: kind,\r\n                location: { uri: uri, range: range }\r\n            };\r\n            if (containerName) {\r\n                result.containerName = containerName;\r\n            }\r\n            return result;\r\n        }\r\n        SymbolInformation.create = create;\r\n    })(SymbolInformation = exports.SymbolInformation || (exports.SymbolInformation = {}));\r\n    var DocumentSymbol;\r\n    (function (DocumentSymbol) {\r\n        /**\r\n         * Creates a new symbol information literal.\r\n         *\r\n         * @param name The name of the symbol.\r\n         * @param detail The detail of the symbol.\r\n         * @param kind The kind of the symbol.\r\n         * @param range The range of the symbol.\r\n         * @param selectionRange The selectionRange of the symbol.\r\n         * @param children Children of the symbol.\r\n         */\r\n        function create(name, detail, kind, range, selectionRange, children) {\r\n            var result = {\r\n                name: name,\r\n                detail: detail,\r\n                kind: kind,\r\n                range: range,\r\n                selectionRange: selectionRange\r\n            };\r\n            if (children !== void 0) {\r\n                result.children = children;\r\n            }\r\n            return result;\r\n        }\r\n        DocumentSymbol.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate &&\r\n                Is.string(candidate.name) && Is.number(candidate.kind) &&\r\n                Range.is(candidate.range) && Range.is(candidate.selectionRange) &&\r\n                (candidate.detail === void 0 || Is.string(candidate.detail)) &&\r\n                (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&\r\n                (candidate.children === void 0 || Array.isArray(candidate.children));\r\n        }\r\n        DocumentSymbol.is = is;\r\n    })(DocumentSymbol = exports.DocumentSymbol || (exports.DocumentSymbol = {}));\r\n    /**\r\n     * A set of predefined code action kinds\r\n     */\r\n    var CodeActionKind;\r\n    (function (CodeActionKind) {\r\n        /**\r\n         * Empty kind.\r\n         */\r\n        CodeActionKind.Empty = '';\r\n        /**\r\n         * Base kind for quickfix actions: 'quickfix'\r\n         */\r\n        CodeActionKind.QuickFix = 'quickfix';\r\n        /**\r\n         * Base kind for refactoring actions: 'refactor'\r\n         */\r\n        CodeActionKind.Refactor = 'refactor';\r\n        /**\r\n         * Base kind for refactoring extraction actions: 'refactor.extract'\r\n         *\r\n         * Example extract actions:\r\n         *\r\n         * - Extract method\r\n         * - Extract function\r\n         * - Extract variable\r\n         * - Extract interface from class\r\n         * - ...\r\n         */\r\n        CodeActionKind.RefactorExtract = 'refactor.extract';\r\n        /**\r\n         * Base kind for refactoring inline actions: 'refactor.inline'\r\n         *\r\n         * Example inline actions:\r\n         *\r\n         * - Inline function\r\n         * - Inline variable\r\n         * - Inline constant\r\n         * - ...\r\n         */\r\n        CodeActionKind.RefactorInline = 'refactor.inline';\r\n        /**\r\n         * Base kind for refactoring rewrite actions: 'refactor.rewrite'\r\n         *\r\n         * Example rewrite actions:\r\n         *\r\n         * - Convert JavaScript function to class\r\n         * - Add or remove parameter\r\n         * - Encapsulate field\r\n         * - Make method static\r\n         * - Move method to base class\r\n         * - ...\r\n         */\r\n        CodeActionKind.RefactorRewrite = 'refactor.rewrite';\r\n        /**\r\n         * Base kind for source actions: `source`\r\n         *\r\n         * Source code actions apply to the entire file.\r\n         */\r\n        CodeActionKind.Source = 'source';\r\n        /**\r\n         * Base kind for an organize imports source action: `source.organizeImports`\r\n         */\r\n        CodeActionKind.SourceOrganizeImports = 'source.organizeImports';\r\n        /**\r\n         * Base kind for auto-fix source actions: `source.fixAll`.\r\n         *\r\n         * Fix all actions automatically fix errors that have a clear fix that do not require user input.\r\n         * They should not suppress errors or perform unsafe fixes such as generating new types or classes.\r\n         *\r\n         * @since 3.15.0\r\n         */\r\n        CodeActionKind.SourceFixAll = 'source.fixAll';\r\n    })(CodeActionKind = exports.CodeActionKind || (exports.CodeActionKind = {}));\r\n    /**\r\n     * The CodeActionContext namespace provides helper functions to work with\r\n     * [CodeActionContext](#CodeActionContext) literals.\r\n     */\r\n    var CodeActionContext;\r\n    (function (CodeActionContext) {\r\n        /**\r\n         * Creates a new CodeActionContext literal.\r\n         */\r\n        function create(diagnostics, only) {\r\n            var result = { diagnostics: diagnostics };\r\n            if (only !== void 0 && only !== null) {\r\n                result.only = only;\r\n            }\r\n            return result;\r\n        }\r\n        CodeActionContext.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));\r\n        }\r\n        CodeActionContext.is = is;\r\n    })(CodeActionContext = exports.CodeActionContext || (exports.CodeActionContext = {}));\r\n    var CodeAction;\r\n    (function (CodeAction) {\r\n        function create(title, commandOrEdit, kind) {\r\n            var result = { title: title };\r\n            if (Command.is(commandOrEdit)) {\r\n                result.command = commandOrEdit;\r\n            }\r\n            else {\r\n                result.edit = commandOrEdit;\r\n            }\r\n            if (kind !== void 0) {\r\n                result.kind = kind;\r\n            }\r\n            return result;\r\n        }\r\n        CodeAction.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate && Is.string(candidate.title) &&\r\n                (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&\r\n                (candidate.kind === void 0 || Is.string(candidate.kind)) &&\r\n                (candidate.edit !== void 0 || candidate.command !== void 0) &&\r\n                (candidate.command === void 0 || Command.is(candidate.command)) &&\r\n                (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) &&\r\n                (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));\r\n        }\r\n        CodeAction.is = is;\r\n    })(CodeAction = exports.CodeAction || (exports.CodeAction = {}));\r\n    /**\r\n     * The CodeLens namespace provides helper functions to work with\r\n     * [CodeLens](#CodeLens) literals.\r\n     */\r\n    var CodeLens;\r\n    (function (CodeLens) {\r\n        /**\r\n         * Creates a new CodeLens literal.\r\n         */\r\n        function create(range, data) {\r\n            var result = { range: range };\r\n            if (Is.defined(data)) {\r\n                result.data = data;\r\n            }\r\n            return result;\r\n        }\r\n        CodeLens.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));\r\n        }\r\n        CodeLens.is = is;\r\n    })(CodeLens = exports.CodeLens || (exports.CodeLens = {}));\r\n    /**\r\n     * The FormattingOptions namespace provides helper functions to work with\r\n     * [FormattingOptions](#FormattingOptions) literals.\r\n     */\r\n    var FormattingOptions;\r\n    (function (FormattingOptions) {\r\n        /**\r\n         * Creates a new FormattingOptions literal.\r\n         */\r\n        function create(tabSize, insertSpaces) {\r\n            return { tabSize: tabSize, insertSpaces: insertSpaces };\r\n        }\r\n        FormattingOptions.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);\r\n        }\r\n        FormattingOptions.is = is;\r\n    })(FormattingOptions = exports.FormattingOptions || (exports.FormattingOptions = {}));\r\n    /**\r\n     * The DocumentLink namespace provides helper functions to work with\r\n     * [DocumentLink](#DocumentLink) literals.\r\n     */\r\n    var DocumentLink;\r\n    (function (DocumentLink) {\r\n        /**\r\n         * Creates a new DocumentLink literal.\r\n         */\r\n        function create(range, target, data) {\r\n            return { range: range, target: target, data: data };\r\n        }\r\n        DocumentLink.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));\r\n        }\r\n        DocumentLink.is = is;\r\n    })(DocumentLink = exports.DocumentLink || (exports.DocumentLink = {}));\r\n    /**\r\n     * The SelectionRange namespace provides helper function to work with\r\n     * SelectionRange literals.\r\n     */\r\n    var SelectionRange;\r\n    (function (SelectionRange) {\r\n        /**\r\n         * Creates a new SelectionRange\r\n         * @param range the range.\r\n         * @param parent an optional parent.\r\n         */\r\n        function create(range, parent) {\r\n            return { range: range, parent: parent };\r\n        }\r\n        SelectionRange.create = create;\r\n        function is(value) {\r\n            var candidate = value;\r\n            return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));\r\n        }\r\n        SelectionRange.is = is;\r\n    })(SelectionRange = exports.SelectionRange || (exports.SelectionRange = {}));\r\n    exports.EOL = ['\\n', '\\r\\n', '\\r'];\r\n    /**\r\n     * @deprecated Use the text document from the new vscode-languageserver-textdocument package.\r\n     */\r\n    var TextDocument;\r\n    (function (TextDocument) {\r\n        /**\r\n         * Creates a new ITextDocument literal from the given uri and content.\r\n         * @param uri The document's uri.\r\n         * @param languageId  The document's language Id.\r\n         * @param content The document's content.\r\n         */\r\n        function create(uri, languageId, version, content) {\r\n            return new FullTextDocument(uri, languageId, version, content);\r\n        }\r\n        TextDocument.create = create;\r\n        /**\r\n         * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.\r\n         */\r\n        function is(value) {\r\n            var candidate = value;\r\n            return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)\r\n                && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;\r\n        }\r\n        TextDocument.is = is;\r\n        function applyEdits(document, edits) {\r\n            var text = document.getText();\r\n            var sortedEdits = mergeSort(edits, function (a, b) {\r\n                var diff = a.range.start.line - b.range.start.line;\r\n                if (diff === 0) {\r\n                    return a.range.start.character - b.range.start.character;\r\n                }\r\n                return diff;\r\n            });\r\n            var lastModifiedOffset = text.length;\r\n            for (var i = sortedEdits.length - 1; i >= 0; i--) {\r\n                var e = sortedEdits[i];\r\n                var startOffset = document.offsetAt(e.range.start);\r\n                var endOffset = document.offsetAt(e.range.end);\r\n                if (endOffset <= lastModifiedOffset) {\r\n                    text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);\r\n                }\r\n                else {\r\n                    throw new Error('Overlapping edit');\r\n                }\r\n                lastModifiedOffset = startOffset;\r\n            }\r\n            return text;\r\n        }\r\n        TextDocument.applyEdits = applyEdits;\r\n        function mergeSort(data, compare) {\r\n            if (data.length <= 1) {\r\n                // sorted\r\n                return data;\r\n            }\r\n            var p = (data.length / 2) | 0;\r\n            var left = data.slice(0, p);\r\n            var right = data.slice(p);\r\n            mergeSort(left, compare);\r\n            mergeSort(right, compare);\r\n            var leftIdx = 0;\r\n            var rightIdx = 0;\r\n            var i = 0;\r\n            while (leftIdx < left.length && rightIdx < right.length) {\r\n                var ret = compare(left[leftIdx], right[rightIdx]);\r\n                if (ret <= 0) {\r\n                    // smaller_equal -> take left to preserve order\r\n                    data[i++] = left[leftIdx++];\r\n                }\r\n                else {\r\n                    // greater -> take right\r\n                    data[i++] = right[rightIdx++];\r\n                }\r\n            }\r\n            while (leftIdx < left.length) {\r\n                data[i++] = left[leftIdx++];\r\n            }\r\n            while (rightIdx < right.length) {\r\n                data[i++] = right[rightIdx++];\r\n            }\r\n            return data;\r\n        }\r\n    })(TextDocument = exports.TextDocument || (exports.TextDocument = {}));\r\n    var FullTextDocument = /** @class */ (function () {\r\n        function FullTextDocument(uri, languageId, version, content) {\r\n            this._uri = uri;\r\n            this._languageId = languageId;\r\n            this._version = version;\r\n            this._content = content;\r\n            this._lineOffsets = undefined;\r\n        }\r\n        Object.defineProperty(FullTextDocument.prototype, \"uri\", {\r\n            get: function () {\r\n                return this._uri;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        Object.defineProperty(FullTextDocument.prototype, \"languageId\", {\r\n            get: function () {\r\n                return this._languageId;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        Object.defineProperty(FullTextDocument.prototype, \"version\", {\r\n            get: function () {\r\n                return this._version;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        FullTextDocument.prototype.getText = function (range) {\r\n            if (range) {\r\n                var start = this.offsetAt(range.start);\r\n                var end = this.offsetAt(range.end);\r\n                return this._content.substring(start, end);\r\n            }\r\n            return this._content;\r\n        };\r\n        FullTextDocument.prototype.update = function (event, version) {\r\n            this._content = event.text;\r\n            this._version = version;\r\n            this._lineOffsets = undefined;\r\n        };\r\n        FullTextDocument.prototype.getLineOffsets = function () {\r\n            if (this._lineOffsets === undefined) {\r\n                var lineOffsets = [];\r\n                var text = this._content;\r\n                var isLineStart = true;\r\n                for (var i = 0; i < text.length; i++) {\r\n                    if (isLineStart) {\r\n                        lineOffsets.push(i);\r\n                        isLineStart = false;\r\n                    }\r\n                    var ch = text.charAt(i);\r\n                    isLineStart = (ch === '\\r' || ch === '\\n');\r\n                    if (ch === '\\r' && i + 1 < text.length && text.charAt(i + 1) === '\\n') {\r\n                        i++;\r\n                    }\r\n                }\r\n                if (isLineStart && text.length > 0) {\r\n                    lineOffsets.push(text.length);\r\n                }\r\n                this._lineOffsets = lineOffsets;\r\n            }\r\n            return this._lineOffsets;\r\n        };\r\n        FullTextDocument.prototype.positionAt = function (offset) {\r\n            offset = Math.max(Math.min(offset, this._content.length), 0);\r\n            var lineOffsets = this.getLineOffsets();\r\n            var low = 0, high = lineOffsets.length;\r\n            if (high === 0) {\r\n                return Position.create(0, offset);\r\n            }\r\n            while (low < high) {\r\n                var mid = Math.floor((low + high) / 2);\r\n                if (lineOffsets[mid] > offset) {\r\n                    high = mid;\r\n                }\r\n                else {\r\n                    low = mid + 1;\r\n                }\r\n            }\r\n            // low is the least x for which the line offset is larger than the current offset\r\n            // or array.length if no line offset is larger than the current offset\r\n            var line = low - 1;\r\n            return Position.create(line, offset - lineOffsets[line]);\r\n        };\r\n        FullTextDocument.prototype.offsetAt = function (position) {\r\n            var lineOffsets = this.getLineOffsets();\r\n            if (position.line >= lineOffsets.length) {\r\n                return this._content.length;\r\n            }\r\n            else if (position.line < 0) {\r\n                return 0;\r\n            }\r\n            var lineOffset = lineOffsets[position.line];\r\n            var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;\r\n            return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);\r\n        };\r\n        Object.defineProperty(FullTextDocument.prototype, \"lineCount\", {\r\n            get: function () {\r\n                return this.getLineOffsets().length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        return FullTextDocument;\r\n    }());\r\n    var Is;\r\n    (function (Is) {\r\n        var toString = Object.prototype.toString;\r\n        function defined(value) {\r\n            return typeof value !== 'undefined';\r\n        }\r\n        Is.defined = defined;\r\n        function undefined(value) {\r\n            return typeof value === 'undefined';\r\n        }\r\n        Is.undefined = undefined;\r\n        function boolean(value) {\r\n            return value === true || value === false;\r\n        }\r\n        Is.boolean = boolean;\r\n        function string(value) {\r\n            return toString.call(value) === '[object String]';\r\n        }\r\n        Is.string = string;\r\n        function number(value) {\r\n            return toString.call(value) === '[object Number]';\r\n        }\r\n        Is.number = number;\r\n        function func(value) {\r\n            return toString.call(value) === '[object Function]';\r\n        }\r\n        Is.func = func;\r\n        function objectLiteral(value) {\r\n            // Strictly speaking class instances pass this check as well. Since the LSP\r\n            // doesn't use classes we ignore this for now. If we do we need to add something\r\n            // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\r\n            return value !== null && typeof value === 'object';\r\n        }\r\n        Is.objectLiteral = objectLiteral;\r\n        function typedArray(value, check) {\r\n            return Array.isArray(value) && value.every(check);\r\n        }\r\n        Is.typedArray = typedArray;\r\n    })(Is || (Is = {}));\r\n});\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nfunction boolean(value) {\r\n    return value === true || value === false;\r\n}\r\nexports.boolean = boolean;\r\nfunction string(value) {\r\n    return typeof value === 'string' || value instanceof String;\r\n}\r\nexports.string = string;\r\nfunction number(value) {\r\n    return typeof value === 'number' || value instanceof Number;\r\n}\r\nexports.number = number;\r\nfunction error(value) {\r\n    return value instanceof Error;\r\n}\r\nexports.error = error;\r\nfunction func(value) {\r\n    return typeof value === 'function';\r\n}\r\nexports.func = func;\r\nfunction array(value) {\r\n    return Array.isArray(value);\r\n}\r\nexports.array = array;\r\nfunction stringArray(value) {\r\n    return array(value) && value.every(elem => string(elem));\r\n}\r\nexports.stringArray = stringArray;\r\nfunction typedArray(value, check) {\r\n    return Array.isArray(value) && value.every(check);\r\n}\r\nexports.typedArray = typedArray;\r\nfunction objectLiteral(value) {\r\n    // Strictly speaking class instances pass this check as well. Since the LSP\r\n    // doesn't use classes we ignore this for now. If we do we need to add something\r\n    // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`\r\n    return value !== null && typeof value === 'object';\r\n}\r\nexports.objectLiteral = objectLiteral;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nclass ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolRequestType0 = ProtocolRequestType0;\r\nclass ProtocolRequestType extends vscode_jsonrpc_1.RequestType {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolRequestType = ProtocolRequestType;\r\nclass ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolNotificationType = ProtocolNotificationType;\r\nclass ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {\r\n    constructor(method) {\r\n        super(method);\r\n    }\r\n}\r\nexports.ProtocolNotificationType0 = ProtocolNotificationType0;\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * A request to resolve the implementation locations of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPositioParams]\r\n * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a\r\n * Thenable that resolves to such.\r\n */\r\nvar ImplementationRequest;\r\n(function (ImplementationRequest) {\r\n    ImplementationRequest.method = 'textDocument/implementation';\r\n    ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);\r\n    /** @deprecated Use ImplementationRequest.type */\r\n    ImplementationRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * A request to resolve the type definition locations of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPositioParams]\r\n * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a\r\n * Thenable that resolves to such.\r\n */\r\nvar TypeDefinitionRequest;\r\n(function (TypeDefinitionRequest) {\r\n    TypeDefinitionRequest.method = 'textDocument/typeDefinition';\r\n    TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);\r\n    /** @deprecated Use TypeDefinitionRequest.type */\r\n    TypeDefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.\r\n */\r\nvar WorkspaceFoldersRequest;\r\n(function (WorkspaceFoldersRequest) {\r\n    WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');\r\n})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));\r\n/**\r\n * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace\r\n * folder configuration changes.\r\n */\r\nvar DidChangeWorkspaceFoldersNotification;\r\n(function (DidChangeWorkspaceFoldersNotification) {\r\n    DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');\r\n})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * The 'workspace/configuration' request is sent from the server to the client to fetch a certain\r\n * configuration setting.\r\n *\r\n * This pull model replaces the old push model were the client signaled configuration change via an\r\n * event. If the server still needs to react to configuration changes (since the server caches the\r\n * result of `workspace/configuration` requests) the server should register for an empty configuration\r\n * change event and empty the cache if such an event is received.\r\n */\r\nvar ConfigurationRequest;\r\n(function (ConfigurationRequest) {\r\n    ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');\r\n})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A request to list all color symbols found in a given text document. The request's\r\n * parameter is of type [DocumentColorParams](#DocumentColorParams) the\r\n * response is of type [ColorInformation[]](#ColorInformation) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar DocumentColorRequest;\r\n(function (DocumentColorRequest) {\r\n    DocumentColorRequest.method = 'textDocument/documentColor';\r\n    DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);\r\n    /** @deprecated Use DocumentColorRequest.type */\r\n    DocumentColorRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));\r\n/**\r\n * A request to list all presentation for a color. The request's\r\n * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the\r\n * response is of type [ColorInformation[]](#ColorInformation) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar ColorPresentationRequest;\r\n(function (ColorPresentationRequest) {\r\n    ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');\r\n})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));\r\n", "\"use strict\";\r\n/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * Enum of known range kinds\r\n */\r\nvar FoldingRangeKind;\r\n(function (FoldingRangeKind) {\r\n    /**\r\n     * Folding range for a comment\r\n     */\r\n    FoldingRangeKind[\"Comment\"] = \"comment\";\r\n    /**\r\n     * Folding range for a imports or includes\r\n     */\r\n    FoldingRangeKind[\"Imports\"] = \"imports\";\r\n    /**\r\n     * Folding range for a region (e.g. `#region`)\r\n     */\r\n    FoldingRangeKind[\"Region\"] = \"region\";\r\n})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));\r\n/**\r\n * A request to provide folding ranges in a document. The request's\r\n * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the\r\n * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar FoldingRangeRequest;\r\n(function (FoldingRangeRequest) {\r\n    FoldingRangeRequest.method = 'textDocument/foldingRange';\r\n    FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);\r\n    /** @deprecated Use FoldingRangeRequest.type */\r\n    FoldingRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * A request to resolve the type definition locations of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPositioParams]\r\n * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)\r\n * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves\r\n * to such.\r\n */\r\nvar DeclarationRequest;\r\n(function (DeclarationRequest) {\r\n    DeclarationRequest.method = 'textDocument/declaration';\r\n    DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);\r\n    /** @deprecated Use DeclarationRequest.type */\r\n    DeclarationRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));\r\n", "\"use strict\";\r\n/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A request to provide selection ranges in a document. The request's\r\n * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the\r\n * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar SelectionRangeRequest;\r\n(function (SelectionRangeRequest) {\r\n    SelectionRangeRequest.method = 'textDocument/selectionRange';\r\n    SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);\r\n    /** @deprecated  Use SelectionRangeRequest.type */\r\n    SelectionRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\nvar WorkDoneProgress;\r\n(function (WorkDoneProgress) {\r\n    WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();\r\n})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));\r\n/**\r\n * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress\r\n * reporting from the server.\r\n */\r\nvar WorkDoneProgressCreateRequest;\r\n(function (WorkDoneProgressCreateRequest) {\r\n    WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');\r\n})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));\r\n/**\r\n * The `window/workDoneProgress/cancel` notification is sent from  the client to the server to cancel a progress\r\n * initiated on the server side.\r\n */\r\nvar WorkDoneProgressCancelNotification;\r\n(function (WorkDoneProgressCancelNotification) {\r\n    WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');\r\n})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst Is = require(\"./utils/is\");\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nconst messages_1 = require(\"./messages\");\r\nconst protocol_implementation_1 = require(\"./protocol.implementation\");\r\nexports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;\r\nconst protocol_typeDefinition_1 = require(\"./protocol.typeDefinition\");\r\nexports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;\r\nconst protocol_workspaceFolders_1 = require(\"./protocol.workspaceFolders\");\r\nexports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;\r\nexports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;\r\nconst protocol_configuration_1 = require(\"./protocol.configuration\");\r\nexports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;\r\nconst protocol_colorProvider_1 = require(\"./protocol.colorProvider\");\r\nexports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;\r\nexports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;\r\nconst protocol_foldingRange_1 = require(\"./protocol.foldingRange\");\r\nexports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;\r\nconst protocol_declaration_1 = require(\"./protocol.declaration\");\r\nexports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;\r\nconst protocol_selectionRange_1 = require(\"./protocol.selectionRange\");\r\nexports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;\r\nconst protocol_progress_1 = require(\"./protocol.progress\");\r\nexports.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;\r\nexports.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;\r\nexports.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;\r\n// @ts-ignore: to avoid inlining LocatioLink as dynamic import\r\nlet __noDynamicImport;\r\n/**\r\n * The DocumentFilter namespace provides helper functions to work with\r\n * [DocumentFilter](#DocumentFilter) literals.\r\n */\r\nvar DocumentFilter;\r\n(function (DocumentFilter) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);\r\n    }\r\n    DocumentFilter.is = is;\r\n})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));\r\n/**\r\n * The DocumentSelector namespace provides helper functions to work with\r\n * [DocumentSelector](#DocumentSelector)s.\r\n */\r\nvar DocumentSelector;\r\n(function (DocumentSelector) {\r\n    function is(value) {\r\n        if (!Array.isArray(value)) {\r\n            return false;\r\n        }\r\n        for (let elem of value) {\r\n            if (!Is.string(elem) && !DocumentFilter.is(elem)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    DocumentSelector.is = is;\r\n})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));\r\n/**\r\n * The `client/registerCapability` request is sent from the server to the client to register a new capability\r\n * handler on the client side.\r\n */\r\nvar RegistrationRequest;\r\n(function (RegistrationRequest) {\r\n    RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');\r\n})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));\r\n/**\r\n * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability\r\n * handler on the client side.\r\n */\r\nvar UnregistrationRequest;\r\n(function (UnregistrationRequest) {\r\n    UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');\r\n})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));\r\nvar ResourceOperationKind;\r\n(function (ResourceOperationKind) {\r\n    /**\r\n     * Supports creating new files and folders.\r\n     */\r\n    ResourceOperationKind.Create = 'create';\r\n    /**\r\n     * Supports renaming existing files and folders.\r\n     */\r\n    ResourceOperationKind.Rename = 'rename';\r\n    /**\r\n     * Supports deleting existing files and folders.\r\n     */\r\n    ResourceOperationKind.Delete = 'delete';\r\n})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));\r\nvar FailureHandlingKind;\r\n(function (FailureHandlingKind) {\r\n    /**\r\n     * Applying the workspace change is simply aborted if one of the changes provided\r\n     * fails. All operations executed before the failing operation stay executed.\r\n     */\r\n    FailureHandlingKind.Abort = 'abort';\r\n    /**\r\n     * All operations are executed transactional. That means they either all\r\n     * succeed or no changes at all are applied to the workspace.\r\n     */\r\n    FailureHandlingKind.Transactional = 'transactional';\r\n    /**\r\n     * If the workspace edit contains only textual file changes they are executed transactional.\r\n     * If resource changes (create, rename or delete file) are part of the change the failure\r\n     * handling startegy is abort.\r\n     */\r\n    FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';\r\n    /**\r\n     * The client tries to undo the operations already executed. But there is no\r\n     * guarantee that this is succeeding.\r\n     */\r\n    FailureHandlingKind.Undo = 'undo';\r\n})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));\r\n/**\r\n * The StaticRegistrationOptions namespace provides helper functions to work with\r\n * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.\r\n */\r\nvar StaticRegistrationOptions;\r\n(function (StaticRegistrationOptions) {\r\n    function hasId(value) {\r\n        const candidate = value;\r\n        return candidate && Is.string(candidate.id) && candidate.id.length > 0;\r\n    }\r\n    StaticRegistrationOptions.hasId = hasId;\r\n})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));\r\n/**\r\n * The TextDocumentRegistrationOptions namespace provides helper functions to work with\r\n * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.\r\n */\r\nvar TextDocumentRegistrationOptions;\r\n(function (TextDocumentRegistrationOptions) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));\r\n    }\r\n    TextDocumentRegistrationOptions.is = is;\r\n})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));\r\n/**\r\n * The WorkDoneProgressOptions namespace provides helper functions to work with\r\n * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.\r\n */\r\nvar WorkDoneProgressOptions;\r\n(function (WorkDoneProgressOptions) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));\r\n    }\r\n    WorkDoneProgressOptions.is = is;\r\n    function hasWorkDoneProgress(value) {\r\n        const candidate = value;\r\n        return candidate && Is.boolean(candidate.workDoneProgress);\r\n    }\r\n    WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;\r\n})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));\r\n/**\r\n * The initialize request is sent from the client to the server.\r\n * It is sent once as the request after starting up the server.\r\n * The requests parameter is of type [InitializeParams](#InitializeParams)\r\n * the response if of type [InitializeResult](#InitializeResult) of a Thenable that\r\n * resolves to such.\r\n */\r\nvar InitializeRequest;\r\n(function (InitializeRequest) {\r\n    InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');\r\n})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));\r\n/**\r\n * Known error codes for an `InitializeError`;\r\n */\r\nvar InitializeError;\r\n(function (InitializeError) {\r\n    /**\r\n     * If the protocol version provided by the client can't be handled by the server.\r\n     * @deprecated This initialize error got replaced by client capabilities. There is\r\n     * no version handshake in version 3.0x\r\n     */\r\n    InitializeError.unknownProtocolVersion = 1;\r\n})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));\r\n/**\r\n * The intialized notification is sent from the client to the\r\n * server after the client is fully initialized and the server\r\n * is allowed to send requests from the server to the client.\r\n */\r\nvar InitializedNotification;\r\n(function (InitializedNotification) {\r\n    InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');\r\n})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));\r\n//---- Shutdown Method ----\r\n/**\r\n * A shutdown request is sent from the client to the server.\r\n * It is sent once when the client decides to shutdown the\r\n * server. The only notification that is sent after a shutdown request\r\n * is the exit event.\r\n */\r\nvar ShutdownRequest;\r\n(function (ShutdownRequest) {\r\n    ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');\r\n})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));\r\n//---- Exit Notification ----\r\n/**\r\n * The exit event is sent from the client to the server to\r\n * ask the server to exit its process.\r\n */\r\nvar ExitNotification;\r\n(function (ExitNotification) {\r\n    ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');\r\n})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));\r\n/**\r\n * The configuration change notification is sent from the client to the server\r\n * when the client's configuration has changed. The notification contains\r\n * the changed configuration as defined by the language client.\r\n */\r\nvar DidChangeConfigurationNotification;\r\n(function (DidChangeConfigurationNotification) {\r\n    DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');\r\n})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));\r\n//---- Message show and log notifications ----\r\n/**\r\n * The message type\r\n */\r\nvar MessageType;\r\n(function (MessageType) {\r\n    /**\r\n     * An error message.\r\n     */\r\n    MessageType.Error = 1;\r\n    /**\r\n     * A warning message.\r\n     */\r\n    MessageType.Warning = 2;\r\n    /**\r\n     * An information message.\r\n     */\r\n    MessageType.Info = 3;\r\n    /**\r\n     * A log message.\r\n     */\r\n    MessageType.Log = 4;\r\n})(MessageType = exports.MessageType || (exports.MessageType = {}));\r\n/**\r\n * The show message notification is sent from a server to a client to ask\r\n * the client to display a particular message in the user interface.\r\n */\r\nvar ShowMessageNotification;\r\n(function (ShowMessageNotification) {\r\n    ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');\r\n})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));\r\n/**\r\n * The show message request is sent from the server to the client to show a message\r\n * and a set of options actions to the user.\r\n */\r\nvar ShowMessageRequest;\r\n(function (ShowMessageRequest) {\r\n    ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');\r\n})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));\r\n/**\r\n * The log message notification is sent from the server to the client to ask\r\n * the client to log a particular message.\r\n */\r\nvar LogMessageNotification;\r\n(function (LogMessageNotification) {\r\n    LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');\r\n})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));\r\n//---- Telemetry notification\r\n/**\r\n * The telemetry event notification is sent from the server to the client to ask\r\n * the client to log telemetry data.\r\n */\r\nvar TelemetryEventNotification;\r\n(function (TelemetryEventNotification) {\r\n    TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');\r\n})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));\r\n/**\r\n * Defines how the host (editor) should sync\r\n * document changes to the language server.\r\n */\r\nvar TextDocumentSyncKind;\r\n(function (TextDocumentSyncKind) {\r\n    /**\r\n     * Documents should not be synced at all.\r\n     */\r\n    TextDocumentSyncKind.None = 0;\r\n    /**\r\n     * Documents are synced by always sending the full content\r\n     * of the document.\r\n     */\r\n    TextDocumentSyncKind.Full = 1;\r\n    /**\r\n     * Documents are synced by sending the full content on open.\r\n     * After that only incremental updates to the document are\r\n     * send.\r\n     */\r\n    TextDocumentSyncKind.Incremental = 2;\r\n})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));\r\n/**\r\n * The document open notification is sent from the client to the server to signal\r\n * newly opened text documents. The document's truth is now managed by the client\r\n * and the server must not try to read the document's truth using the document's\r\n * uri. Open in this sense means it is managed by the client. It doesn't necessarily\r\n * mean that its content is presented in an editor. An open notification must not\r\n * be sent more than once without a corresponding close notification send before.\r\n * This means open and close notification must be balanced and the max open count\r\n * is one.\r\n */\r\nvar DidOpenTextDocumentNotification;\r\n(function (DidOpenTextDocumentNotification) {\r\n    DidOpenTextDocumentNotification.method = 'textDocument/didOpen';\r\n    DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);\r\n})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));\r\n/**\r\n * The document change notification is sent from the client to the server to signal\r\n * changes to a text document.\r\n */\r\nvar DidChangeTextDocumentNotification;\r\n(function (DidChangeTextDocumentNotification) {\r\n    DidChangeTextDocumentNotification.method = 'textDocument/didChange';\r\n    DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);\r\n})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));\r\n/**\r\n * The document close notification is sent from the client to the server when\r\n * the document got closed in the client. The document's truth now exists where\r\n * the document's uri points to (e.g. if the document's uri is a file uri the\r\n * truth now exists on disk). As with the open notification the close notification\r\n * is about managing the document's content. Receiving a close notification\r\n * doesn't mean that the document was open in an editor before. A close\r\n * notification requires a previous open notification to be sent.\r\n */\r\nvar DidCloseTextDocumentNotification;\r\n(function (DidCloseTextDocumentNotification) {\r\n    DidCloseTextDocumentNotification.method = 'textDocument/didClose';\r\n    DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);\r\n})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));\r\n/**\r\n * The document save notification is sent from the client to the server when\r\n * the document got saved in the client.\r\n */\r\nvar DidSaveTextDocumentNotification;\r\n(function (DidSaveTextDocumentNotification) {\r\n    DidSaveTextDocumentNotification.method = 'textDocument/didSave';\r\n    DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);\r\n})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));\r\n/**\r\n * Represents reasons why a text document is saved.\r\n */\r\nvar TextDocumentSaveReason;\r\n(function (TextDocumentSaveReason) {\r\n    /**\r\n     * Manually triggered, e.g. by the user pressing save, by starting debugging,\r\n     * or by an API call.\r\n     */\r\n    TextDocumentSaveReason.Manual = 1;\r\n    /**\r\n     * Automatic after a delay.\r\n     */\r\n    TextDocumentSaveReason.AfterDelay = 2;\r\n    /**\r\n     * When the editor lost focus.\r\n     */\r\n    TextDocumentSaveReason.FocusOut = 3;\r\n})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));\r\n/**\r\n * A document will save notification is sent from the client to the server before\r\n * the document is actually saved.\r\n */\r\nvar WillSaveTextDocumentNotification;\r\n(function (WillSaveTextDocumentNotification) {\r\n    WillSaveTextDocumentNotification.method = 'textDocument/willSave';\r\n    WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);\r\n})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));\r\n/**\r\n * A document will save request is sent from the client to the server before\r\n * the document is actually saved. The request can return an array of TextEdits\r\n * which will be applied to the text document before it is saved. Please note that\r\n * clients might drop results if computing the text edits took too long or if a\r\n * server constantly fails on this request. This is done to keep the save fast and\r\n * reliable.\r\n */\r\nvar WillSaveTextDocumentWaitUntilRequest;\r\n(function (WillSaveTextDocumentWaitUntilRequest) {\r\n    WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';\r\n    WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);\r\n})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));\r\n/**\r\n * The watched files notification is sent from the client to the server when\r\n * the client detects changes to file watched by the language client.\r\n */\r\nvar DidChangeWatchedFilesNotification;\r\n(function (DidChangeWatchedFilesNotification) {\r\n    DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');\r\n})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));\r\n/**\r\n * The file event type\r\n */\r\nvar FileChangeType;\r\n(function (FileChangeType) {\r\n    /**\r\n     * The file got created.\r\n     */\r\n    FileChangeType.Created = 1;\r\n    /**\r\n     * The file got changed.\r\n     */\r\n    FileChangeType.Changed = 2;\r\n    /**\r\n     * The file got deleted.\r\n     */\r\n    FileChangeType.Deleted = 3;\r\n})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));\r\nvar WatchKind;\r\n(function (WatchKind) {\r\n    /**\r\n     * Interested in create events.\r\n     */\r\n    WatchKind.Create = 1;\r\n    /**\r\n     * Interested in change events\r\n     */\r\n    WatchKind.Change = 2;\r\n    /**\r\n     * Interested in delete events\r\n     */\r\n    WatchKind.Delete = 4;\r\n})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));\r\n/**\r\n * Diagnostics notification are sent from the server to the client to signal\r\n * results of validation runs.\r\n */\r\nvar PublishDiagnosticsNotification;\r\n(function (PublishDiagnosticsNotification) {\r\n    PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');\r\n})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));\r\n/**\r\n * How a completion was triggered\r\n */\r\nvar CompletionTriggerKind;\r\n(function (CompletionTriggerKind) {\r\n    /**\r\n     * Completion was triggered by typing an identifier (24x7 code\r\n     * complete), manual invocation (e.g Ctrl+Space) or via API.\r\n     */\r\n    CompletionTriggerKind.Invoked = 1;\r\n    /**\r\n     * Completion was triggered by a trigger character specified by\r\n     * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.\r\n     */\r\n    CompletionTriggerKind.TriggerCharacter = 2;\r\n    /**\r\n     * Completion was re-triggered as current completion list is incomplete\r\n     */\r\n    CompletionTriggerKind.TriggerForIncompleteCompletions = 3;\r\n})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));\r\n/**\r\n * Request to request completion at a given text document position. The request's\r\n * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response\r\n * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)\r\n * or a Thenable that resolves to such.\r\n *\r\n * The request can delay the computation of the [`detail`](#CompletionItem.detail)\r\n * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`\r\n * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,\r\n * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.\r\n */\r\nvar CompletionRequest;\r\n(function (CompletionRequest) {\r\n    CompletionRequest.method = 'textDocument/completion';\r\n    CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);\r\n    /** @deprecated Use CompletionRequest.type */\r\n    CompletionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));\r\n/**\r\n * Request to resolve additional information for a given completion item.The request's\r\n * parameter is of type [CompletionItem](#CompletionItem) the response\r\n * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.\r\n */\r\nvar CompletionResolveRequest;\r\n(function (CompletionResolveRequest) {\r\n    CompletionResolveRequest.method = 'completionItem/resolve';\r\n    CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);\r\n})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));\r\n/**\r\n * Request to request hover information at a given text document position. The request's\r\n * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of\r\n * type [Hover](#Hover) or a Thenable that resolves to such.\r\n */\r\nvar HoverRequest;\r\n(function (HoverRequest) {\r\n    HoverRequest.method = 'textDocument/hover';\r\n    HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);\r\n})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));\r\n/**\r\n * How a signature help was triggered.\r\n *\r\n * @since 3.15.0\r\n */\r\nvar SignatureHelpTriggerKind;\r\n(function (SignatureHelpTriggerKind) {\r\n    /**\r\n     * Signature help was invoked manually by the user or by a command.\r\n     */\r\n    SignatureHelpTriggerKind.Invoked = 1;\r\n    /**\r\n     * Signature help was triggered by a trigger character.\r\n     */\r\n    SignatureHelpTriggerKind.TriggerCharacter = 2;\r\n    /**\r\n     * Signature help was triggered by the cursor moving or by the document content changing.\r\n     */\r\n    SignatureHelpTriggerKind.ContentChange = 3;\r\n})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));\r\nvar SignatureHelpRequest;\r\n(function (SignatureHelpRequest) {\r\n    SignatureHelpRequest.method = 'textDocument/signatureHelp';\r\n    SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);\r\n})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));\r\n/**\r\n * A request to resolve the definition location of a symbol at a given text\r\n * document position. The request's parameter is of type [TextDocumentPosition]\r\n * (#TextDocumentPosition) the response is of either type [Definition](#Definition)\r\n * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves\r\n * to such.\r\n */\r\nvar DefinitionRequest;\r\n(function (DefinitionRequest) {\r\n    DefinitionRequest.method = 'textDocument/definition';\r\n    DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);\r\n    /** @deprecated Use DefinitionRequest.type */\r\n    DefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));\r\n/**\r\n * A request to resolve project-wide references for the symbol denoted\r\n * by the given text document position. The request's parameter is of\r\n * type [ReferenceParams](#ReferenceParams) the response is of type\r\n * [Location[]](#Location) or a Thenable that resolves to such.\r\n */\r\nvar ReferencesRequest;\r\n(function (ReferencesRequest) {\r\n    ReferencesRequest.method = 'textDocument/references';\r\n    ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);\r\n    /** @deprecated Use ReferencesRequest.type */\r\n    ReferencesRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));\r\n/**\r\n * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given\r\n * text document position. The request's parameter is of type [TextDocumentPosition]\r\n * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]\r\n * (#DocumentHighlight) or a Thenable that resolves to such.\r\n */\r\nvar DocumentHighlightRequest;\r\n(function (DocumentHighlightRequest) {\r\n    DocumentHighlightRequest.method = 'textDocument/documentHighlight';\r\n    DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);\r\n    /** @deprecated Use DocumentHighlightRequest.type */\r\n    DocumentHighlightRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));\r\n/**\r\n * A request to list all symbols found in a given text document. The request's\r\n * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the\r\n * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable\r\n * that resolves to such.\r\n */\r\nvar DocumentSymbolRequest;\r\n(function (DocumentSymbolRequest) {\r\n    DocumentSymbolRequest.method = 'textDocument/documentSymbol';\r\n    DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);\r\n    /** @deprecated Use DocumentSymbolRequest.type */\r\n    DocumentSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));\r\n/**\r\n * A request to provide commands for the given text document and range.\r\n */\r\nvar CodeActionRequest;\r\n(function (CodeActionRequest) {\r\n    CodeActionRequest.method = 'textDocument/codeAction';\r\n    CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);\r\n    /** @deprecated Use CodeActionRequest.type */\r\n    CodeActionRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));\r\n/**\r\n * A request to list project-wide symbols matching the query string given\r\n * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is\r\n * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that\r\n * resolves to such.\r\n */\r\nvar WorkspaceSymbolRequest;\r\n(function (WorkspaceSymbolRequest) {\r\n    WorkspaceSymbolRequest.method = 'workspace/symbol';\r\n    WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);\r\n    /** @deprecated Use WorkspaceSymbolRequest.type */\r\n    WorkspaceSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));\r\n/**\r\n * A request to provide code lens for the given text document.\r\n */\r\nvar CodeLensRequest;\r\n(function (CodeLensRequest) {\r\n    CodeLensRequest.type = new messages_1.ProtocolRequestType('textDocument/codeLens');\r\n    /** @deprecated Use CodeLensRequest.type */\r\n    CodeLensRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));\r\n/**\r\n * A request to resolve a command for a given code lens.\r\n */\r\nvar CodeLensResolveRequest;\r\n(function (CodeLensResolveRequest) {\r\n    CodeLensResolveRequest.type = new messages_1.ProtocolRequestType('codeLens/resolve');\r\n})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));\r\n/**\r\n * A request to provide document links\r\n */\r\nvar DocumentLinkRequest;\r\n(function (DocumentLinkRequest) {\r\n    DocumentLinkRequest.method = 'textDocument/documentLink';\r\n    DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);\r\n    /** @deprecated Use DocumentLinkRequest.type */\r\n    DocumentLinkRequest.resultType = new vscode_jsonrpc_1.ProgressType();\r\n})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));\r\n/**\r\n * Request to resolve additional information for a given document link. The request's\r\n * parameter is of type [DocumentLink](#DocumentLink) the response\r\n * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.\r\n */\r\nvar DocumentLinkResolveRequest;\r\n(function (DocumentLinkResolveRequest) {\r\n    DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType('documentLink/resolve');\r\n})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));\r\n/**\r\n * A request to to format a whole document.\r\n */\r\nvar DocumentFormattingRequest;\r\n(function (DocumentFormattingRequest) {\r\n    DocumentFormattingRequest.method = 'textDocument/formatting';\r\n    DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);\r\n})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));\r\n/**\r\n * A request to to format a range in a document.\r\n */\r\nvar DocumentRangeFormattingRequest;\r\n(function (DocumentRangeFormattingRequest) {\r\n    DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';\r\n    DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);\r\n})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));\r\n/**\r\n * A request to format a document on type.\r\n */\r\nvar DocumentOnTypeFormattingRequest;\r\n(function (DocumentOnTypeFormattingRequest) {\r\n    DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';\r\n    DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);\r\n})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));\r\n/**\r\n * A request to rename a symbol.\r\n */\r\nvar RenameRequest;\r\n(function (RenameRequest) {\r\n    RenameRequest.method = 'textDocument/rename';\r\n    RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);\r\n})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));\r\n/**\r\n * A request to test and perform the setup necessary for a rename.\r\n */\r\nvar PrepareRenameRequest;\r\n(function (PrepareRenameRequest) {\r\n    PrepareRenameRequest.method = 'textDocument/prepareRename';\r\n    PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);\r\n})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));\r\n/**\r\n * A request send from the client to the server to execute a command. The request might return\r\n * a workspace edit which the client will apply to the workspace.\r\n */\r\nvar ExecuteCommandRequest;\r\n(function (ExecuteCommandRequest) {\r\n    ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');\r\n})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));\r\n/**\r\n * A request sent from the server to the client to modified certain resources.\r\n */\r\nvar ApplyWorkspaceEditRequest;\r\n(function (ApplyWorkspaceEditRequest) {\r\n    ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');\r\n})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) TypeFox and others. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A request to result a `CallHierarchyItem` in a document at a given position.\r\n * Can be used as an input to a incoming or outgoing call hierarchy.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar CallHierarchyPrepareRequest;\r\n(function (CallHierarchyPrepareRequest) {\r\n    CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';\r\n    CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);\r\n})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));\r\n/**\r\n * A request to resolve the incoming calls for a given `CallHierarchyItem`.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar CallHierarchyIncomingCallsRequest;\r\n(function (CallHierarchyIncomingCallsRequest) {\r\n    CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';\r\n    CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);\r\n})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));\r\n/**\r\n * A request to resolve the outgoing calls for a given `CallHierarchyItem`.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar CallHierarchyOutgoingCallsRequest;\r\n(function (CallHierarchyOutgoingCallsRequest) {\r\n    CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';\r\n    CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);\r\n})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst messages_1 = require(\"./messages\");\r\n/**\r\n * A set of predefined token types. This set is not fixed\r\n * an clients can specify additional token types via the\r\n * corresponding client capabilities.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokenTypes;\r\n(function (SemanticTokenTypes) {\r\n    SemanticTokenTypes[\"comment\"] = \"comment\";\r\n    SemanticTokenTypes[\"keyword\"] = \"keyword\";\r\n    SemanticTokenTypes[\"string\"] = \"string\";\r\n    SemanticTokenTypes[\"number\"] = \"number\";\r\n    SemanticTokenTypes[\"regexp\"] = \"regexp\";\r\n    SemanticTokenTypes[\"operator\"] = \"operator\";\r\n    SemanticTokenTypes[\"namespace\"] = \"namespace\";\r\n    SemanticTokenTypes[\"type\"] = \"type\";\r\n    SemanticTokenTypes[\"struct\"] = \"struct\";\r\n    SemanticTokenTypes[\"class\"] = \"class\";\r\n    SemanticTokenTypes[\"interface\"] = \"interface\";\r\n    SemanticTokenTypes[\"enum\"] = \"enum\";\r\n    SemanticTokenTypes[\"typeParameter\"] = \"typeParameter\";\r\n    SemanticTokenTypes[\"function\"] = \"function\";\r\n    SemanticTokenTypes[\"member\"] = \"member\";\r\n    SemanticTokenTypes[\"property\"] = \"property\";\r\n    SemanticTokenTypes[\"macro\"] = \"macro\";\r\n    SemanticTokenTypes[\"variable\"] = \"variable\";\r\n    SemanticTokenTypes[\"parameter\"] = \"parameter\";\r\n    SemanticTokenTypes[\"label\"] = \"label\";\r\n})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));\r\n/**\r\n * A set of predefined token modifiers. This set is not fixed\r\n * an clients can specify additional token types via the\r\n * corresponding client capabilities.\r\n *\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokenModifiers;\r\n(function (SemanticTokenModifiers) {\r\n    SemanticTokenModifiers[\"documentation\"] = \"documentation\";\r\n    SemanticTokenModifiers[\"declaration\"] = \"declaration\";\r\n    SemanticTokenModifiers[\"definition\"] = \"definition\";\r\n    SemanticTokenModifiers[\"reference\"] = \"reference\";\r\n    SemanticTokenModifiers[\"static\"] = \"static\";\r\n    SemanticTokenModifiers[\"abstract\"] = \"abstract\";\r\n    SemanticTokenModifiers[\"deprecated\"] = \"deprecated\";\r\n    SemanticTokenModifiers[\"async\"] = \"async\";\r\n    SemanticTokenModifiers[\"volatile\"] = \"volatile\";\r\n    SemanticTokenModifiers[\"readonly\"] = \"readonly\";\r\n})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokens;\r\n(function (SemanticTokens) {\r\n    function is(value) {\r\n        const candidate = value;\r\n        return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&\r\n            Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');\r\n    }\r\n    SemanticTokens.is = is;\r\n})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokensRequest;\r\n(function (SemanticTokensRequest) {\r\n    SemanticTokensRequest.method = 'textDocument/semanticTokens';\r\n    SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);\r\n})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokensEditsRequest;\r\n(function (SemanticTokensEditsRequest) {\r\n    SemanticTokensEditsRequest.method = 'textDocument/semanticTokens/edits';\r\n    SemanticTokensEditsRequest.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest.method);\r\n})(SemanticTokensEditsRequest = exports.SemanticTokensEditsRequest || (exports.SemanticTokensEditsRequest = {}));\r\n/**\r\n * @since 3.16.0 - Proposed state\r\n */\r\nvar SemanticTokensRangeRequest;\r\n(function (SemanticTokensRangeRequest) {\r\n    SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';\r\n    SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);\r\n})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));\r\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n'use strict';\r\nfunction __export(m) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst vscode_jsonrpc_1 = require(\"vscode-jsonrpc\");\r\nexports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;\r\nexports.ResponseError = vscode_jsonrpc_1.ResponseError;\r\nexports.CancellationToken = vscode_jsonrpc_1.CancellationToken;\r\nexports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;\r\nexports.Disposable = vscode_jsonrpc_1.Disposable;\r\nexports.Event = vscode_jsonrpc_1.Event;\r\nexports.Emitter = vscode_jsonrpc_1.Emitter;\r\nexports.Trace = vscode_jsonrpc_1.Trace;\r\nexports.TraceFormat = vscode_jsonrpc_1.TraceFormat;\r\nexports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;\r\nexports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;\r\nexports.RequestType = vscode_jsonrpc_1.RequestType;\r\nexports.RequestType0 = vscode_jsonrpc_1.RequestType0;\r\nexports.NotificationType = vscode_jsonrpc_1.NotificationType;\r\nexports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;\r\nexports.MessageReader = vscode_jsonrpc_1.MessageReader;\r\nexports.MessageWriter = vscode_jsonrpc_1.MessageWriter;\r\nexports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;\r\nexports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;\r\nexports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;\r\nexports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;\r\nexports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;\r\nexports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;\r\nexports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;\r\nexports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;\r\nexports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;\r\nexports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;\r\nexports.ProgressType = vscode_jsonrpc_1.ProgressType;\r\n__export(require(\"vscode-languageserver-types\"));\r\n__export(require(\"./protocol\"));\r\nconst callHierarchy = require(\"./protocol.callHierarchy.proposed\");\r\nconst st = require(\"./protocol.sematicTokens.proposed\");\r\nvar Proposed;\r\n(function (Proposed) {\r\n    let CallHierarchyPrepareRequest;\r\n    (function (CallHierarchyPrepareRequest) {\r\n        CallHierarchyPrepareRequest.method = callHierarchy.CallHierarchyPrepareRequest.method;\r\n        CallHierarchyPrepareRequest.type = callHierarchy.CallHierarchyPrepareRequest.type;\r\n    })(CallHierarchyPrepareRequest = Proposed.CallHierarchyPrepareRequest || (Proposed.CallHierarchyPrepareRequest = {}));\r\n    let CallHierarchyIncomingCallsRequest;\r\n    (function (CallHierarchyIncomingCallsRequest) {\r\n        CallHierarchyIncomingCallsRequest.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;\r\n        CallHierarchyIncomingCallsRequest.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;\r\n    })(CallHierarchyIncomingCallsRequest = Proposed.CallHierarchyIncomingCallsRequest || (Proposed.CallHierarchyIncomingCallsRequest = {}));\r\n    let CallHierarchyOutgoingCallsRequest;\r\n    (function (CallHierarchyOutgoingCallsRequest) {\r\n        CallHierarchyOutgoingCallsRequest.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;\r\n        CallHierarchyOutgoingCallsRequest.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;\r\n    })(CallHierarchyOutgoingCallsRequest = Proposed.CallHierarchyOutgoingCallsRequest || (Proposed.CallHierarchyOutgoingCallsRequest = {}));\r\n    Proposed.SemanticTokenTypes = st.SemanticTokenTypes;\r\n    Proposed.SemanticTokenModifiers = st.SemanticTokenModifiers;\r\n    Proposed.SemanticTokens = st.SemanticTokens;\r\n    let SemanticTokensRequest;\r\n    (function (SemanticTokensRequest) {\r\n        SemanticTokensRequest.method = st.SemanticTokensRequest.method;\r\n        SemanticTokensRequest.type = st.SemanticTokensRequest.type;\r\n    })(SemanticTokensRequest = Proposed.SemanticTokensRequest || (Proposed.SemanticTokensRequest = {}));\r\n    let SemanticTokensEditsRequest;\r\n    (function (SemanticTokensEditsRequest) {\r\n        SemanticTokensEditsRequest.method = st.SemanticTokensEditsRequest.method;\r\n        SemanticTokensEditsRequest.type = st.SemanticTokensEditsRequest.type;\r\n    })(SemanticTokensEditsRequest = Proposed.SemanticTokensEditsRequest || (Proposed.SemanticTokensEditsRequest = {}));\r\n    let SemanticTokensRangeRequest;\r\n    (function (SemanticTokensRangeRequest) {\r\n        SemanticTokensRangeRequest.method = st.SemanticTokensRangeRequest.method;\r\n        SemanticTokensRangeRequest.type = st.SemanticTokensRangeRequest.type;\r\n    })(SemanticTokensRangeRequest = Proposed.SemanticTokensRangeRequest || (Proposed.SemanticTokensRangeRequest = {}));\r\n})(Proposed = exports.Proposed || (exports.Proposed = {}));\r\nfunction createProtocolConnection(reader, writer, logger, strategy) {\r\n    return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);\r\n}\r\nexports.createProtocolConnection = createProtocolConnection;\r\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction boolean(value) {\n    return value === true || value === false;\n}\nexports.boolean = boolean;\nfunction string(value) {\n    return typeof value === 'string' || value instanceof String;\n}\nexports.string = string;\nfunction number(value) {\n    return typeof value === 'number' || value instanceof Number;\n}\nexports.number = number;\nfunction error(value) {\n    return value instanceof Error;\n}\nexports.error = error;\nfunction func(value) {\n    return typeof value === 'function';\n}\nexports.func = func;\nfunction array(value) {\n    return Array.isArray(value);\n}\nexports.array = array;\nfunction stringArray(value) {\n    return array(value) && value.every(elem => string(elem));\n}\nexports.stringArray = stringArray;\nfunction typedArray(value, check) {\n    return Array.isArray(value) && value.every(check);\n}\nexports.typedArray = typedArray;\nfunction thenable(value) {\n    return value && func(value.then);\n}\nexports.thenable = thenable;\nfunction asPromise(value) {\n    if (value instanceof Promise) {\n        return value;\n    }\n    else if (thenable(value)) {\n        return new Promise((resolve, reject) => {\n            value.then((resolved) => resolve(resolved), (error) => reject(error));\n        });\n    }\n    else {\n        return Promise.resolve(value);\n    }\n}\nexports.asPromise = asPromise;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nclass ProtocolCompletionItem extends code.CompletionItem {\n    constructor(label) {\n        super(label);\n    }\n}\nexports.default = ProtocolCompletionItem;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nclass ProtocolCodeLens extends code.CodeLens {\n    constructor(range) {\n        super(range);\n    }\n}\nexports.default = ProtocolCodeLens;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nclass ProtocolDocumentLink extends code.DocumentLink {\n    constructor(range, target) {\n        super(range, target);\n    }\n}\nexports.default = ProtocolDocumentLink;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nconst proto = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst protocolCompletionItem_1 = require(\"./protocolCompletionItem\");\nconst protocolCodeLens_1 = require(\"./protocolCodeLens\");\nconst protocolDocumentLink_1 = require(\"./protocolDocumentLink\");\nfunction createConverter(uriConverter) {\n    const nullConverter = (value) => value.toString();\n    const _uriConverter = uriConverter || nullConverter;\n    function asUri(value) {\n        return _uriConverter(value);\n    }\n    function asTextDocumentIdentifier(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri)\n        };\n    }\n    function asVersionedTextDocumentIdentifier(textDocument) {\n        return {\n            uri: _uriConverter(textDocument.uri),\n            version: textDocument.version\n        };\n    }\n    function asOpenTextDocumentParams(textDocument) {\n        return {\n            textDocument: {\n                uri: _uriConverter(textDocument.uri),\n                languageId: textDocument.languageId,\n                version: textDocument.version,\n                text: textDocument.getText()\n            }\n        };\n    }\n    function isTextDocumentChangeEvent(value) {\n        let candidate = value;\n        return !!candidate.document && !!candidate.contentChanges;\n    }\n    function isTextDocument(value) {\n        let candidate = value;\n        return !!candidate.uri && !!candidate.version;\n    }\n    function asChangeTextDocumentParams(arg) {\n        if (isTextDocument(arg)) {\n            let result = {\n                textDocument: {\n                    uri: _uriConverter(arg.uri),\n                    version: arg.version\n                },\n                contentChanges: [{ text: arg.getText() }]\n            };\n            return result;\n        }\n        else if (isTextDocumentChangeEvent(arg)) {\n            let document = arg.document;\n            let result = {\n                textDocument: {\n                    uri: _uriConverter(document.uri),\n                    version: document.version\n                },\n                contentChanges: arg.contentChanges.map((change) => {\n                    let range = change.range;\n                    return {\n                        range: {\n                            start: { line: range.start.line, character: range.start.character },\n                            end: { line: range.end.line, character: range.end.character }\n                        },\n                        rangeLength: change.rangeLength,\n                        text: change.text\n                    };\n                })\n            };\n            return result;\n        }\n        else {\n            throw Error('Unsupported text document change parameter');\n        }\n    }\n    function asCloseTextDocumentParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asSaveTextDocumentParams(textDocument, includeContent = false) {\n        let result = {\n            textDocument: asVersionedTextDocumentIdentifier(textDocument)\n        };\n        if (includeContent) {\n            result.text = textDocument.getText();\n        }\n        return result;\n    }\n    function asTextDocumentSaveReason(reason) {\n        switch (reason) {\n            case code.TextDocumentSaveReason.Manual:\n                return proto.TextDocumentSaveReason.Manual;\n            case code.TextDocumentSaveReason.AfterDelay:\n                return proto.TextDocumentSaveReason.AfterDelay;\n            case code.TextDocumentSaveReason.FocusOut:\n                return proto.TextDocumentSaveReason.FocusOut;\n        }\n        return proto.TextDocumentSaveReason.Manual;\n    }\n    function asWillSaveTextDocumentParams(event) {\n        return {\n            textDocument: asTextDocumentIdentifier(event.document),\n            reason: asTextDocumentSaveReason(event.reason)\n        };\n    }\n    function asTextDocumentPositionParams(textDocument, position) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position)\n        };\n    }\n    function asCompletionTriggerKind(triggerKind) {\n        switch (triggerKind) {\n            case code.CompletionTriggerKind.TriggerCharacter:\n                return proto.CompletionTriggerKind.TriggerCharacter;\n            case code.CompletionTriggerKind.TriggerForIncompleteCompletions:\n                return proto.CompletionTriggerKind.TriggerForIncompleteCompletions;\n            default:\n                return proto.CompletionTriggerKind.Invoked;\n        }\n    }\n    function asCompletionParams(textDocument, position, context) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: {\n                triggerKind: asCompletionTriggerKind(context.triggerKind),\n                triggerCharacter: context.triggerCharacter\n            }\n        };\n    }\n    function asSignatureHelpTriggerKind(triggerKind) {\n        switch (triggerKind) {\n            case code.SignatureHelpTriggerKind.Invoke:\n                return proto.SignatureHelpTriggerKind.Invoked;\n            case code.SignatureHelpTriggerKind.TriggerCharacter:\n                return proto.SignatureHelpTriggerKind.TriggerCharacter;\n            case code.SignatureHelpTriggerKind.ContentChange:\n                return proto.SignatureHelpTriggerKind.ContentChange;\n        }\n    }\n    function asParameterInformation(value) {\n        // We leave the documentation out on purpose since it usually adds no\n        // value for the server.\n        return {\n            label: value.label\n        };\n    }\n    function asParameterInformations(values) {\n        return values.map(asParameterInformation);\n    }\n    function asSignatureInformation(value) {\n        // We leave the documentation out on purpose since it usually adds no\n        // value for the server.\n        return {\n            label: value.label,\n            parameters: asParameterInformations(value.parameters)\n        };\n    }\n    function asSignatureInformations(values) {\n        return values.map(asSignatureInformation);\n    }\n    function asSignatureHelp(value) {\n        if (value === undefined) {\n            return value;\n        }\n        return {\n            signatures: asSignatureInformations(value.signatures),\n            activeSignature: value.activeSignature,\n            activeParameter: value.activeParameter\n        };\n    }\n    function asSignatureHelpParams(textDocument, position, context) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: {\n                isRetrigger: context.isRetrigger,\n                triggerCharacter: context.triggerCharacter,\n                triggerKind: asSignatureHelpTriggerKind(context.triggerKind),\n                activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp)\n            }\n        };\n    }\n    function asWorkerPosition(position) {\n        return { line: position.line, character: position.character };\n    }\n    function asPosition(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return { line: value.line, character: value.character };\n    }\n    function asPositions(value) {\n        let result = [];\n        for (let elem of value) {\n            result.push(asPosition(elem));\n        }\n        return result;\n    }\n    function isInsertReplace(value) {\n        const candidate = value;\n        return candidate && !!candidate.inserting && !!candidate.replacing;\n    }\n    function asRange(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        // The LSP has no support yet for insert replace. So this can never happen.\n        if (isInsertReplace(value)) {\n            throw new Error(`Receving unknown insert replace range.`);\n        }\n        return { start: asPosition(value.start), end: asPosition(value.end) };\n    }\n    function asLocation(value) {\n        if (value === undefined || value === null) {\n            return value;\n        }\n        return proto.Location.create(asUri(value.uri), asRange(value.range));\n    }\n    function asDiagnosticSeverity(value) {\n        switch (value) {\n            case code.DiagnosticSeverity.Error:\n                return proto.DiagnosticSeverity.Error;\n            case code.DiagnosticSeverity.Warning:\n                return proto.DiagnosticSeverity.Warning;\n            case code.DiagnosticSeverity.Information:\n                return proto.DiagnosticSeverity.Information;\n            case code.DiagnosticSeverity.Hint:\n                return proto.DiagnosticSeverity.Hint;\n        }\n    }\n    function asDiagnosticTags(tags) {\n        if (!tags) {\n            return undefined;\n        }\n        let result = [];\n        for (let tag of tags) {\n            let converted = asDiagnosticTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length > 0 ? result : undefined;\n    }\n    function asDiagnosticTag(tag) {\n        switch (tag) {\n            case code.DiagnosticTag.Unnecessary:\n                return proto.DiagnosticTag.Unnecessary;\n            case code.DiagnosticTag.Deprecated:\n                return proto.DiagnosticTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asRelatedInformation(item) {\n        return {\n            message: item.message,\n            location: asLocation(item.location)\n        };\n    }\n    function asRelatedInformations(items) {\n        return items.map(asRelatedInformation);\n    }\n    function asDiagnostic(item) {\n        let result = proto.Diagnostic.create(asRange(item.range), item.message);\n        if (Is.number(item.severity)) {\n            result.severity = asDiagnosticSeverity(item.severity);\n        }\n        if (Is.number(item.code) || Is.string(item.code)) {\n            result.code = item.code;\n        }\n        if (Array.isArray(item.tags)) {\n            result.tags = asDiagnosticTags(item.tags);\n        }\n        if (item.relatedInformation) {\n            result.relatedInformation = asRelatedInformations(item.relatedInformation);\n        }\n        if (item.source) {\n            result.source = item.source;\n        }\n        return result;\n    }\n    function asDiagnostics(items) {\n        if (items === undefined || items === null) {\n            return items;\n        }\n        return items.map(asDiagnostic);\n    }\n    function asDocumentation(format, documentation) {\n        switch (format) {\n            case '$string':\n                return documentation;\n            case proto.MarkupKind.PlainText:\n                return { kind: format, value: documentation };\n            case proto.MarkupKind.Markdown:\n                return { kind: format, value: documentation.value };\n            default:\n                return `Unsupported Markup content received. Kind is: ${format}`;\n        }\n    }\n    function asCompletionItemTag(tag) {\n        switch (tag) {\n            case code.CompletionItemTag.Deprecated:\n                return proto.CompletionItemTag.Deprecated;\n        }\n        return undefined;\n    }\n    function asCompletionItemTags(tags) {\n        if (tags === undefined) {\n            return tags;\n        }\n        const result = [];\n        for (let tag of tags) {\n            const converted = asCompletionItemTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result;\n    }\n    function asCompletionItemKind(value, original) {\n        if (original !== undefined) {\n            return original;\n        }\n        return value + 1;\n    }\n    function asCompletionItem(item) {\n        let result = { label: item.label };\n        let protocolItem = item instanceof protocolCompletionItem_1.default ? item : undefined;\n        if (item.detail) {\n            result.detail = item.detail;\n        }\n        // We only send items back we created. So this can't be something else than\n        // a string right now.\n        if (item.documentation) {\n            if (!protocolItem || protocolItem.documentationFormat === '$string') {\n                result.documentation = item.documentation;\n            }\n            else {\n                result.documentation = asDocumentation(protocolItem.documentationFormat, item.documentation);\n            }\n        }\n        if (item.filterText) {\n            result.filterText = item.filterText;\n        }\n        fillPrimaryInsertText(result, item);\n        if (Is.number(item.kind)) {\n            result.kind = asCompletionItemKind(item.kind, protocolItem && protocolItem.originalItemKind);\n        }\n        if (item.sortText) {\n            result.sortText = item.sortText;\n        }\n        if (item.additionalTextEdits) {\n            result.additionalTextEdits = asTextEdits(item.additionalTextEdits);\n        }\n        if (item.commitCharacters) {\n            result.commitCharacters = item.commitCharacters.slice();\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.preselect === true || item.preselect === false) {\n            result.preselect = item.preselect;\n        }\n        const tags = asCompletionItemTags(item.tags);\n        if (protocolItem) {\n            if (protocolItem.data !== undefined) {\n                result.data = protocolItem.data;\n            }\n            if (protocolItem.deprecated === true || protocolItem.deprecated === false) {\n                if (protocolItem.deprecated === true && tags !== undefined && tags.length > 0) {\n                    const index = tags.indexOf(code.CompletionItemTag.Deprecated);\n                    if (index !== -1) {\n                        tags.splice(index, 1);\n                    }\n                }\n                result.deprecated = protocolItem.deprecated;\n            }\n        }\n        if (tags !== undefined && tags.length > 0) {\n            result.tags = tags;\n        }\n        return result;\n    }\n    function fillPrimaryInsertText(target, source) {\n        let format = proto.InsertTextFormat.PlainText;\n        let text = undefined;\n        let range = undefined;\n        if (source.textEdit) {\n            text = source.textEdit.newText;\n            range = asRange(source.textEdit.range);\n        }\n        else if (source.insertText instanceof code.SnippetString) {\n            format = proto.InsertTextFormat.Snippet;\n            text = source.insertText.value;\n        }\n        else {\n            text = source.insertText;\n        }\n        if (source.range) {\n            range = asRange(source.range);\n        }\n        target.insertTextFormat = format;\n        if (source.fromEdit && text !== undefined && range !== undefined) {\n            target.textEdit = { newText: text, range: range };\n        }\n        else {\n            target.insertText = text;\n        }\n    }\n    function asTextEdit(edit) {\n        return { range: asRange(edit.range), newText: edit.newText };\n    }\n    function asTextEdits(edits) {\n        if (edits === undefined || edits === null) {\n            return edits;\n        }\n        return edits.map(asTextEdit);\n    }\n    function asSymbolKind(item) {\n        if (item <= code.SymbolKind.TypeParameter) {\n            // Symbol kind is one based in the protocol and zero based in code.\n            return (item + 1);\n        }\n        return proto.SymbolKind.Property;\n    }\n    function asSymbolTag(item) {\n        return item;\n    }\n    function asSymbolTags(items) {\n        return items.map(asSymbolTag);\n    }\n    function asReferenceParams(textDocument, position, options) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument),\n            position: asWorkerPosition(position),\n            context: { includeDeclaration: options.includeDeclaration }\n        };\n    }\n    function asCodeActionContext(context) {\n        if (context === undefined || context === null) {\n            return context;\n        }\n        let only;\n        if (context.only && Is.string(context.only.value)) {\n            only = [context.only.value];\n        }\n        return proto.CodeActionContext.create(asDiagnostics(context.diagnostics), only);\n    }\n    function asCommand(item) {\n        let result = proto.Command.create(item.title, item.command);\n        if (item.arguments) {\n            result.arguments = item.arguments;\n        }\n        return result;\n    }\n    function asCodeLens(item) {\n        let result = proto.CodeLens.create(asRange(item.range));\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item instanceof protocolCodeLens_1.default) {\n            if (item.data) {\n                result.data = item.data;\n            }\n        }\n        return result;\n    }\n    function asFormattingOptions(item) {\n        return { tabSize: item.tabSize, insertSpaces: item.insertSpaces };\n    }\n    function asDocumentSymbolParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asCodeLensParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    function asDocumentLink(item) {\n        let result = proto.DocumentLink.create(asRange(item.range));\n        if (item.target) {\n            result.target = asUri(item.target);\n        }\n        if (item.tooltip !== undefined) {\n            result.tooltip = item.tooltip;\n        }\n        let protocolItem = item instanceof protocolDocumentLink_1.default ? item : undefined;\n        if (protocolItem && protocolItem.data) {\n            result.data = protocolItem.data;\n        }\n        return result;\n    }\n    function asDocumentLinkParams(textDocument) {\n        return {\n            textDocument: asTextDocumentIdentifier(textDocument)\n        };\n    }\n    return {\n        asUri,\n        asTextDocumentIdentifier,\n        asVersionedTextDocumentIdentifier,\n        asOpenTextDocumentParams,\n        asChangeTextDocumentParams,\n        asCloseTextDocumentParams,\n        asSaveTextDocumentParams,\n        asWillSaveTextDocumentParams,\n        asTextDocumentPositionParams,\n        asCompletionParams,\n        asSignatureHelpParams,\n        asWorkerPosition,\n        asRange,\n        asPosition,\n        asPositions,\n        asLocation,\n        asDiagnosticSeverity,\n        asDiagnosticTag,\n        asDiagnostic,\n        asDiagnostics,\n        asCompletionItem,\n        asTextEdit,\n        asSymbolKind,\n        asSymbolTag,\n        asSymbolTags,\n        asReferenceParams,\n        asCodeActionContext,\n        asCommand,\n        asCodeLens,\n        asFormattingOptions,\n        asDocumentSymbolParams,\n        asCodeLensParams,\n        asDocumentLink,\n        asDocumentLinkParams\n    };\n}\nexports.createConverter = createConverter;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst code = require(\"vscode\");\nconst ls = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nconst protocolCompletionItem_1 = require(\"./protocolCompletionItem\");\nconst protocolCodeLens_1 = require(\"./protocolCodeLens\");\nconst protocolDocumentLink_1 = require(\"./protocolDocumentLink\");\nvar CodeBlock;\n(function (CodeBlock) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.string(candidate.language) && Is.string(candidate.value);\n    }\n    CodeBlock.is = is;\n})(CodeBlock || (CodeBlock = {}));\nfunction createConverter(uriConverter) {\n    const nullConverter = (value) => code.Uri.parse(value);\n    const _uriConverter = uriConverter || nullConverter;\n    function asUri(value) {\n        return _uriConverter(value);\n    }\n    function asDiagnostics(diagnostics) {\n        return diagnostics.map(asDiagnostic);\n    }\n    function asDiagnostic(diagnostic) {\n        let result = new code.Diagnostic(asRange(diagnostic.range), diagnostic.message, asDiagnosticSeverity(diagnostic.severity));\n        if (Is.number(diagnostic.code) || Is.string(diagnostic.code)) {\n            result.code = diagnostic.code;\n        }\n        if (diagnostic.source) {\n            result.source = diagnostic.source;\n        }\n        if (diagnostic.relatedInformation) {\n            result.relatedInformation = asRelatedInformation(diagnostic.relatedInformation);\n        }\n        if (Array.isArray(diagnostic.tags)) {\n            result.tags = asDiagnosticTags(diagnostic.tags);\n        }\n        return result;\n    }\n    function asRelatedInformation(relatedInformation) {\n        return relatedInformation.map(asDiagnosticRelatedInformation);\n    }\n    function asDiagnosticRelatedInformation(information) {\n        return new code.DiagnosticRelatedInformation(asLocation(information.location), information.message);\n    }\n    function asDiagnosticTags(tags) {\n        if (!tags) {\n            return undefined;\n        }\n        let result = [];\n        for (let tag of tags) {\n            let converted = asDiagnosticTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result.length > 0 ? result : undefined;\n    }\n    function asDiagnosticTag(tag) {\n        switch (tag) {\n            case ls.DiagnosticTag.Unnecessary:\n                return code.DiagnosticTag.Unnecessary;\n            case ls.DiagnosticTag.Deprecated:\n                return code.DiagnosticTag.Deprecated;\n            default:\n                return undefined;\n        }\n    }\n    function asPosition(value) {\n        if (!value) {\n            return undefined;\n        }\n        return new code.Position(value.line, value.character);\n    }\n    function asRange(value) {\n        if (!value) {\n            return undefined;\n        }\n        return new code.Range(asPosition(value.start), asPosition(value.end));\n    }\n    function asRanges(value) {\n        return value.map(value => asRange(value));\n    }\n    function asDiagnosticSeverity(value) {\n        if (value === undefined || value === null) {\n            return code.DiagnosticSeverity.Error;\n        }\n        switch (value) {\n            case ls.DiagnosticSeverity.Error:\n                return code.DiagnosticSeverity.Error;\n            case ls.DiagnosticSeverity.Warning:\n                return code.DiagnosticSeverity.Warning;\n            case ls.DiagnosticSeverity.Information:\n                return code.DiagnosticSeverity.Information;\n            case ls.DiagnosticSeverity.Hint:\n                return code.DiagnosticSeverity.Hint;\n        }\n        return code.DiagnosticSeverity.Error;\n    }\n    function asHoverContent(value) {\n        if (Is.string(value)) {\n            return new code.MarkdownString(value);\n        }\n        else if (CodeBlock.is(value)) {\n            let result = new code.MarkdownString();\n            return result.appendCodeblock(value.value, value.language);\n        }\n        else if (Array.isArray(value)) {\n            let result = [];\n            for (let element of value) {\n                let item = new code.MarkdownString();\n                if (CodeBlock.is(element)) {\n                    item.appendCodeblock(element.value, element.language);\n                }\n                else {\n                    item.appendMarkdown(element);\n                }\n                result.push(item);\n            }\n            return result;\n        }\n        else {\n            let result;\n            switch (value.kind) {\n                case ls.MarkupKind.Markdown:\n                    return new code.MarkdownString(value.value);\n                case ls.MarkupKind.PlainText:\n                    result = new code.MarkdownString();\n                    result.appendText(value.value);\n                    return result;\n                default:\n                    result = new code.MarkdownString();\n                    result.appendText(`Unsupported Markup content received. Kind is: ${value.kind}`);\n                    return result;\n            }\n        }\n    }\n    function asDocumentation(value) {\n        if (Is.string(value)) {\n            return value;\n        }\n        else {\n            switch (value.kind) {\n                case ls.MarkupKind.Markdown:\n                    return new code.MarkdownString(value.value);\n                case ls.MarkupKind.PlainText:\n                    return value.value;\n                default:\n                    return `Unsupported Markup content received. Kind is: ${value.kind}`;\n            }\n        }\n    }\n    function asHover(hover) {\n        if (!hover) {\n            return undefined;\n        }\n        return new code.Hover(asHoverContent(hover.contents), asRange(hover.range));\n    }\n    function asCompletionResult(result) {\n        if (!result) {\n            return undefined;\n        }\n        if (Array.isArray(result)) {\n            let items = result;\n            return items.map(asCompletionItem);\n        }\n        let list = result;\n        return new code.CompletionList(list.items.map(asCompletionItem), list.isIncomplete);\n    }\n    function asCompletionItemKind(value) {\n        // Protocol item kind is 1 based, codes item kind is zero based.\n        if (ls.CompletionItemKind.Text <= value && value <= ls.CompletionItemKind.TypeParameter) {\n            return [value - 1, undefined];\n        }\n        return [code.CompletionItemKind.Text, value];\n    }\n    function asCompletionItemTag(tag) {\n        switch (tag) {\n            case ls.CompletionItemTag.Deprecated:\n                return code.CompletionItemTag.Deprecated;\n        }\n        return undefined;\n    }\n    function asCompletionItemTags(tags) {\n        if (tags === undefined || tags === null) {\n            return [];\n        }\n        const result = [];\n        for (let tag of tags) {\n            const converted = asCompletionItemTag(tag);\n            if (converted !== undefined) {\n                result.push(converted);\n            }\n        }\n        return result;\n    }\n    function asCompletionItem(item) {\n        let tags = asCompletionItemTags(item.tags);\n        let result = new protocolCompletionItem_1.default(item.label);\n        if (item.detail) {\n            result.detail = item.detail;\n        }\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n            result.documentationFormat = Is.string(item.documentation) ? '$string' : item.documentation.kind;\n        }\n        if (item.filterText) {\n            result.filterText = item.filterText;\n        }\n        let insertText = asCompletionInsertText(item);\n        if (insertText) {\n            result.insertText = insertText.text;\n            result.range = insertText.range;\n            result.fromEdit = insertText.fromEdit;\n        }\n        if (Is.number(item.kind)) {\n            let [itemKind, original] = asCompletionItemKind(item.kind);\n            result.kind = itemKind;\n            if (original) {\n                result.originalItemKind = original;\n            }\n        }\n        if (item.sortText) {\n            result.sortText = item.sortText;\n        }\n        if (item.additionalTextEdits) {\n            result.additionalTextEdits = asTextEdits(item.additionalTextEdits);\n        }\n        if (Is.stringArray(item.commitCharacters)) {\n            result.commitCharacters = item.commitCharacters.slice();\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.deprecated === true || item.deprecated === false) {\n            result.deprecated = item.deprecated;\n            if (item.deprecated === true) {\n                tags.push(code.CompletionItemTag.Deprecated);\n            }\n        }\n        if (item.preselect === true || item.preselect === false) {\n            result.preselect = item.preselect;\n        }\n        if (item.data !== undefined) {\n            result.data = item.data;\n        }\n        if (tags.length > 0) {\n            result.tags = tags;\n        }\n        return result;\n    }\n    function asCompletionInsertText(item) {\n        if (item.textEdit) {\n            if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {\n                return { text: new code.SnippetString(item.textEdit.newText), range: asRange(item.textEdit.range), fromEdit: true };\n            }\n            else {\n                return { text: item.textEdit.newText, range: asRange(item.textEdit.range), fromEdit: true };\n            }\n        }\n        else if (item.insertText) {\n            if (item.insertTextFormat === ls.InsertTextFormat.Snippet) {\n                return { text: new code.SnippetString(item.insertText), fromEdit: false };\n            }\n            else {\n                return { text: item.insertText, fromEdit: false };\n            }\n        }\n        else {\n            return undefined;\n        }\n    }\n    function asTextEdit(edit) {\n        if (!edit) {\n            return undefined;\n        }\n        return new code.TextEdit(asRange(edit.range), edit.newText);\n    }\n    function asTextEdits(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map(asTextEdit);\n    }\n    function asSignatureHelp(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new code.SignatureHelp();\n        if (Is.number(item.activeSignature)) {\n            result.activeSignature = item.activeSignature;\n        }\n        else {\n            // activeSignature was optional in the past\n            result.activeSignature = 0;\n        }\n        if (Is.number(item.activeParameter)) {\n            result.activeParameter = item.activeParameter;\n        }\n        else {\n            // activeParameter was optional in the past\n            result.activeParameter = 0;\n        }\n        if (item.signatures) {\n            result.signatures = asSignatureInformations(item.signatures);\n        }\n        return result;\n    }\n    function asSignatureInformations(items) {\n        return items.map(asSignatureInformation);\n    }\n    function asSignatureInformation(item) {\n        let result = new code.SignatureInformation(item.label);\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n        }\n        if (item.parameters) {\n            result.parameters = asParameterInformations(item.parameters);\n        }\n        return result;\n    }\n    function asParameterInformations(item) {\n        return item.map(asParameterInformation);\n    }\n    function asParameterInformation(item) {\n        let result = new code.ParameterInformation(item.label);\n        if (item.documentation) {\n            result.documentation = asDocumentation(item.documentation);\n        }\n        return result;\n    }\n    function asLocation(item) {\n        if (!item) {\n            return undefined;\n        }\n        return new code.Location(_uriConverter(item.uri), asRange(item.range));\n    }\n    function asDeclarationResult(item) {\n        if (!item) {\n            return undefined;\n        }\n        return asLocationResult(item);\n    }\n    function asDefinitionResult(item) {\n        if (!item) {\n            return undefined;\n        }\n        return asLocationResult(item);\n    }\n    function asLocationLink(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = {\n            targetUri: _uriConverter(item.targetUri),\n            targetRange: asRange(item.targetSelectionRange),\n            originSelectionRange: asRange(item.originSelectionRange),\n            targetSelectionRange: asRange(item.targetSelectionRange)\n        };\n        if (!result.targetSelectionRange) {\n            throw new Error(`targetSelectionRange must not be undefined or null`);\n        }\n        return result;\n    }\n    function asLocationResult(item) {\n        if (!item) {\n            return undefined;\n        }\n        if (Is.array(item)) {\n            if (item.length === 0) {\n                return [];\n            }\n            else if (ls.LocationLink.is(item[0])) {\n                let links = item;\n                return links.map((link) => asLocationLink(link));\n            }\n            else {\n                let locations = item;\n                return locations.map((location) => asLocation(location));\n            }\n        }\n        else if (ls.LocationLink.is(item)) {\n            return [asLocationLink(item)];\n        }\n        else {\n            return asLocation(item);\n        }\n    }\n    function asReferences(values) {\n        if (!values) {\n            return undefined;\n        }\n        return values.map(location => asLocation(location));\n    }\n    function asDocumentHighlights(values) {\n        if (!values) {\n            return undefined;\n        }\n        return values.map(asDocumentHighlight);\n    }\n    function asDocumentHighlight(item) {\n        let result = new code.DocumentHighlight(asRange(item.range));\n        if (Is.number(item.kind)) {\n            result.kind = asDocumentHighlightKind(item.kind);\n        }\n        return result;\n    }\n    function asDocumentHighlightKind(item) {\n        switch (item) {\n            case ls.DocumentHighlightKind.Text:\n                return code.DocumentHighlightKind.Text;\n            case ls.DocumentHighlightKind.Read:\n                return code.DocumentHighlightKind.Read;\n            case ls.DocumentHighlightKind.Write:\n                return code.DocumentHighlightKind.Write;\n        }\n        return code.DocumentHighlightKind.Text;\n    }\n    function asSymbolInformations(values, uri) {\n        if (!values) {\n            return undefined;\n        }\n        return values.map(information => asSymbolInformation(information, uri));\n    }\n    function asSymbolKind(item) {\n        if (item <= ls.SymbolKind.TypeParameter) {\n            // Symbol kind is one based in the protocol and zero based in code.\n            return item - 1;\n        }\n        return code.SymbolKind.Property;\n    }\n    function asSymbolTag(value) {\n        return value;\n    }\n    function asSymbolTags(items) {\n        if (items === undefined || items === null) {\n            return undefined;\n        }\n        return items.map(asSymbolTag);\n    }\n    function asSymbolInformation(item, uri) {\n        // Symbol kind is one based in the protocol and zero based in code.\n        let result = new code.SymbolInformation(item.name, asSymbolKind(item.kind), asRange(item.location.range), item.location.uri ? _uriConverter(item.location.uri) : uri);\n        if (item.containerName) {\n            result.containerName = item.containerName;\n        }\n        return result;\n    }\n    function asDocumentSymbols(values) {\n        if (values === undefined || values === null) {\n            return undefined;\n        }\n        return values.map(asDocumentSymbol);\n    }\n    function asDocumentSymbol(value) {\n        let result = new code.DocumentSymbol(value.name, value.detail || '', asSymbolKind(value.kind), asRange(value.range), asRange(value.selectionRange));\n        if (value.children !== undefined && value.children.length > 0) {\n            let children = [];\n            for (let child of value.children) {\n                children.push(asDocumentSymbol(child));\n            }\n            result.children = children;\n        }\n        return result;\n    }\n    function asCommand(item) {\n        let result = { title: item.title, command: item.command };\n        if (item.arguments) {\n            result.arguments = item.arguments;\n        }\n        return result;\n    }\n    function asCommands(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map(asCommand);\n    }\n    const kindMapping = new Map();\n    kindMapping.set(ls.CodeActionKind.Empty, code.CodeActionKind.Empty);\n    kindMapping.set(ls.CodeActionKind.QuickFix, code.CodeActionKind.QuickFix);\n    kindMapping.set(ls.CodeActionKind.Refactor, code.CodeActionKind.Refactor);\n    kindMapping.set(ls.CodeActionKind.RefactorExtract, code.CodeActionKind.RefactorExtract);\n    kindMapping.set(ls.CodeActionKind.RefactorInline, code.CodeActionKind.RefactorInline);\n    kindMapping.set(ls.CodeActionKind.RefactorRewrite, code.CodeActionKind.RefactorRewrite);\n    kindMapping.set(ls.CodeActionKind.Source, code.CodeActionKind.Source);\n    kindMapping.set(ls.CodeActionKind.SourceOrganizeImports, code.CodeActionKind.SourceOrganizeImports);\n    function asCodeActionKind(item) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        let result = kindMapping.get(item);\n        if (result) {\n            return result;\n        }\n        let parts = item.split('.');\n        result = code.CodeActionKind.Empty;\n        for (let part of parts) {\n            result = result.append(part);\n        }\n        return result;\n    }\n    function asCodeActionKinds(items) {\n        if (items === undefined || items === null) {\n            return undefined;\n        }\n        return items.map(kind => asCodeActionKind(kind));\n    }\n    function asCodeAction(item) {\n        if (item === undefined || item === null) {\n            return undefined;\n        }\n        let result = new code.CodeAction(item.title);\n        if (item.kind !== undefined) {\n            result.kind = asCodeActionKind(item.kind);\n        }\n        if (item.diagnostics) {\n            result.diagnostics = asDiagnostics(item.diagnostics);\n        }\n        if (item.edit) {\n            result.edit = asWorkspaceEdit(item.edit);\n        }\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.isPreferred !== undefined) {\n            result.isPreferred = item.isPreferred;\n        }\n        return result;\n    }\n    function asCodeLens(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new protocolCodeLens_1.default(asRange(item.range));\n        if (item.command) {\n            result.command = asCommand(item.command);\n        }\n        if (item.data !== undefined && item.data !== null) {\n            result.data = item.data;\n        }\n        return result;\n    }\n    function asCodeLenses(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map((codeLens) => asCodeLens(codeLens));\n    }\n    function asWorkspaceEdit(item) {\n        if (!item) {\n            return undefined;\n        }\n        let result = new code.WorkspaceEdit();\n        if (item.documentChanges) {\n            item.documentChanges.forEach(change => {\n                if (ls.CreateFile.is(change)) {\n                    result.createFile(_uriConverter(change.uri), change.options);\n                }\n                else if (ls.RenameFile.is(change)) {\n                    result.renameFile(_uriConverter(change.oldUri), _uriConverter(change.newUri), change.options);\n                }\n                else if (ls.DeleteFile.is(change)) {\n                    result.deleteFile(_uriConverter(change.uri), change.options);\n                }\n                else if (ls.TextDocumentEdit.is(change)) {\n                    result.set(_uriConverter(change.textDocument.uri), asTextEdits(change.edits));\n                }\n                else {\n                    console.error(`Unknown workspace edit change received:\\n${JSON.stringify(change, undefined, 4)}`);\n                }\n            });\n        }\n        else if (item.changes) {\n            Object.keys(item.changes).forEach(key => {\n                result.set(_uriConverter(key), asTextEdits(item.changes[key]));\n            });\n        }\n        return result;\n    }\n    function asDocumentLink(item) {\n        let range = asRange(item.range);\n        let target = item.target ? asUri(item.target) : undefined;\n        // target must be optional in DocumentLink\n        let link = new protocolDocumentLink_1.default(range, target);\n        if (item.tooltip !== undefined) {\n            link.tooltip = item.tooltip;\n        }\n        if (item.data !== undefined && item.data !== null) {\n            link.data = item.data;\n        }\n        return link;\n    }\n    function asDocumentLinks(items) {\n        if (!items) {\n            return undefined;\n        }\n        return items.map(asDocumentLink);\n    }\n    function asColor(color) {\n        return new code.Color(color.red, color.green, color.blue, color.alpha);\n    }\n    function asColorInformation(ci) {\n        return new code.ColorInformation(asRange(ci.range), asColor(ci.color));\n    }\n    function asColorInformations(colorInformation) {\n        if (Array.isArray(colorInformation)) {\n            return colorInformation.map(asColorInformation);\n        }\n        return undefined;\n    }\n    function asColorPresentation(cp) {\n        let presentation = new code.ColorPresentation(cp.label);\n        presentation.additionalTextEdits = asTextEdits(cp.additionalTextEdits);\n        if (cp.textEdit) {\n            presentation.textEdit = asTextEdit(cp.textEdit);\n        }\n        return presentation;\n    }\n    function asColorPresentations(colorPresentations) {\n        if (Array.isArray(colorPresentations)) {\n            return colorPresentations.map(asColorPresentation);\n        }\n        return undefined;\n    }\n    function asFoldingRangeKind(kind) {\n        if (kind) {\n            switch (kind) {\n                case ls.FoldingRangeKind.Comment:\n                    return code.FoldingRangeKind.Comment;\n                case ls.FoldingRangeKind.Imports:\n                    return code.FoldingRangeKind.Imports;\n                case ls.FoldingRangeKind.Region:\n                    return code.FoldingRangeKind.Region;\n            }\n        }\n        return undefined;\n    }\n    function asFoldingRange(r) {\n        return new code.FoldingRange(r.startLine, r.endLine, asFoldingRangeKind(r.kind));\n    }\n    function asFoldingRanges(foldingRanges) {\n        if (Array.isArray(foldingRanges)) {\n            return foldingRanges.map(asFoldingRange);\n        }\n        return undefined;\n    }\n    function asSelectionRange(selectionRange) {\n        return new code.SelectionRange(asRange(selectionRange.range), selectionRange.parent ? asSelectionRange(selectionRange.parent) : undefined);\n    }\n    function asSelectionRanges(selectionRanges) {\n        if (!Array.isArray(selectionRanges)) {\n            return [];\n        }\n        let result = [];\n        for (let range of selectionRanges) {\n            result.push(asSelectionRange(range));\n        }\n        return result;\n    }\n    return {\n        asUri,\n        asDiagnostics,\n        asDiagnostic,\n        asRange,\n        asRanges,\n        asPosition,\n        asDiagnosticSeverity,\n        asDiagnosticTag,\n        asHover,\n        asCompletionResult,\n        asCompletionItem,\n        asTextEdit,\n        asTextEdits,\n        asSignatureHelp,\n        asSignatureInformations,\n        asSignatureInformation,\n        asParameterInformations,\n        asParameterInformation,\n        asDeclarationResult,\n        asDefinitionResult,\n        asLocation,\n        asReferences,\n        asDocumentHighlights,\n        asDocumentHighlight,\n        asDocumentHighlightKind,\n        asSymbolKind,\n        asSymbolTag,\n        asSymbolTags,\n        asSymbolInformations,\n        asSymbolInformation,\n        asDocumentSymbols,\n        asDocumentSymbol,\n        asCommand,\n        asCommands,\n        asCodeAction,\n        asCodeActionKind,\n        asCodeActionKinds,\n        asCodeLens,\n        asCodeLenses,\n        asWorkspaceEdit,\n        asDocumentLink,\n        asDocumentLinks,\n        asFoldingRangeKind,\n        asFoldingRange,\n        asFoldingRanges,\n        asColor,\n        asColorInformation,\n        asColorInformations,\n        asColorPresentation,\n        asColorPresentations,\n        asSelectionRange,\n        asSelectionRanges\n    };\n}\nexports.createConverter = createConverter;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass Delayer {\n    constructor(defaultDelay) {\n        this.defaultDelay = defaultDelay;\n        this.timeout = undefined;\n        this.completionPromise = undefined;\n        this.onSuccess = undefined;\n        this.task = undefined;\n    }\n    trigger(task, delay = this.defaultDelay) {\n        this.task = task;\n        if (delay >= 0) {\n            this.cancelTimeout();\n        }\n        if (!this.completionPromise) {\n            this.completionPromise = new Promise((resolve) => {\n                this.onSuccess = resolve;\n            }).then(() => {\n                this.completionPromise = undefined;\n                this.onSuccess = undefined;\n                var result = this.task();\n                this.task = undefined;\n                return result;\n            });\n        }\n        if (delay >= 0 || this.timeout === void 0) {\n            this.timeout = setTimeout(() => {\n                this.timeout = undefined;\n                this.onSuccess(undefined);\n            }, delay >= 0 ? delay : this.defaultDelay);\n        }\n        return this.completionPromise;\n    }\n    forceDelivery() {\n        if (!this.completionPromise) {\n            return undefined;\n        }\n        this.cancelTimeout();\n        let result = this.task();\n        this.completionPromise = undefined;\n        this.onSuccess = undefined;\n        this.task = undefined;\n        return result;\n    }\n    isTriggered() {\n        return this.timeout !== void 0;\n    }\n    cancel() {\n        this.cancelTimeout();\n        this.completionPromise = undefined;\n    }\n    cancelTimeout() {\n        if (this.timeout !== void 0) {\n            clearTimeout(this.timeout);\n            this.timeout = undefined;\n        }\n    }\n}\nexports.Delayer = Delayer;\n", "/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass ValueUUID {\n    constructor(_value) {\n        this._value = _value;\n        // empty\n    }\n    asHex() {\n        return this._value;\n    }\n    equals(other) {\n        return this.asHex() === other.asHex();\n    }\n}\nclass V4UUID extends ValueUUID {\n    constructor() {\n        super([\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            '4',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._oneOf(V4UUID._timeHighBits),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            '-',\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n            V4UUID._randomHex(),\n        ].join(''));\n    }\n    static _oneOf(array) {\n        return array[Math.floor(array.length * Math.random())];\n    }\n    static _randomHex() {\n        return V4UUID._oneOf(V4UUID._chars);\n    }\n}\nV4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\nV4UUID._timeHighBits = ['8', '9', 'a', 'b'];\n/**\n * An empty UUID that contains only zeros.\n */\nexports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');\nfunction v4() {\n    return new V4UUID();\n}\nexports.v4 = v4;\nconst _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nfunction isUUID(value) {\n    return _UUIDPattern.test(value);\n}\nexports.isUUID = isUUID;\n/**\n * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.\n * @param value A uuid string.\n */\nfunction parse(value) {\n    if (!isUUID(value)) {\n        throw new Error('invalid uuid');\n    }\n    return new ValueUUID(value);\n}\nexports.parse = parse;\nfunction generateUuid() {\n    return v4().asHex();\n}\nexports.generateUuid = generateUuid;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst Is = require(\"./utils/is\");\nclass ProgressPart {\n    constructor(_client, _token) {\n        this._client = _client;\n        this._token = _token;\n        this._reported = 0;\n        this._disposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {\n            switch (value.kind) {\n                case 'begin':\n                    this.begin(value);\n                    break;\n                case 'report':\n                    this.report(value);\n                    break;\n                case 'end':\n                    this.done();\n                    break;\n            }\n        });\n    }\n    begin(params) {\n        let location = params.cancellable ? vscode_1.ProgressLocation.Notification : vscode_1.ProgressLocation.Window;\n        vscode_1.window.withProgress({ location, cancellable: params.cancellable, title: params.title }, async (progress, cancellationToken) => {\n            this._progress = progress;\n            this._infinite = params.percentage === undefined;\n            this._cancellationToken = cancellationToken;\n            this._cancellationToken.onCancellationRequested(() => {\n                this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, { token: this._token });\n            });\n            this.report(params);\n            return new Promise((resolve, reject) => {\n                this._resolve = resolve;\n                this._reject = reject;\n            });\n        });\n    }\n    report(params) {\n        if (this._infinite && Is.string(params.message)) {\n            this._progress.report({ message: params.message });\n        }\n        else if (Is.number(params.percentage)) {\n            let percentage = Math.max(0, Math.min(params.percentage, 100));\n            let delta = Math.max(0, percentage - this._reported);\n            this._progress.report({ message: params.message, increment: delta });\n            this._reported += delta;\n        }\n    }\n    cancel() {\n        if (this._disposable) {\n            this._disposable.dispose();\n            this._disposable = undefined;\n        }\n        if (this._reject) {\n            this._reject();\n            this._resolve = undefined;\n            this._reject = undefined;\n        }\n    }\n    done() {\n        if (this._disposable) {\n            this._disposable.dispose();\n            this._disposable = undefined;\n        }\n        if (this._resolve) {\n            this._resolve();\n            this._resolve = undefined;\n            this._reject = undefined;\n        }\n    }\n}\nexports.ProgressPart = ProgressPart;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst c2p = require(\"./codeConverter\");\nconst p2c = require(\"./protocolConverter\");\nconst Is = require(\"./utils/is\");\nconst async_1 = require(\"./utils/async\");\nconst UUID = require(\"./utils/uuid\");\nconst progressPart_1 = require(\"./progressPart\");\n__export(require(\"vscode-languageserver-protocol\"));\nclass ConsoleLogger {\n    error(message) {\n        console.error(message);\n    }\n    warn(message) {\n        console.warn(message);\n    }\n    info(message) {\n        console.info(message);\n    }\n    log(message) {\n        console.log(message);\n    }\n}\nfunction createConnection(input, output, errorHandler, closeHandler) {\n    let logger = new ConsoleLogger();\n    let connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger);\n    connection.onError((data) => { errorHandler(data[0], data[1], data[2]); });\n    connection.onClose(closeHandler);\n    let result = {\n        listen: () => connection.listen(),\n        sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),\n        onRequest: (type, handler) => connection.onRequest(Is.string(type) ? type : type.method, handler),\n        sendNotification: (type, params) => connection.sendNotification(Is.string(type) ? type : type.method, params),\n        onNotification: (type, handler) => connection.onNotification(Is.string(type) ? type : type.method, handler),\n        onProgress: connection.onProgress,\n        sendProgress: connection.sendProgress,\n        trace: (value, tracer, sendNotificationOrTraceOptions) => {\n            const defaultTraceOptions = {\n                sendNotification: false,\n                traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text\n            };\n            if (sendNotificationOrTraceOptions === void 0) {\n                connection.trace(value, tracer, defaultTraceOptions);\n            }\n            else if (Is.boolean(sendNotificationOrTraceOptions)) {\n                connection.trace(value, tracer, sendNotificationOrTraceOptions);\n            }\n            else {\n                connection.trace(value, tracer, sendNotificationOrTraceOptions);\n            }\n        },\n        initialize: (params) => connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params),\n        shutdown: () => connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, undefined),\n        exit: () => connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type),\n        onLogMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, handler),\n        onShowMessage: (handler) => connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, handler),\n        onTelemetry: (handler) => connection.onNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, handler),\n        didChangeConfiguration: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, params),\n        didChangeWatchedFiles: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, params),\n        didOpenTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, params),\n        didChangeTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params),\n        didCloseTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, params),\n        didSaveTextDocument: (params) => connection.sendNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, params),\n        onDiagnostics: (handler) => connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, handler),\n        dispose: () => connection.dispose()\n    };\n    return result;\n}\n/**\n * An action to be performed when the connection is producing errors.\n */\nvar ErrorAction;\n(function (ErrorAction) {\n    /**\n     * Continue running the server.\n     */\n    ErrorAction[ErrorAction[\"Continue\"] = 1] = \"Continue\";\n    /**\n     * Shutdown the server.\n     */\n    ErrorAction[ErrorAction[\"Shutdown\"] = 2] = \"Shutdown\";\n})(ErrorAction = exports.ErrorAction || (exports.ErrorAction = {}));\n/**\n * An action to be performed when the connection to a server got closed.\n */\nvar CloseAction;\n(function (CloseAction) {\n    /**\n     * Don't restart the server. The connection stays closed.\n     */\n    CloseAction[CloseAction[\"DoNotRestart\"] = 1] = \"DoNotRestart\";\n    /**\n     * Restart the server.\n     */\n    CloseAction[CloseAction[\"Restart\"] = 2] = \"Restart\";\n})(CloseAction = exports.CloseAction || (exports.CloseAction = {}));\nclass DefaultErrorHandler {\n    constructor(name) {\n        this.name = name;\n        this.restarts = [];\n    }\n    error(_error, _message, count) {\n        if (count && count <= 3) {\n            return ErrorAction.Continue;\n        }\n        return ErrorAction.Shutdown;\n    }\n    closed() {\n        this.restarts.push(Date.now());\n        if (this.restarts.length < 5) {\n            return CloseAction.Restart;\n        }\n        else {\n            let diff = this.restarts[this.restarts.length - 1] - this.restarts[0];\n            if (diff <= 3 * 60 * 1000) {\n                vscode_1.window.showErrorMessage(`The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`);\n                return CloseAction.DoNotRestart;\n            }\n            else {\n                this.restarts.shift();\n                return CloseAction.Restart;\n            }\n        }\n    }\n}\nvar RevealOutputChannelOn;\n(function (RevealOutputChannelOn) {\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Info\"] = 1] = \"Info\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Warn\"] = 2] = \"Warn\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Error\"] = 3] = \"Error\";\n    RevealOutputChannelOn[RevealOutputChannelOn[\"Never\"] = 4] = \"Never\";\n})(RevealOutputChannelOn = exports.RevealOutputChannelOn || (exports.RevealOutputChannelOn = {}));\nvar State;\n(function (State) {\n    State[State[\"Stopped\"] = 1] = \"Stopped\";\n    State[State[\"Starting\"] = 3] = \"Starting\";\n    State[State[\"Running\"] = 2] = \"Running\";\n})(State = exports.State || (exports.State = {}));\nvar ClientState;\n(function (ClientState) {\n    ClientState[ClientState[\"Initial\"] = 0] = \"Initial\";\n    ClientState[ClientState[\"Starting\"] = 1] = \"Starting\";\n    ClientState[ClientState[\"StartFailed\"] = 2] = \"StartFailed\";\n    ClientState[ClientState[\"Running\"] = 3] = \"Running\";\n    ClientState[ClientState[\"Stopping\"] = 4] = \"Stopping\";\n    ClientState[ClientState[\"Stopped\"] = 5] = \"Stopped\";\n})(ClientState || (ClientState = {}));\nconst SupportedSymbolKinds = [\n    vscode_languageserver_protocol_1.SymbolKind.File,\n    vscode_languageserver_protocol_1.SymbolKind.Module,\n    vscode_languageserver_protocol_1.SymbolKind.Namespace,\n    vscode_languageserver_protocol_1.SymbolKind.Package,\n    vscode_languageserver_protocol_1.SymbolKind.Class,\n    vscode_languageserver_protocol_1.SymbolKind.Method,\n    vscode_languageserver_protocol_1.SymbolKind.Property,\n    vscode_languageserver_protocol_1.SymbolKind.Field,\n    vscode_languageserver_protocol_1.SymbolKind.Constructor,\n    vscode_languageserver_protocol_1.SymbolKind.Enum,\n    vscode_languageserver_protocol_1.SymbolKind.Interface,\n    vscode_languageserver_protocol_1.SymbolKind.Function,\n    vscode_languageserver_protocol_1.SymbolKind.Variable,\n    vscode_languageserver_protocol_1.SymbolKind.Constant,\n    vscode_languageserver_protocol_1.SymbolKind.String,\n    vscode_languageserver_protocol_1.SymbolKind.Number,\n    vscode_languageserver_protocol_1.SymbolKind.Boolean,\n    vscode_languageserver_protocol_1.SymbolKind.Array,\n    vscode_languageserver_protocol_1.SymbolKind.Object,\n    vscode_languageserver_protocol_1.SymbolKind.Key,\n    vscode_languageserver_protocol_1.SymbolKind.Null,\n    vscode_languageserver_protocol_1.SymbolKind.EnumMember,\n    vscode_languageserver_protocol_1.SymbolKind.Struct,\n    vscode_languageserver_protocol_1.SymbolKind.Event,\n    vscode_languageserver_protocol_1.SymbolKind.Operator,\n    vscode_languageserver_protocol_1.SymbolKind.TypeParameter\n];\nconst SupportedCompletionItemKinds = [\n    vscode_languageserver_protocol_1.CompletionItemKind.Text,\n    vscode_languageserver_protocol_1.CompletionItemKind.Method,\n    vscode_languageserver_protocol_1.CompletionItemKind.Function,\n    vscode_languageserver_protocol_1.CompletionItemKind.Constructor,\n    vscode_languageserver_protocol_1.CompletionItemKind.Field,\n    vscode_languageserver_protocol_1.CompletionItemKind.Variable,\n    vscode_languageserver_protocol_1.CompletionItemKind.Class,\n    vscode_languageserver_protocol_1.CompletionItemKind.Interface,\n    vscode_languageserver_protocol_1.CompletionItemKind.Module,\n    vscode_languageserver_protocol_1.CompletionItemKind.Property,\n    vscode_languageserver_protocol_1.CompletionItemKind.Unit,\n    vscode_languageserver_protocol_1.CompletionItemKind.Value,\n    vscode_languageserver_protocol_1.CompletionItemKind.Enum,\n    vscode_languageserver_protocol_1.CompletionItemKind.Keyword,\n    vscode_languageserver_protocol_1.CompletionItemKind.Snippet,\n    vscode_languageserver_protocol_1.CompletionItemKind.Color,\n    vscode_languageserver_protocol_1.CompletionItemKind.File,\n    vscode_languageserver_protocol_1.CompletionItemKind.Reference,\n    vscode_languageserver_protocol_1.CompletionItemKind.Folder,\n    vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,\n    vscode_languageserver_protocol_1.CompletionItemKind.Constant,\n    vscode_languageserver_protocol_1.CompletionItemKind.Struct,\n    vscode_languageserver_protocol_1.CompletionItemKind.Event,\n    vscode_languageserver_protocol_1.CompletionItemKind.Operator,\n    vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter\n];\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar DynamicFeature;\n(function (DynamicFeature) {\n    function is(value) {\n        let candidate = value;\n        return candidate && Is.func(candidate.register) && Is.func(candidate.unregister) && Is.func(candidate.dispose) && candidate.messages !== void 0;\n    }\n    DynamicFeature.is = is;\n})(DynamicFeature || (DynamicFeature = {}));\nclass DocumentNotifiactions {\n    constructor(_client, _event, _type, _middleware, _createParams, _selectorFilter) {\n        this._client = _client;\n        this._event = _event;\n        this._type = _type;\n        this._middleware = _middleware;\n        this._createParams = _createParams;\n        this._selectorFilter = _selectorFilter;\n        this._selectors = new Map();\n    }\n    static textDocumentFilter(selectors, textDocument) {\n        for (const selector of selectors) {\n            if (vscode_1.languages.match(selector, textDocument)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    register(_message, data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = this._event(this.callback, this);\n        }\n        this._selectors.set(data.id, data.registerOptions.documentSelector);\n    }\n    callback(data) {\n        if (!this._selectorFilter || this._selectorFilter(this._selectors.values(), data)) {\n            if (this._middleware) {\n                this._middleware(data, (data) => this._client.sendNotification(this._type, this._createParams(data)));\n            }\n            else {\n                this._client.sendNotification(this._type, this._createParams(data));\n            }\n            this.notificationSent(data);\n        }\n    }\n    notificationSent(_data) {\n    }\n    unregister(id) {\n        this._selectors.delete(id);\n        if (this._selectors.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    dispose() {\n        this._selectors.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    getProvider(document) {\n        for (const selector of this._selectors.values()) {\n            if (vscode_1.languages.match(selector, document)) {\n                return {\n                    send: (data) => {\n                        this.callback(data);\n                    }\n                };\n            }\n        }\n        throw new Error(`No provider available for the given text document`);\n    }\n}\nclass DidOpenTextDocumentFeature extends DocumentNotifiactions {\n    constructor(client, _syncedDocuments) {\n        super(client, vscode_1.workspace.onDidOpenTextDocument, vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, client.clientOptions.middleware.didOpen, (textDocument) => client.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);\n        this._syncedDocuments = _syncedDocuments;\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {\n            this.register(this.messages, { id: UUID.generateUuid(), registerOptions: { documentSelector: documentSelector } });\n        }\n    }\n    register(message, data) {\n        super.register(message, data);\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        let documentSelector = data.registerOptions.documentSelector;\n        vscode_1.workspace.textDocuments.forEach((textDocument) => {\n            let uri = textDocument.uri.toString();\n            if (this._syncedDocuments.has(uri)) {\n                return;\n            }\n            if (vscode_1.languages.match(documentSelector, textDocument)) {\n                let middleware = this._client.clientOptions.middleware;\n                let didOpen = (textDocument) => {\n                    this._client.sendNotification(this._type, this._createParams(textDocument));\n                };\n                if (middleware.didOpen) {\n                    middleware.didOpen(textDocument, didOpen);\n                }\n                else {\n                    didOpen(textDocument);\n                }\n                this._syncedDocuments.set(uri, textDocument);\n            }\n        });\n    }\n    notificationSent(textDocument) {\n        super.notificationSent(textDocument);\n        this._syncedDocuments.set(textDocument.uri.toString(), textDocument);\n    }\n}\nclass DidCloseTextDocumentFeature extends DocumentNotifiactions {\n    constructor(client, _syncedDocuments) {\n        super(client, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, client.clientOptions.middleware.didClose, (textDocument) => client.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), DocumentNotifiactions.textDocumentFilter);\n        this._syncedDocuments = _syncedDocuments;\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {\n            this.register(this.messages, { id: UUID.generateUuid(), registerOptions: { documentSelector: documentSelector } });\n        }\n    }\n    notificationSent(textDocument) {\n        super.notificationSent(textDocument);\n        this._syncedDocuments.delete(textDocument.uri.toString());\n    }\n    unregister(id) {\n        let selector = this._selectors.get(id);\n        // The super call removed the selector from the map\n        // of selectors.\n        super.unregister(id);\n        let selectors = this._selectors.values();\n        this._syncedDocuments.forEach((textDocument) => {\n            if (vscode_1.languages.match(selector, textDocument) && !this._selectorFilter(selectors, textDocument)) {\n                let middleware = this._client.clientOptions.middleware;\n                let didClose = (textDocument) => {\n                    this._client.sendNotification(this._type, this._createParams(textDocument));\n                };\n                this._syncedDocuments.delete(textDocument.uri.toString());\n                if (middleware.didClose) {\n                    middleware.didClose(textDocument, didClose);\n                }\n                else {\n                    didClose(textDocument);\n                }\n            }\n        });\n    }\n}\nclass DidChangeTextDocumentFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._changeData = new Map();\n        this._forcingDelivery = false;\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== void 0 && textDocumentSyncOptions.change !== vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: Object.assign({}, { documentSelector: documentSelector }, { syncKind: textDocumentSyncOptions.change })\n            });\n        }\n    }\n    register(_message, data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = vscode_1.workspace.onDidChangeTextDocument(this.callback, this);\n        }\n        this._changeData.set(data.id, {\n            documentSelector: data.registerOptions.documentSelector,\n            syncKind: data.registerOptions.syncKind\n        });\n    }\n    callback(event) {\n        // Text document changes are send for dirty changes as well. We don't\n        // have dirty / undirty events in the LSP so we ignore content changes\n        // with length zero.\n        if (event.contentChanges.length === 0) {\n            return;\n        }\n        for (const changeData of this._changeData.values()) {\n            if (vscode_1.languages.match(changeData.documentSelector, event.document)) {\n                let middleware = this._client.clientOptions.middleware;\n                if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental) {\n                    let params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event);\n                    if (middleware.didChange) {\n                        middleware.didChange(event, () => this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params));\n                    }\n                    else {\n                        this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);\n                    }\n                }\n                else if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {\n                    let didChange = (event) => {\n                        if (this._changeDelayer) {\n                            if (this._changeDelayer.uri !== event.document.uri.toString()) {\n                                // Use this force delivery to track boolean state. Otherwise we might call two times.\n                                this.forceDelivery();\n                                this._changeDelayer.uri = event.document.uri.toString();\n                            }\n                            this._changeDelayer.delayer.trigger(() => {\n                                this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event.document));\n                            });\n                        }\n                        else {\n                            this._changeDelayer = {\n                                uri: event.document.uri.toString(),\n                                delayer: new async_1.Delayer(200)\n                            };\n                            this._changeDelayer.delayer.trigger(() => {\n                                this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, this._client.code2ProtocolConverter.asChangeTextDocumentParams(event.document));\n                            }, -1);\n                        }\n                    };\n                    if (middleware.didChange) {\n                        middleware.didChange(event, didChange);\n                    }\n                    else {\n                        didChange(event);\n                    }\n                }\n            }\n        }\n    }\n    unregister(id) {\n        this._changeData.delete(id);\n        if (this._changeData.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    dispose() {\n        this._changeDelayer = undefined;\n        this._forcingDelivery = false;\n        this._changeData.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    forceDelivery() {\n        if (this._forcingDelivery || !this._changeDelayer) {\n            return;\n        }\n        try {\n            this._forcingDelivery = true;\n            this._changeDelayer.delayer.forceDelivery();\n        }\n        finally {\n            this._forcingDelivery = false;\n        }\n    }\n    getProvider(document) {\n        for (const changeData of this._changeData.values()) {\n            if (vscode_1.languages.match(changeData.documentSelector, document)) {\n                return {\n                    send: (event) => {\n                        this.callback(event);\n                    }\n                };\n            }\n        }\n        throw new Error(`No provider available for the given text document`);\n    }\n}\nclass WillSaveFeature extends DocumentNotifiactions {\n    constructor(client) {\n        super(client, vscode_1.workspace.onWillSaveTextDocument, vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, client.clientOptions.middleware.willSave, (willSaveEvent) => client.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (selectors, willSaveEvent) => DocumentNotifiactions.textDocumentFilter(selectors, willSaveEvent.document));\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        let value = ensure(ensure(capabilities, 'textDocument'), 'synchronization');\n        value.willSave = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: { documentSelector: documentSelector }\n            });\n        }\n    }\n}\nclass WillSaveWaitUntilFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._selectors = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type;\n    }\n    fillClientCapabilities(capabilities) {\n        let value = ensure(ensure(capabilities, 'textDocument'), 'synchronization');\n        value.willSaveWaitUntil = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: { documentSelector: documentSelector }\n            });\n        }\n    }\n    register(_message, data) {\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        if (!this._listener) {\n            this._listener = vscode_1.workspace.onWillSaveTextDocument(this.callback, this);\n        }\n        this._selectors.set(data.id, data.registerOptions.documentSelector);\n    }\n    callback(event) {\n        if (DocumentNotifiactions.textDocumentFilter(this._selectors.values(), event.document)) {\n            let middleware = this._client.clientOptions.middleware;\n            let willSaveWaitUntil = (event) => {\n                return this._client.sendRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, this._client.code2ProtocolConverter.asWillSaveTextDocumentParams(event)).then((edits) => {\n                    let vEdits = this._client.protocol2CodeConverter.asTextEdits(edits);\n                    return vEdits === void 0 ? [] : vEdits;\n                });\n            };\n            event.waitUntil(middleware.willSaveWaitUntil\n                ? middleware.willSaveWaitUntil(event, willSaveWaitUntil)\n                : willSaveWaitUntil(event));\n        }\n    }\n    unregister(id) {\n        this._selectors.delete(id);\n        if (this._selectors.size === 0 && this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n    dispose() {\n        this._selectors.clear();\n        if (this._listener) {\n            this._listener.dispose();\n            this._listener = undefined;\n        }\n    }\n}\nclass DidSaveTextDocumentFeature extends DocumentNotifiactions {\n    constructor(client) {\n        super(client, vscode_1.workspace.onDidSaveTextDocument, vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, client.clientOptions.middleware.didSave, (textDocument) => client.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), DocumentNotifiactions.textDocumentFilter);\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'textDocument'), 'synchronization').didSave = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;\n        if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: Object.assign({}, { documentSelector: documentSelector }, { includeText: !!textDocumentSyncOptions.save.includeText })\n            });\n        }\n    }\n    register(method, data) {\n        this._includeText = !!data.registerOptions.includeText;\n        super.register(method, data);\n    }\n}\nclass FileSystemWatcherFeature {\n    constructor(_client, _notifyFileEvent) {\n        this._client = _client;\n        this._notifyFileEvent = _notifyFileEvent;\n        this._watchers = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'workspace'), 'didChangeWatchedFiles').dynamicRegistration = true;\n    }\n    initialize(_capabilities, _documentSelector) {\n    }\n    register(_method, data) {\n        if (!Array.isArray(data.registerOptions.watchers)) {\n            return;\n        }\n        let disposeables = [];\n        for (let watcher of data.registerOptions.watchers) {\n            if (!Is.string(watcher.globPattern)) {\n                continue;\n            }\n            let watchCreate = true, watchChange = true, watchDelete = true;\n            if (watcher.kind !== void 0 && watcher.kind !== null) {\n                watchCreate = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Create) !== 0;\n                watchChange = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Change) !== 0;\n                watchDelete = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Delete) !== 0;\n            }\n            let fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher(watcher.globPattern, !watchCreate, !watchChange, !watchDelete);\n            this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete);\n            disposeables.push(fileSystemWatcher);\n        }\n        this._watchers.set(data.id, disposeables);\n    }\n    registerRaw(id, fileSystemWatchers) {\n        let disposeables = [];\n        for (let fileSystemWatcher of fileSystemWatchers) {\n            this.hookListeners(fileSystemWatcher, true, true, true, disposeables);\n        }\n        this._watchers.set(id, disposeables);\n    }\n    hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {\n        if (watchCreate) {\n            fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Created\n            }), null, listeners);\n        }\n        if (watchChange) {\n            fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Changed\n            }), null, listeners);\n        }\n        if (watchDelete) {\n            fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({\n                uri: this._client.code2ProtocolConverter.asUri(resource),\n                type: vscode_languageserver_protocol_1.FileChangeType.Deleted\n            }), null, listeners);\n        }\n    }\n    unregister(id) {\n        let disposeables = this._watchers.get(id);\n        if (disposeables) {\n            for (let disposable of disposeables) {\n                disposable.dispose();\n            }\n        }\n    }\n    dispose() {\n        this._watchers.forEach((disposeables) => {\n            for (let disposable of disposeables) {\n                disposable.dispose();\n            }\n        });\n        this._watchers.clear();\n    }\n}\nclass TextDocumentFeature {\n    constructor(_client, _message) {\n        this._client = _client;\n        this._message = _message;\n        this._registrations = new Map();\n    }\n    get messages() {\n        return this._message;\n    }\n    register(message, data) {\n        if (message.method !== this.messages.method) {\n            throw new Error(`Register called on wrong feature. Requested ${message.method} but reached feature ${this.messages.method}`);\n        }\n        if (!data.registerOptions.documentSelector) {\n            return;\n        }\n        let registration = this.registerLanguageProvider(data.registerOptions);\n        this._registrations.set(data.id, { disposable: registration[0], data, provider: registration[1] });\n    }\n    unregister(id) {\n        let registration = this._registrations.get(id);\n        if (registration !== undefined) {\n            registration.disposable.dispose();\n        }\n    }\n    dispose() {\n        this._registrations.forEach((value) => {\n            value.disposable.dispose();\n        });\n        this._registrations.clear();\n    }\n    getRegistration(documentSelector, capability) {\n        if (!capability) {\n            return [undefined, undefined];\n        }\n        else if (vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is(capability)) {\n            const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();\n            const selector = capability.documentSelector || documentSelector;\n            if (selector) {\n                return [id, Object.assign({}, capability, { documentSelector: selector })];\n            }\n        }\n        else if (Is.boolean(capability) && capability === true || vscode_languageserver_protocol_1.WorkDoneProgressOptions.is(capability)) {\n            if (!documentSelector) {\n                return [undefined, undefined];\n            }\n            let options = (Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector }));\n            return [UUID.generateUuid(), options];\n        }\n        return [undefined, undefined];\n    }\n    getRegistrationOptions(documentSelector, capability) {\n        if (!documentSelector || !capability) {\n            return undefined;\n        }\n        return (Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector }));\n    }\n    getProvider(textDocument) {\n        for (const registration of this._registrations.values()) {\n            let selector = registration.data.registerOptions.documentSelector;\n            if (selector !== null && vscode_1.languages.match(selector, textDocument)) {\n                return registration.provider;\n            }\n        }\n        throw new Error(`The feature has no registration for the provided text document ${textDocument.uri.toString()}`);\n    }\n}\nexports.TextDocumentFeature = TextDocumentFeature;\nclass WorkspaceFeature {\n    constructor(_client, _message) {\n        this._client = _client;\n        this._message = _message;\n        this._registrations = new Map();\n    }\n    get messages() {\n        return this._message;\n    }\n    register(message, data) {\n        if (message.method !== this.messages.method) {\n            throw new Error(`Register called on wron feature. Requested ${message.method} but reached feature ${this.messages.method}`);\n        }\n        const registration = this.registerLanguageProvider(data.registerOptions);\n        this._registrations.set(data.id, { disposable: registration[0], provider: registration[1] });\n    }\n    unregister(id) {\n        let registration = this._registrations.get(id);\n        if (registration !== undefined) {\n            registration.disposable.dispose();\n        }\n    }\n    dispose() {\n        this._registrations.forEach((registration) => {\n            registration.disposable.dispose();\n        });\n        this._registrations.clear();\n    }\n    getProviders() {\n        const result = [];\n        for (const registration of this._registrations.values()) {\n            result.push(registration.provider);\n        }\n        return result;\n    }\n}\nclass CompletionItemFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CompletionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let completion = ensure(ensure(capabilites, 'textDocument'), 'completion');\n        completion.dynamicRegistration = true;\n        completion.contextSupport = true;\n        completion.completionItem = {\n            snippetSupport: true,\n            commitCharactersSupport: true,\n            documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],\n            deprecatedSupport: true,\n            preselectSupport: true,\n            tagSupport: { valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated] }\n        };\n        completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const triggerCharacters = options.triggerCharacters || [];\n        const provider = {\n            provideCompletionItems: (document, position, token, context) => {\n                const client = this._client;\n                const middleware = this._client.clientOptions.middleware;\n                const provideCompletionItems = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, client.code2ProtocolConverter.asCompletionParams(document, position, context), token).then(client.protocol2CodeConverter.asCompletionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.CompletionRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                return middleware.provideCompletionItem\n                    ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems)\n                    : provideCompletionItems(document, position, context, token);\n            },\n            resolveCompletionItem: options.resolveProvider\n                ? (item, token) => {\n                    const client = this._client;\n                    const middleware = this._client.clientOptions.middleware;\n                    const resolveCompletionItem = (item, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, client.code2ProtocolConverter.asCompletionItem(item), token).then(client.protocol2CodeConverter.asCompletionItem, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, error);\n                            return Promise.resolve(item);\n                        });\n                    };\n                    return middleware.resolveCompletionItem\n                        ? middleware.resolveCompletionItem(item, token, resolveCompletionItem)\n                        : resolveCompletionItem(item, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCompletionItemProvider(options.documentSelector, provider, ...triggerCharacters), provider];\n    }\n}\nclass HoverFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.HoverRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const hoverCapability = (ensure(ensure(capabilites, 'textDocument'), 'hover'));\n        hoverCapability.dynamicRegistration = true;\n        hoverCapability.contentFormat = [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText];\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideHover: (document, position, token) => {\n                const client = this._client;\n                const provideHover = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asHover, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.HoverRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideHover\n                    ? middleware.provideHover(document, position, token, provideHover)\n                    : provideHover(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerHoverProvider(options.documentSelector, provider), provider];\n    }\n}\nclass SignatureHelpFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SignatureHelpRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let config = ensure(ensure(capabilites, 'textDocument'), 'signatureHelp');\n        config.dynamicRegistration = true;\n        config.signatureInformation = { documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText] };\n        config.signatureInformation.parameterInformation = { labelOffsetSupport: true };\n        config.contextSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: options\n        });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideSignatureHelp: (document, position, token, context) => {\n                const client = this._client;\n                const providerSignatureHelp = (document, position, context, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, client.code2ProtocolConverter.asSignatureHelpParams(document, position, context), token).then(client.protocol2CodeConverter.asSignatureHelp, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideSignatureHelp\n                    ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp)\n                    : providerSignatureHelp(document, position, context, token);\n            }\n        };\n        let disposable;\n        if (options.retriggerCharacters === undefined) {\n            const triggerCharacters = options.triggerCharacters || [];\n            disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, ...triggerCharacters);\n        }\n        else {\n            const metaData = {\n                triggerCharacters: options.triggerCharacters || [],\n                retriggerCharacters: options.retriggerCharacters || []\n            };\n            disposable = vscode_1.languages.registerSignatureHelpProvider(options.documentSelector, provider, metaData);\n        }\n        return [disposable, provider];\n    }\n}\nclass DefinitionFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DefinitionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let definitionSupport = ensure(ensure(capabilites, 'textDocument'), 'definition');\n        definitionSupport.dynamicRegistration = true;\n        definitionSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDefinition: (document, position, token) => {\n                const client = this._client;\n                const provideDefinition = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDefinitionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDefinition\n                    ? middleware.provideDefinition(document, position, token, provideDefinition)\n                    : provideDefinition(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDefinitionProvider(options.documentSelector, provider), provider];\n    }\n}\nclass ReferencesFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.ReferencesRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'references').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideReferences: (document, position, options, token) => {\n                const client = this._client;\n                const _providerReferences = (document, position, options, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, client.code2ProtocolConverter.asReferenceParams(document, position, options), token).then(client.protocol2CodeConverter.asReferences, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideReferences\n                    ? middleware.provideReferences(document, position, options, token, _providerReferences)\n                    : _providerReferences(document, position, options, token);\n            }\n        };\n        return [vscode_1.languages.registerReferenceProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentHighlightFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentHighlightRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'documentHighlight').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentHighlights: (document, position, token) => {\n                const client = this._client;\n                const _provideDocumentHighlights = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDocumentHighlights, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentHighlights\n                    ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights)\n                    : _provideDocumentHighlights(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentHighlightProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentSymbolFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentSymbolRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let symbolCapabilities = ensure(ensure(capabilites, 'textDocument'), 'documentSymbol');\n        symbolCapabilities.dynamicRegistration = true;\n        symbolCapabilities.symbolKind = {\n            valueSet: SupportedSymbolKinds\n        };\n        symbolCapabilities.hierarchicalDocumentSymbolSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentSymbols: (document, token) => {\n                const client = this._client;\n                const _provideDocumentSymbols = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document), token).then((data) => {\n                        if (data === null) {\n                            return undefined;\n                        }\n                        if (data.length === 0) {\n                            return [];\n                        }\n                        else {\n                            let element = data[0];\n                            if (vscode_languageserver_protocol_1.DocumentSymbol.is(element)) {\n                                return client.protocol2CodeConverter.asDocumentSymbols(data);\n                            }\n                            else {\n                                return client.protocol2CodeConverter.asSymbolInformations(data);\n                            }\n                        }\n                    }, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentSymbols\n                    ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols)\n                    : _provideDocumentSymbols(document, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentSymbolProvider(options.documentSelector, provider), provider];\n    }\n}\nclass WorkspaceSymbolFeature extends WorkspaceFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let symbolCapabilities = ensure(ensure(capabilites, 'workspace'), 'symbol');\n        symbolCapabilities.dynamicRegistration = true;\n        symbolCapabilities.symbolKind = {\n            valueSet: SupportedSymbolKinds\n        };\n    }\n    initialize(capabilities) {\n        if (!capabilities.workspaceSymbolProvider) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: capabilities.workspaceSymbolProvider === true ? { workDoneProgress: false } : capabilities.workspaceSymbolProvider\n        });\n    }\n    registerLanguageProvider(_options) {\n        const provider = {\n            provideWorkspaceSymbols: (query, token) => {\n                const client = this._client;\n                const provideWorkspaceSymbols = (query, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, { query }, token).then(client.protocol2CodeConverter.asSymbolInformations, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideWorkspaceSymbols\n                    ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols)\n                    : provideWorkspaceSymbols(query, token);\n            }\n        };\n        return [vscode_1.languages.registerWorkspaceSymbolProvider(provider), provider];\n    }\n}\nclass CodeActionFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CodeActionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const cap = ensure(ensure(capabilites, 'textDocument'), 'codeAction');\n        cap.dynamicRegistration = true;\n        cap.isPreferredSupport = true;\n        cap.codeActionLiteralSupport = {\n            codeActionKind: {\n                valueSet: [\n                    vscode_languageserver_protocol_1.CodeActionKind.Empty,\n                    vscode_languageserver_protocol_1.CodeActionKind.QuickFix,\n                    vscode_languageserver_protocol_1.CodeActionKind.Refactor,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorInline,\n                    vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite,\n                    vscode_languageserver_protocol_1.CodeActionKind.Source,\n                    vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports\n                ]\n            }\n        };\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideCodeActions: (document, range, context, token) => {\n                const client = this._client;\n                const _provideCodeActions = (document, range, context, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(range),\n                        context: client.code2ProtocolConverter.asCodeActionContext(context)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, params, token).then((values) => {\n                        if (values === null) {\n                            return undefined;\n                        }\n                        const result = [];\n                        for (let item of values) {\n                            if (vscode_languageserver_protocol_1.Command.is(item)) {\n                                result.push(client.protocol2CodeConverter.asCommand(item));\n                            }\n                            else {\n                                result.push(client.protocol2CodeConverter.asCodeAction(item));\n                            }\n                        }\n                        return result;\n                    }, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideCodeActions\n                    ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions)\n                    : _provideCodeActions(document, range, context, token);\n            }\n        };\n        return [vscode_1.languages.registerCodeActionsProvider(options.documentSelector, provider, (options.codeActionKinds\n                ? { providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds) }\n                : undefined)), provider];\n    }\n}\nclass CodeLensFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.CodeLensRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'codeLens').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideCodeLenses: (document, token) => {\n                const client = this._client;\n                const provideCodeLenses = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, client.code2ProtocolConverter.asCodeLensParams(document), token).then(client.protocol2CodeConverter.asCodeLenses, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideCodeLenses\n                    ? middleware.provideCodeLenses(document, token, provideCodeLenses)\n                    : provideCodeLenses(document, token);\n            },\n            resolveCodeLens: (options.resolveProvider)\n                ? (codeLens, token) => {\n                    const client = this._client;\n                    const resolveCodeLens = (codeLens, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, client.code2ProtocolConverter.asCodeLens(codeLens), token).then(client.protocol2CodeConverter.asCodeLens, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, error);\n                            return codeLens;\n                        });\n                    };\n                    const middleware = client.clientOptions.middleware;\n                    return middleware.resolveCodeLens\n                        ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens)\n                        : resolveCodeLens(codeLens, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerCodeLensProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentFormattingFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'formatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentFormattingEdits: (document, options, token) => {\n                const client = this._client;\n                const provideDocumentFormattingEdits = (document, options, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, params, token).then(client.protocol2CodeConverter.asTextEdits, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentFormattingEdits\n                    ? middleware.provideDocumentFormattingEdits(document, options, token, provideDocumentFormattingEdits)\n                    : provideDocumentFormattingEdits(document, options, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentFormattingEditProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentRangeFormattingFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'rangeFormatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentRangeFormattingEdits: (document, range, options, token) => {\n                const client = this._client;\n                const provideDocumentRangeFormattingEdits = (document, range, options, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        range: client.code2ProtocolConverter.asRange(range),\n                        options: client.code2ProtocolConverter.asFormattingOptions(options)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, params, token).then(client.protocol2CodeConverter.asTextEdits, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                let middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentRangeFormattingEdits\n                    ? middleware.provideDocumentRangeFormattingEdits(document, range, options, token, provideDocumentRangeFormattingEdits)\n                    : provideDocumentRangeFormattingEdits(document, range, options, token);\n            }\n        };\n        return [vscode_1.languages.registerDocumentRangeFormattingEditProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentOnTypeFormattingFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'onTypeFormatting').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideOnTypeFormattingEdits: (document, position, ch, options, token) => {\n                const client = this._client;\n                const provideOnTypeFormattingEdits = (document, position, ch, options, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        position: client.code2ProtocolConverter.asPosition(position),\n                        ch: ch,\n                        options: client.code2ProtocolConverter.asFormattingOptions(options)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, params, token).then(client.protocol2CodeConverter.asTextEdits, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideOnTypeFormattingEdits\n                    ? middleware.provideOnTypeFormattingEdits(document, position, ch, options, token, provideOnTypeFormattingEdits)\n                    : provideOnTypeFormattingEdits(document, position, ch, options, token);\n            }\n        };\n        const moreTriggerCharacter = options.moreTriggerCharacter || [];\n        return [vscode_1.languages.registerOnTypeFormattingEditProvider(options.documentSelector, provider, options.firstTriggerCharacter, ...moreTriggerCharacter), provider];\n    }\n}\nclass RenameFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.RenameRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let rename = ensure(ensure(capabilites, 'textDocument'), 'rename');\n        rename.dynamicRegistration = true;\n        rename.prepareSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);\n        if (!options) {\n            return;\n        }\n        if (Is.boolean(capabilities.renameProvider)) {\n            options.prepareProvider = false;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideRenameEdits: (document, position, newName, token) => {\n                const client = this._client;\n                const provideRenameEdits = (document, position, newName, token) => {\n                    let params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        position: client.code2ProtocolConverter.asPosition(position),\n                        newName: newName\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.RenameRequest.type, params, token).then(client.protocol2CodeConverter.asWorkspaceEdit, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.RenameRequest.type, error);\n                        return Promise.reject(new Error(error.message));\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideRenameEdits\n                    ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits)\n                    : provideRenameEdits(document, position, newName, token);\n            },\n            prepareRename: options.prepareProvider\n                ? (document, position, token) => {\n                    const client = this._client;\n                    const prepareRename = (document, position, token) => {\n                        let params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            position: client.code2ProtocolConverter.asPosition(position),\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, params, token).then((result) => {\n                            if (vscode_languageserver_protocol_1.Range.is(result)) {\n                                return client.protocol2CodeConverter.asRange(result);\n                            }\n                            else if (result && vscode_languageserver_protocol_1.Range.is(result.range)) {\n                                return {\n                                    range: client.protocol2CodeConverter.asRange(result.range),\n                                    placeholder: result.placeholder\n                                };\n                            }\n                            // To cancel the rename vscode API expects a rejected promise.\n                            return Promise.reject(new Error(`The element can't be renamed.`));\n                        }, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, error);\n                            return Promise.reject(new Error(error.message));\n                        });\n                    };\n                    const middleware = client.clientOptions.middleware;\n                    return middleware.prepareRename\n                        ? middleware.prepareRename(document, position, token, prepareRename)\n                        : prepareRename(document, position, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerRenameProvider(options.documentSelector, provider), provider];\n    }\n}\nclass DocumentLinkFeature extends TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentLinkRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const documentLinkCapabilities = ensure(ensure(capabilites, 'textDocument'), 'documentLink');\n        documentLinkCapabilities.dynamicRegistration = true;\n        documentLinkCapabilities.tooltipSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);\n        if (!options) {\n            return;\n        }\n        this.register(this.messages, { id: UUID.generateUuid(), registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDocumentLinks: (document, token) => {\n                const client = this._client;\n                const provideDocumentLinks = (document, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, client.code2ProtocolConverter.asDocumentLinkParams(document), token).then(client.protocol2CodeConverter.asDocumentLinks, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, error);\n                        return Promise.resolve([]);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentLinks\n                    ? middleware.provideDocumentLinks(document, token, provideDocumentLinks)\n                    : provideDocumentLinks(document, token);\n            },\n            resolveDocumentLink: options.resolveProvider\n                ? (link, token) => {\n                    const client = this._client;\n                    let resolveDocumentLink = (link, token) => {\n                        return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, client.code2ProtocolConverter.asDocumentLink(link), token).then(client.protocol2CodeConverter.asDocumentLink, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, error);\n                            return Promise.resolve(link);\n                        });\n                    };\n                    const middleware = client.clientOptions.middleware;\n                    return middleware.resolveDocumentLink\n                        ? middleware.resolveDocumentLink(link, token, resolveDocumentLink)\n                        : resolveDocumentLink(link, token);\n                }\n                : undefined\n        };\n        return [vscode_1.languages.registerDocumentLinkProvider(options.documentSelector, provider), provider];\n    }\n}\nclass ConfigurationFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._listeners = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'workspace'), 'didChangeConfiguration').dynamicRegistration = true;\n    }\n    initialize() {\n        let section = this._client.clientOptions.synchronize.configurationSection;\n        if (section !== void 0) {\n            this.register(this.messages, {\n                id: UUID.generateUuid(),\n                registerOptions: {\n                    section: section\n                }\n            });\n        }\n    }\n    register(_message, data) {\n        let disposable = vscode_1.workspace.onDidChangeConfiguration((event) => {\n            this.onDidChangeConfiguration(data.registerOptions.section, event);\n        });\n        this._listeners.set(data.id, disposable);\n        if (data.registerOptions.section !== void 0) {\n            this.onDidChangeConfiguration(data.registerOptions.section, undefined);\n        }\n    }\n    unregister(id) {\n        let disposable = this._listeners.get(id);\n        if (disposable) {\n            this._listeners.delete(id);\n            disposable.dispose();\n        }\n    }\n    dispose() {\n        for (let disposable of this._listeners.values()) {\n            disposable.dispose();\n        }\n        this._listeners.clear();\n    }\n    onDidChangeConfiguration(configurationSection, event) {\n        let sections;\n        if (Is.string(configurationSection)) {\n            sections = [configurationSection];\n        }\n        else {\n            sections = configurationSection;\n        }\n        if (sections !== void 0 && event !== void 0) {\n            let affected = sections.some((section) => event.affectsConfiguration(section));\n            if (!affected) {\n                return;\n            }\n        }\n        let didChangeConfiguration = (sections) => {\n            if (sections === void 0) {\n                this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: null });\n                return;\n            }\n            this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: this.extractSettingsInformation(sections) });\n        };\n        let middleware = this.getMiddleware();\n        middleware\n            ? middleware(sections, didChangeConfiguration)\n            : didChangeConfiguration(sections);\n    }\n    extractSettingsInformation(keys) {\n        function ensurePath(config, path) {\n            let current = config;\n            for (let i = 0; i < path.length - 1; i++) {\n                let obj = current[path[i]];\n                if (!obj) {\n                    obj = Object.create(null);\n                    current[path[i]] = obj;\n                }\n                current = obj;\n            }\n            return current;\n        }\n        let resource = this._client.clientOptions.workspaceFolder\n            ? this._client.clientOptions.workspaceFolder.uri\n            : undefined;\n        let result = Object.create(null);\n        for (let i = 0; i < keys.length; i++) {\n            let key = keys[i];\n            let index = key.indexOf('.');\n            let config = null;\n            if (index >= 0) {\n                config = vscode_1.workspace.getConfiguration(key.substr(0, index), resource).get(key.substr(index + 1));\n            }\n            else {\n                config = vscode_1.workspace.getConfiguration(key, resource);\n            }\n            if (config) {\n                let path = keys[i].split('.');\n                ensurePath(result, path)[path[path.length - 1]] = config;\n            }\n        }\n        return result;\n    }\n    getMiddleware() {\n        let middleware = this._client.clientOptions.middleware;\n        if (middleware.workspace && middleware.workspace.didChangeConfiguration) {\n            return middleware.workspace.didChangeConfiguration;\n        }\n        else {\n            return undefined;\n        }\n    }\n}\nclass ExecuteCommandFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._commands = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.ExecuteCommandRequest.type;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(ensure(capabilities, 'workspace'), 'executeCommand').dynamicRegistration = true;\n    }\n    initialize(capabilities) {\n        if (!capabilities.executeCommandProvider) {\n            return;\n        }\n        this.register(this.messages, {\n            id: UUID.generateUuid(),\n            registerOptions: Object.assign({}, capabilities.executeCommandProvider)\n        });\n    }\n    register(_message, data) {\n        const client = this._client;\n        const middleware = client.clientOptions.middleware;\n        const executeCommand = (command, args) => {\n            let params = {\n                command,\n                arguments: args\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, params).then(undefined, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, error);\n            });\n        };\n        if (data.registerOptions.commands) {\n            const disposeables = [];\n            for (const command of data.registerOptions.commands) {\n                disposeables.push(vscode_1.commands.registerCommand(command, (...args) => {\n                    return middleware.executeCommand\n                        ? middleware.executeCommand(command, args, executeCommand)\n                        : executeCommand(command, args);\n                }));\n            }\n            this._commands.set(data.id, disposeables);\n        }\n    }\n    unregister(id) {\n        let disposeables = this._commands.get(id);\n        if (disposeables) {\n            disposeables.forEach(disposable => disposable.dispose());\n        }\n    }\n    dispose() {\n        this._commands.forEach((value) => {\n            value.forEach(disposable => disposable.dispose());\n        });\n        this._commands.clear();\n    }\n}\nvar MessageTransports;\n(function (MessageTransports) {\n    function is(value) {\n        let candidate = value;\n        return candidate && vscode_languageserver_protocol_1.MessageReader.is(value.reader) && vscode_languageserver_protocol_1.MessageWriter.is(value.writer);\n    }\n    MessageTransports.is = is;\n})(MessageTransports = exports.MessageTransports || (exports.MessageTransports = {}));\nclass OnReady {\n    constructor(_resolve, _reject) {\n        this._resolve = _resolve;\n        this._reject = _reject;\n        this._used = false;\n    }\n    get isUsed() {\n        return this._used;\n    }\n    resolve() {\n        this._used = true;\n        this._resolve();\n    }\n    reject(error) {\n        this._used = true;\n        this._reject(error);\n    }\n}\nclass BaseLanguageClient {\n    constructor(id, name, clientOptions) {\n        this._traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;\n        this._features = [];\n        this._method2Message = new Map();\n        this._dynamicFeatures = new Map();\n        this._id = id;\n        this._name = name;\n        clientOptions = clientOptions || {};\n        this._clientOptions = {\n            documentSelector: clientOptions.documentSelector || [],\n            synchronize: clientOptions.synchronize || {},\n            diagnosticCollectionName: clientOptions.diagnosticCollectionName,\n            outputChannelName: clientOptions.outputChannelName || this._name,\n            revealOutputChannelOn: clientOptions.revealOutputChannelOn || RevealOutputChannelOn.Error,\n            stdioEncoding: clientOptions.stdioEncoding || 'utf8',\n            initializationOptions: clientOptions.initializationOptions,\n            initializationFailedHandler: clientOptions.initializationFailedHandler,\n            progressOnInitialization: !!clientOptions.progressOnInitialization,\n            errorHandler: clientOptions.errorHandler || new DefaultErrorHandler(this._name),\n            middleware: clientOptions.middleware || {},\n            uriConverters: clientOptions.uriConverters,\n            workspaceFolder: clientOptions.workspaceFolder\n        };\n        this._clientOptions.synchronize = this._clientOptions.synchronize || {};\n        this.state = ClientState.Initial;\n        this._connectionPromise = undefined;\n        this._resolvedConnection = undefined;\n        this._initializeResult = undefined;\n        if (clientOptions.outputChannel) {\n            this._outputChannel = clientOptions.outputChannel;\n            this._disposeOutputChannel = false;\n        }\n        else {\n            this._outputChannel = undefined;\n            this._disposeOutputChannel = true;\n        }\n        this._traceOutputChannel = clientOptions.traceOutputChannel;\n        this._listeners = undefined;\n        this._providers = undefined;\n        this._diagnostics = undefined;\n        this._fileEvents = [];\n        this._fileEventDelayer = new async_1.Delayer(250);\n        this._onReady = new Promise((resolve, reject) => {\n            this._onReadyCallbacks = new OnReady(resolve, reject);\n        });\n        this._onStop = undefined;\n        this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter();\n        this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter();\n        this._tracer = {\n            log: (messageOrDataObject, data) => {\n                if (Is.string(messageOrDataObject)) {\n                    this.logTrace(messageOrDataObject, data);\n                }\n                else {\n                    this.logObjectTrace(messageOrDataObject);\n                }\n            },\n        };\n        this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : undefined);\n        this._p2c = p2c.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : undefined);\n        this._syncedDocuments = new Map();\n        this.registerBuiltinFeatures();\n    }\n    get state() {\n        return this._state;\n    }\n    set state(value) {\n        let oldState = this.getPublicState();\n        this._state = value;\n        let newState = this.getPublicState();\n        if (newState !== oldState) {\n            this._stateChangeEmitter.fire({ oldState, newState });\n        }\n    }\n    getPublicState() {\n        if (this.state === ClientState.Running) {\n            return State.Running;\n        }\n        else if (this.state === ClientState.Starting) {\n            return State.Starting;\n        }\n        else {\n            return State.Stopped;\n        }\n    }\n    get initializeResult() {\n        return this._initializeResult;\n    }\n    sendRequest(type, ...params) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        this.forceDocumentSync();\n        try {\n            return this._resolvedConnection.sendRequest(type, ...params);\n        }\n        catch (error) {\n            this.error(`Sending request ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    onRequest(type, handler) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        try {\n            this._resolvedConnection.onRequest(type, handler);\n        }\n        catch (error) {\n            this.error(`Registering request handler ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    sendNotification(type, params) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        this.forceDocumentSync();\n        try {\n            this._resolvedConnection.sendNotification(type, params);\n        }\n        catch (error) {\n            this.error(`Sending notification ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    onNotification(type, handler) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        try {\n            this._resolvedConnection.onNotification(type, handler);\n        }\n        catch (error) {\n            this.error(`Registering notification handler ${Is.string(type) ? type : type.method} failed.`, error);\n            throw error;\n        }\n    }\n    onProgress(type, token, handler) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        try {\n            return this._resolvedConnection.onProgress(type, token, handler);\n        }\n        catch (error) {\n            this.error(`Registering progress handler for token ${token} failed.`, error);\n            throw error;\n        }\n    }\n    sendProgress(type, token, value) {\n        if (!this.isConnectionActive()) {\n            throw new Error('Language client is not ready yet');\n        }\n        this.forceDocumentSync();\n        try {\n            this._resolvedConnection.sendProgress(type, token, value);\n        }\n        catch (error) {\n            this.error(`Sending progress for token ${token} failed.`, error);\n            throw error;\n        }\n    }\n    get clientOptions() {\n        return this._clientOptions;\n    }\n    get protocol2CodeConverter() {\n        return this._p2c;\n    }\n    get code2ProtocolConverter() {\n        return this._c2p;\n    }\n    get onTelemetry() {\n        return this._telemetryEmitter.event;\n    }\n    get onDidChangeState() {\n        return this._stateChangeEmitter.event;\n    }\n    get outputChannel() {\n        if (!this._outputChannel) {\n            this._outputChannel = vscode_1.window.createOutputChannel(this._clientOptions.outputChannelName ? this._clientOptions.outputChannelName : this._name);\n        }\n        return this._outputChannel;\n    }\n    get traceOutputChannel() {\n        if (this._traceOutputChannel) {\n            return this._traceOutputChannel;\n        }\n        return this.outputChannel;\n    }\n    get diagnostics() {\n        return this._diagnostics;\n    }\n    createDefaultErrorHandler() {\n        return new DefaultErrorHandler(this._name);\n    }\n    set trace(value) {\n        this._trace = value;\n        this.onReady().then(() => {\n            this.resolveConnection().then((connection) => {\n                connection.trace(this._trace, this._tracer, {\n                    sendNotification: false,\n                    traceFormat: this._traceFormat\n                });\n            });\n        }, () => {\n        });\n    }\n    data2String(data) {\n        if (data instanceof vscode_languageserver_protocol_1.ResponseError) {\n            const responseError = data;\n            return `  Message: ${responseError.message}\\n  Code: ${responseError.code} ${responseError.data ? '\\n' + responseError.data.toString() : ''}`;\n        }\n        if (data instanceof Error) {\n            if (Is.string(data.stack)) {\n                return data.stack;\n            }\n            return data.message;\n        }\n        if (Is.string(data)) {\n            return data;\n        }\n        return data.toString();\n    }\n    info(message, data, showNotification = true) {\n        this.outputChannel.appendLine(`[Info  - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Info) {\n            this.showNotificationMessage();\n        }\n    }\n    warn(message, data, showNotification = true) {\n        this.outputChannel.appendLine(`[Warn  - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Warn) {\n            this.showNotificationMessage();\n        }\n    }\n    error(message, data, showNotification = true) {\n        this.outputChannel.appendLine(`[Error - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.outputChannel.appendLine(this.data2String(data));\n        }\n        if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Error) {\n            this.showNotificationMessage();\n        }\n    }\n    showNotificationMessage() {\n        vscode_1.window.showInformationMessage('A request has failed. See the output for more information.', 'Go to output').then(() => {\n            this.outputChannel.show(true);\n        });\n    }\n    logTrace(message, data) {\n        this.traceOutputChannel.appendLine(`[Trace - ${(new Date().toLocaleTimeString())}] ${message}`);\n        if (data) {\n            this.traceOutputChannel.appendLine(this.data2String(data));\n        }\n    }\n    logObjectTrace(data) {\n        if (data.isLSPMessage && data.type) {\n            this.traceOutputChannel.append(`[LSP   - ${(new Date().toLocaleTimeString())}] `);\n        }\n        else {\n            this.traceOutputChannel.append(`[Trace - ${(new Date().toLocaleTimeString())}] `);\n        }\n        if (data) {\n            this.traceOutputChannel.appendLine(`${JSON.stringify(data)}`);\n        }\n    }\n    needsStart() {\n        return this.state === ClientState.Initial || this.state === ClientState.Stopping || this.state === ClientState.Stopped;\n    }\n    needsStop() {\n        return this.state === ClientState.Starting || this.state === ClientState.Running;\n    }\n    onReady() {\n        return this._onReady;\n    }\n    isConnectionActive() {\n        return this.state === ClientState.Running && !!this._resolvedConnection;\n    }\n    start() {\n        if (this._onReadyCallbacks.isUsed) {\n            this._onReady = new Promise((resolve, reject) => {\n                this._onReadyCallbacks = new OnReady(resolve, reject);\n            });\n        }\n        this._listeners = [];\n        this._providers = [];\n        // If we restart then the diagnostics collection is reused.\n        if (!this._diagnostics) {\n            this._diagnostics = this._clientOptions.diagnosticCollectionName\n                ? vscode_1.languages.createDiagnosticCollection(this._clientOptions.diagnosticCollectionName)\n                : vscode_1.languages.createDiagnosticCollection();\n        }\n        this.state = ClientState.Starting;\n        this.resolveConnection().then((connection) => {\n            connection.onLogMessage((message) => {\n                switch (message.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        this.error(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        this.warn(message.message, undefined, false);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        this.info(message.message, undefined, false);\n                        break;\n                    default:\n                        this.outputChannel.appendLine(message.message);\n                }\n            });\n            connection.onShowMessage((message) => {\n                switch (message.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        vscode_1.window.showErrorMessage(message.message);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        vscode_1.window.showWarningMessage(message.message);\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        vscode_1.window.showInformationMessage(message.message);\n                        break;\n                    default:\n                        vscode_1.window.showInformationMessage(message.message);\n                }\n            });\n            connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, (params) => {\n                let messageFunc;\n                switch (params.type) {\n                    case vscode_languageserver_protocol_1.MessageType.Error:\n                        messageFunc = vscode_1.window.showErrorMessage;\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Warning:\n                        messageFunc = vscode_1.window.showWarningMessage;\n                        break;\n                    case vscode_languageserver_protocol_1.MessageType.Info:\n                        messageFunc = vscode_1.window.showInformationMessage;\n                        break;\n                    default:\n                        messageFunc = vscode_1.window.showInformationMessage;\n                }\n                let actions = params.actions || [];\n                return messageFunc(params.message, ...actions);\n            });\n            connection.onTelemetry((data) => {\n                this._telemetryEmitter.fire(data);\n            });\n            connection.listen();\n            // Error is handled in the initialize call.\n            return this.initialize(connection);\n        }).then(undefined, (error) => {\n            this.state = ClientState.StartFailed;\n            this._onReadyCallbacks.reject(error);\n            this.error('Starting client failed', error);\n            vscode_1.window.showErrorMessage(`Couldn't start client ${this._name}`);\n        });\n        return new vscode_1.Disposable(() => {\n            if (this.needsStop()) {\n                this.stop();\n            }\n        });\n    }\n    resolveConnection() {\n        if (!this._connectionPromise) {\n            this._connectionPromise = this.createConnection();\n        }\n        return this._connectionPromise;\n    }\n    initialize(connection) {\n        this.refreshTrace(connection, false);\n        let initOption = this._clientOptions.initializationOptions;\n        let rootPath = this._clientOptions.workspaceFolder\n            ? this._clientOptions.workspaceFolder.uri.fsPath\n            : this._clientGetRootPath();\n        let initParams = {\n            processId: process.pid,\n            clientInfo: {\n                name: 'vscode',\n                version: vscode_1.version\n            },\n            rootPath: rootPath ? rootPath : null,\n            rootUri: rootPath ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) : null,\n            capabilities: this.computeClientCapabilities(),\n            initializationOptions: Is.func(initOption) ? initOption() : initOption,\n            trace: vscode_languageserver_protocol_1.Trace.toString(this._trace),\n            workspaceFolders: null\n        };\n        this.fillInitializeParams(initParams);\n        if (this._clientOptions.progressOnInitialization) {\n            const token = UUID.generateUuid();\n            const part = new progressPart_1.ProgressPart(connection, token);\n            initParams.workDoneToken = token;\n            return this.doInitialize(connection, initParams).then((result) => {\n                part.done();\n                return result;\n            }, (error) => {\n                part.cancel();\n                throw error;\n            });\n        }\n        else {\n            return this.doInitialize(connection, initParams);\n        }\n    }\n    doInitialize(connection, initParams) {\n        return connection.initialize(initParams).then((result) => {\n            this._resolvedConnection = connection;\n            this._initializeResult = result;\n            this.state = ClientState.Running;\n            let textDocumentSyncOptions = undefined;\n            if (Is.number(result.capabilities.textDocumentSync)) {\n                if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {\n                    textDocumentSyncOptions = {\n                        openClose: false,\n                        change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,\n                        save: undefined\n                    };\n                }\n                else {\n                    textDocumentSyncOptions = {\n                        openClose: true,\n                        change: result.capabilities.textDocumentSync,\n                        save: {\n                            includeText: false\n                        }\n                    };\n                }\n            }\n            else if (result.capabilities.textDocumentSync !== void 0 && result.capabilities.textDocumentSync !== null) {\n                textDocumentSyncOptions = result.capabilities.textDocumentSync;\n            }\n            this._capabilities = Object.assign({}, result.capabilities, { resolvedTextDocumentSync: textDocumentSyncOptions });\n            connection.onDiagnostics(params => this.handleDiagnostics(params));\n            connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params => this.handleRegistrationRequest(params));\n            // See https://github.com/Microsoft/vscode-languageserver-node/issues/199\n            connection.onRequest('client/registerFeature', params => this.handleRegistrationRequest(params));\n            connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params => this.handleUnregistrationRequest(params));\n            // See https://github.com/Microsoft/vscode-languageserver-node/issues/199\n            connection.onRequest('client/unregisterFeature', params => this.handleUnregistrationRequest(params));\n            connection.onRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params => this.handleApplyWorkspaceEdit(params));\n            connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});\n            this.hookFileEvents(connection);\n            this.hookConfigurationChanged(connection);\n            this.initializeFeatures(connection);\n            this._onReadyCallbacks.resolve();\n            return result;\n        }).then(undefined, (error) => {\n            if (this._clientOptions.initializationFailedHandler) {\n                if (this._clientOptions.initializationFailedHandler(error)) {\n                    this.initialize(connection);\n                }\n                else {\n                    this.stop();\n                    this._onReadyCallbacks.reject(error);\n                }\n            }\n            else if (error instanceof vscode_languageserver_protocol_1.ResponseError && error.data && error.data.retry) {\n                vscode_1.window.showErrorMessage(error.message, { title: 'Retry', id: 'retry' }).then(item => {\n                    if (item && item.id === 'retry') {\n                        this.initialize(connection);\n                    }\n                    else {\n                        this.stop();\n                        this._onReadyCallbacks.reject(error);\n                    }\n                });\n            }\n            else {\n                if (error && error.message) {\n                    vscode_1.window.showErrorMessage(error.message);\n                }\n                this.error('Server initialization failed.', error);\n                this.stop();\n                this._onReadyCallbacks.reject(error);\n            }\n            throw error;\n        });\n    }\n    _clientGetRootPath() {\n        let folders = vscode_1.workspace.workspaceFolders;\n        if (!folders || folders.length === 0) {\n            return undefined;\n        }\n        let folder = folders[0];\n        if (folder.uri.scheme === 'file') {\n            return folder.uri.fsPath;\n        }\n        return undefined;\n    }\n    stop() {\n        this._initializeResult = undefined;\n        if (!this._connectionPromise) {\n            this.state = ClientState.Stopped;\n            return Promise.resolve();\n        }\n        if (this.state === ClientState.Stopping && this._onStop) {\n            return this._onStop;\n        }\n        this.state = ClientState.Stopping;\n        this.cleanUp(false);\n        // unhook listeners\n        return this._onStop = this.resolveConnection().then(connection => {\n            return connection.shutdown().then(() => {\n                connection.exit();\n                connection.dispose();\n                this.state = ClientState.Stopped;\n                this.cleanUpChannel();\n                this._onStop = undefined;\n                this._connectionPromise = undefined;\n                this._resolvedConnection = undefined;\n            });\n        });\n    }\n    cleanUp(channel = true, diagnostics = true) {\n        if (this._listeners) {\n            this._listeners.forEach(listener => listener.dispose());\n            this._listeners = undefined;\n        }\n        if (this._providers) {\n            this._providers.forEach(provider => provider.dispose());\n            this._providers = undefined;\n        }\n        if (this._syncedDocuments) {\n            this._syncedDocuments.clear();\n        }\n        for (let handler of this._dynamicFeatures.values()) {\n            handler.dispose();\n        }\n        if (channel) {\n            this.cleanUpChannel();\n        }\n        if (diagnostics && this._diagnostics) {\n            this._diagnostics.dispose();\n            this._diagnostics = undefined;\n        }\n    }\n    cleanUpChannel() {\n        if (this._outputChannel && this._disposeOutputChannel) {\n            this._outputChannel.dispose();\n            this._outputChannel = undefined;\n        }\n    }\n    notifyFileEvent(event) {\n        var _a, _b;\n        const client = this;\n        function didChangeWatchedFile(event) {\n            client._fileEvents.push(event);\n            client._fileEventDelayer.trigger(() => {\n                client.onReady().then(() => {\n                    client.resolveConnection().then(connection => {\n                        if (client.isConnectionActive()) {\n                            client.forceDocumentSync();\n                            connection.didChangeWatchedFiles({ changes: client._fileEvents });\n                        }\n                        client._fileEvents = [];\n                    });\n                }, (error) => {\n                    client.error(`Notify file events failed.`, error);\n                });\n            });\n        }\n        const workSpaceMiddleware = (_a = this.clientOptions.middleware) === null || _a === void 0 ? void 0 : _a.workspace;\n        ((_b = workSpaceMiddleware) === null || _b === void 0 ? void 0 : _b.didChangeWatchedFile) ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event);\n    }\n    forceDocumentSync() {\n        this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method).forceDelivery();\n    }\n    handleDiagnostics(params) {\n        if (!this._diagnostics) {\n            return;\n        }\n        let uri = this._p2c.asUri(params.uri);\n        let diagnostics = this._p2c.asDiagnostics(params.diagnostics);\n        let middleware = this.clientOptions.middleware;\n        if (middleware.handleDiagnostics) {\n            middleware.handleDiagnostics(uri, diagnostics, (uri, diagnostics) => this.setDiagnostics(uri, diagnostics));\n        }\n        else {\n            this.setDiagnostics(uri, diagnostics);\n        }\n    }\n    setDiagnostics(uri, diagnostics) {\n        if (!this._diagnostics) {\n            return;\n        }\n        this._diagnostics.set(uri, diagnostics);\n    }\n    createConnection() {\n        let errorHandler = (error, message, count) => {\n            this.handleConnectionError(error, message, count);\n        };\n        let closeHandler = () => {\n            this.handleConnectionClosed();\n        };\n        return this.createMessageTransports(this._clientOptions.stdioEncoding || 'utf8').then((transports) => {\n            return createConnection(transports.reader, transports.writer, errorHandler, closeHandler);\n        });\n    }\n    handleConnectionClosed() {\n        // Check whether this is a normal shutdown in progress or the client stopped normally.\n        if (this.state === ClientState.Stopping || this.state === ClientState.Stopped) {\n            return;\n        }\n        try {\n            if (this._resolvedConnection) {\n                this._resolvedConnection.dispose();\n            }\n        }\n        catch (error) {\n            // Disposing a connection could fail if error cases.\n        }\n        let action = CloseAction.DoNotRestart;\n        try {\n            action = this._clientOptions.errorHandler.closed();\n        }\n        catch (error) {\n            // Ignore errors coming from the error handler.\n        }\n        this._connectionPromise = undefined;\n        this._resolvedConnection = undefined;\n        if (action === CloseAction.DoNotRestart) {\n            this.error('Connection to server got closed. Server will not be restarted.');\n            this.state = ClientState.Stopped;\n            this.cleanUp(false, true);\n        }\n        else if (action === CloseAction.Restart) {\n            this.info('Connection to server got closed. Server will restart.');\n            this.cleanUp(false, false);\n            this.state = ClientState.Initial;\n            this.start();\n        }\n    }\n    handleConnectionError(error, message, count) {\n        let action = this._clientOptions.errorHandler.error(error, message, count);\n        if (action === ErrorAction.Shutdown) {\n            this.error('Connection to server is erroring. Shutting down server.');\n            this.stop();\n        }\n    }\n    hookConfigurationChanged(connection) {\n        vscode_1.workspace.onDidChangeConfiguration(() => {\n            this.refreshTrace(connection, true);\n        });\n    }\n    refreshTrace(connection, sendNotification = false) {\n        let config = vscode_1.workspace.getConfiguration(this._id);\n        let trace = vscode_languageserver_protocol_1.Trace.Off;\n        let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;\n        if (config) {\n            const traceConfig = config.get('trace.server', 'off');\n            if (typeof traceConfig === 'string') {\n                trace = vscode_languageserver_protocol_1.Trace.fromString(traceConfig);\n            }\n            else {\n                trace = vscode_languageserver_protocol_1.Trace.fromString(config.get('trace.server.verbosity', 'off'));\n                traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString(config.get('trace.server.format', 'text'));\n            }\n        }\n        this._trace = trace;\n        this._traceFormat = traceFormat;\n        connection.trace(this._trace, this._tracer, {\n            sendNotification,\n            traceFormat: this._traceFormat\n        });\n    }\n    hookFileEvents(_connection) {\n        let fileEvents = this._clientOptions.synchronize.fileEvents;\n        if (!fileEvents) {\n            return;\n        }\n        let watchers;\n        if (Is.array(fileEvents)) {\n            watchers = fileEvents;\n        }\n        else {\n            watchers = [fileEvents];\n        }\n        if (!watchers) {\n            return;\n        }\n        this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type.method).registerRaw(UUID.generateUuid(), watchers);\n    }\n    registerFeatures(features) {\n        for (let feature of features) {\n            this.registerFeature(feature);\n        }\n    }\n    registerFeature(feature) {\n        this._features.push(feature);\n        if (DynamicFeature.is(feature)) {\n            let messages = feature.messages;\n            if (Array.isArray(messages)) {\n                for (let message of messages) {\n                    this._method2Message.set(message.method, message);\n                    this._dynamicFeatures.set(message.method, feature);\n                }\n            }\n            else {\n                this._method2Message.set(messages.method, messages);\n                this._dynamicFeatures.set(messages.method, feature);\n            }\n        }\n    }\n    getFeature(request) {\n        return this._dynamicFeatures.get(request);\n    }\n    registerBuiltinFeatures() {\n        this.registerFeature(new ConfigurationFeature(this));\n        this.registerFeature(new DidOpenTextDocumentFeature(this, this._syncedDocuments));\n        this.registerFeature(new DidChangeTextDocumentFeature(this));\n        this.registerFeature(new WillSaveFeature(this));\n        this.registerFeature(new WillSaveWaitUntilFeature(this));\n        this.registerFeature(new DidSaveTextDocumentFeature(this));\n        this.registerFeature(new DidCloseTextDocumentFeature(this, this._syncedDocuments));\n        this.registerFeature(new FileSystemWatcherFeature(this, (event) => this.notifyFileEvent(event)));\n        this.registerFeature(new CompletionItemFeature(this));\n        this.registerFeature(new HoverFeature(this));\n        this.registerFeature(new SignatureHelpFeature(this));\n        this.registerFeature(new DefinitionFeature(this));\n        this.registerFeature(new ReferencesFeature(this));\n        this.registerFeature(new DocumentHighlightFeature(this));\n        this.registerFeature(new DocumentSymbolFeature(this));\n        this.registerFeature(new WorkspaceSymbolFeature(this));\n        this.registerFeature(new CodeActionFeature(this));\n        this.registerFeature(new CodeLensFeature(this));\n        this.registerFeature(new DocumentFormattingFeature(this));\n        this.registerFeature(new DocumentRangeFormattingFeature(this));\n        this.registerFeature(new DocumentOnTypeFormattingFeature(this));\n        this.registerFeature(new RenameFeature(this));\n        this.registerFeature(new DocumentLinkFeature(this));\n        this.registerFeature(new ExecuteCommandFeature(this));\n    }\n    fillInitializeParams(params) {\n        for (let feature of this._features) {\n            if (Is.func(feature.fillInitializeParams)) {\n                feature.fillInitializeParams(params);\n            }\n        }\n    }\n    computeClientCapabilities() {\n        let result = {};\n        ensure(result, 'workspace').applyEdit = true;\n        let workspaceEdit = ensure(ensure(result, 'workspace'), 'workspaceEdit');\n        workspaceEdit.documentChanges = true;\n        workspaceEdit.resourceOperations = [vscode_languageserver_protocol_1.ResourceOperationKind.Create, vscode_languageserver_protocol_1.ResourceOperationKind.Rename, vscode_languageserver_protocol_1.ResourceOperationKind.Delete];\n        workspaceEdit.failureHandling = vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional;\n        let diagnostics = ensure(ensure(result, 'textDocument'), 'publishDiagnostics');\n        diagnostics.relatedInformation = true;\n        diagnostics.versionSupport = false;\n        diagnostics.tagSupport = { valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated] };\n        for (let feature of this._features) {\n            feature.fillClientCapabilities(result);\n        }\n        return result;\n    }\n    initializeFeatures(_connection) {\n        let documentSelector = this._clientOptions.documentSelector;\n        for (let feature of this._features) {\n            feature.initialize(this._capabilities, documentSelector);\n        }\n    }\n    handleRegistrationRequest(params) {\n        return new Promise((resolve, reject) => {\n            for (let registration of params.registrations) {\n                const feature = this._dynamicFeatures.get(registration.method);\n                if (!feature) {\n                    reject(new Error(`No feature implementation for ${registration.method} found. Registration failed.`));\n                    return;\n                }\n                const options = registration.registerOptions || {};\n                options.documentSelector = options.documentSelector || this._clientOptions.documentSelector;\n                const data = {\n                    id: registration.id,\n                    registerOptions: options\n                };\n                feature.register(this._method2Message.get(registration.method), data);\n            }\n            resolve();\n        });\n    }\n    handleUnregistrationRequest(params) {\n        return new Promise((resolve, reject) => {\n            for (let unregistration of params.unregisterations) {\n                const feature = this._dynamicFeatures.get(unregistration.method);\n                if (!feature) {\n                    reject(new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`));\n                    return;\n                }\n                feature.unregister(unregistration.id);\n            }\n            resolve();\n        });\n    }\n    handleApplyWorkspaceEdit(params) {\n        // This is some sort of workaround since the version check should be done by VS Code in the Workspace.applyEdit.\n        // However doing it here adds some safety since the server can lag more behind then an extension.\n        let workspaceEdit = params.edit;\n        let openTextDocuments = new Map();\n        vscode_1.workspace.textDocuments.forEach((document) => openTextDocuments.set(document.uri.toString(), document));\n        let versionMismatch = false;\n        if (workspaceEdit.documentChanges) {\n            for (const change of workspaceEdit.documentChanges) {\n                if (vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && change.textDocument.version && change.textDocument.version >= 0) {\n                    let textDocument = openTextDocuments.get(change.textDocument.uri);\n                    if (textDocument && textDocument.version !== change.textDocument.version) {\n                        versionMismatch = true;\n                        break;\n                    }\n                }\n            }\n        }\n        if (versionMismatch) {\n            return Promise.resolve({ applied: false });\n        }\n        return Is.asPromise(vscode_1.workspace.applyEdit(this._p2c.asWorkspaceEdit(params.edit)).then((value) => { return { applied: value }; }));\n    }\n    logFailedRequest(type, error) {\n        // If we get a request cancel or a content modified don't log anything.\n        if (error instanceof vscode_languageserver_protocol_1.ResponseError && (error.code === vscode_languageserver_protocol_1.ErrorCodes.RequestCancelled || error.code === vscode_languageserver_protocol_1.ErrorCodes.ContentModified)) {\n            return;\n        }\n        this.error(`Request ${type.method} failed.`, error);\n    }\n}\nexports.BaseLanguageClient = BaseLanguageClient;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass ColorProviderFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DocumentColorRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'colorProvider').dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideColorPresentations: (color, context, token) => {\n                const client = this._client;\n                const provideColorPresentations = (color, context, token) => {\n                    const requestParams = {\n                        color,\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(context.document),\n                        range: client.code2ProtocolConverter.asRange(context.range)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, requestParams, token).then(this.asColorPresentations.bind(this), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideColorPresentations\n                    ? middleware.provideColorPresentations(color, context, token, provideColorPresentations)\n                    : provideColorPresentations(color, context, token);\n            },\n            provideDocumentColors: (document, token) => {\n                const client = this._client;\n                const provideDocumentColors = (document, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, requestParams, token).then(this.asColorInformations.bind(this), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDocumentColors\n                    ? middleware.provideDocumentColors(document, token, provideDocumentColors)\n                    : provideDocumentColors(document, token);\n            }\n        };\n        return [vscode_1.languages.registerColorProvider(options.documentSelector, provider), provider];\n    }\n    asColor(color) {\n        return new vscode_1.Color(color.red, color.green, color.blue, color.alpha);\n    }\n    asColorInformations(colorInformation) {\n        if (Array.isArray(colorInformation)) {\n            return colorInformation.map(ci => {\n                return new vscode_1.ColorInformation(this._client.protocol2CodeConverter.asRange(ci.range), this.asColor(ci.color));\n            });\n        }\n        return [];\n    }\n    asColorPresentations(colorPresentations) {\n        if (Array.isArray(colorPresentations)) {\n            return colorPresentations.map(cp => {\n                let presentation = new vscode_1.ColorPresentation(cp.label);\n                presentation.additionalTextEdits = this._client.protocol2CodeConverter.asTextEdits(cp.additionalTextEdits);\n                presentation.textEdit = this._client.protocol2CodeConverter.asTextEdit(cp.textEdit);\n                return presentation;\n            });\n        }\n        return [];\n    }\n}\nexports.ColorProviderFeature = ColorProviderFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nclass ConfigurationFeature {\n    constructor(_client) {\n        this._client = _client;\n    }\n    fillClientCapabilities(capabilities) {\n        capabilities.workspace = capabilities.workspace || {};\n        capabilities.workspace.configuration = true;\n    }\n    initialize() {\n        let client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, (params, token) => {\n            let configuration = (params) => {\n                let result = [];\n                for (let item of params.items) {\n                    let resource = item.scopeUri !== void 0 && item.scopeUri !== null ? this._client.protocol2CodeConverter.asUri(item.scopeUri) : undefined;\n                    result.push(this.getConfiguration(resource, item.section !== null ? item.section : undefined));\n                }\n                return result;\n            };\n            let middleware = client.clientOptions.middleware.workspace;\n            return middleware && middleware.configuration\n                ? middleware.configuration(params, token, configuration)\n                : configuration(params, token);\n        });\n    }\n    getConfiguration(resource, section) {\n        let result = null;\n        if (section) {\n            let index = section.lastIndexOf('.');\n            if (index === -1) {\n                result = vscode_1.workspace.getConfiguration(undefined, resource).get(section);\n            }\n            else {\n                let config = vscode_1.workspace.getConfiguration(section.substr(0, index), resource);\n                if (config) {\n                    result = config.get(section.substr(index + 1));\n                }\n            }\n        }\n        else {\n            let config = vscode_1.workspace.getConfiguration(undefined, resource);\n            result = {};\n            for (let key of Object.keys(config)) {\n                if (config.has(key)) {\n                    result[key] = config.get(key);\n                }\n            }\n        }\n        if (!result) {\n            return null;\n        }\n        return result;\n    }\n}\nexports.ConfigurationFeature = ConfigurationFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass ImplementationFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.ImplementationRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let implementationSupport = ensure(ensure(capabilites, 'textDocument'), 'implementation');\n        implementationSupport.dynamicRegistration = true;\n        implementationSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideImplementation: (document, position, token) => {\n                const client = this._client;\n                const provideImplementation = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDefinitionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideImplementation\n                    ? middleware.provideImplementation(document, position, token, provideImplementation)\n                    : provideImplementation(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerImplementationProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.ImplementationFeature = ImplementationFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass TypeDefinitionFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.TypeDefinitionRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        ensure(ensure(capabilites, 'textDocument'), 'typeDefinition').dynamicRegistration = true;\n        let typeDefinitionSupport = ensure(ensure(capabilites, 'textDocument'), 'typeDefinition');\n        typeDefinitionSupport.dynamicRegistration = true;\n        typeDefinitionSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideTypeDefinition: (document, position, token) => {\n                const client = this._client;\n                const provideTypeDefinition = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDefinitionResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideTypeDefinition\n                    ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition)\n                    : provideTypeDefinition(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerTypeDefinitionProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.TypeDefinitionFeature = TypeDefinitionFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst UUID = require(\"./utils/uuid\");\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nfunction access(target, key) {\n    if (target === void 0) {\n        return undefined;\n    }\n    return target[key];\n}\nfunction arrayDiff(left, right) {\n    return left.filter(element => right.indexOf(element) < 0);\n}\nexports.arrayDiff = arrayDiff;\nclass WorkspaceFoldersFeature {\n    constructor(_client) {\n        this._client = _client;\n        this._listeners = new Map();\n    }\n    get messages() {\n        return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;\n    }\n    fillInitializeParams(params) {\n        let folders = vscode_1.workspace.workspaceFolders;\n        this.initializeWithFolders(folders);\n        if (folders === void 0) {\n            params.workspaceFolders = null;\n        }\n        else {\n            params.workspaceFolders = folders.map(folder => this.asProtocol(folder));\n        }\n    }\n    initializeWithFolders(currentWorkspaceFolders) {\n        this._initialFolders = currentWorkspaceFolders;\n    }\n    fillClientCapabilities(capabilities) {\n        capabilities.workspace = capabilities.workspace || {};\n        capabilities.workspace.workspaceFolders = true;\n    }\n    initialize(capabilities) {\n        let client = this._client;\n        client.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {\n            let workspaceFolders = () => {\n                let folders = vscode_1.workspace.workspaceFolders;\n                if (folders === void 0) {\n                    return null;\n                }\n                let result = folders.map((folder) => {\n                    return this.asProtocol(folder);\n                });\n                return result;\n            };\n            let middleware = client.clientOptions.middleware.workspace;\n            return middleware && middleware.workspaceFolders\n                ? middleware.workspaceFolders(token, workspaceFolders)\n                : workspaceFolders(token);\n        });\n        let value = access(access(access(capabilities, 'workspace'), 'workspaceFolders'), 'changeNotifications');\n        let id;\n        if (typeof value === 'string') {\n            id = value;\n        }\n        else if (value === true) {\n            id = UUID.generateUuid();\n        }\n        if (id) {\n            this.register(this.messages, {\n                id: id,\n                registerOptions: undefined\n            });\n        }\n    }\n    sendInitialEvent(currentWorkspaceFolders) {\n        if (this._initialFolders && currentWorkspaceFolders) {\n            const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);\n            const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);\n            if (added.length > 0 || removed.length > 0) {\n                this.doSendEvent(added, removed);\n            }\n        }\n        else if (this._initialFolders) {\n            this.doSendEvent([], this._initialFolders);\n        }\n        else if (currentWorkspaceFolders) {\n            this.doSendEvent(currentWorkspaceFolders, []);\n        }\n    }\n    doSendEvent(addedFolders, removedFolders) {\n        let params = {\n            event: {\n                added: addedFolders.map(folder => this.asProtocol(folder)),\n                removed: removedFolders.map(folder => this.asProtocol(folder))\n            }\n        };\n        this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);\n    }\n    register(_message, data) {\n        let id = data.id;\n        let client = this._client;\n        let disposable = vscode_1.workspace.onDidChangeWorkspaceFolders((event) => {\n            let didChangeWorkspaceFolders = (event) => {\n                this.doSendEvent(event.added, event.removed);\n            };\n            let middleware = client.clientOptions.middleware.workspace;\n            middleware && middleware.didChangeWorkspaceFolders\n                ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders)\n                : didChangeWorkspaceFolders(event);\n        });\n        this._listeners.set(id, disposable);\n        this.sendInitialEvent(vscode_1.workspace.workspaceFolders);\n    }\n    unregister(id) {\n        let disposable = this._listeners.get(id);\n        if (disposable === void 0) {\n            return;\n        }\n        this._listeners.delete(id);\n        disposable.dispose();\n    }\n    dispose() {\n        for (let disposable of this._listeners.values()) {\n            disposable.dispose();\n        }\n        this._listeners.clear();\n    }\n    asProtocol(workspaceFolder) {\n        if (workspaceFolder === void 0) {\n            return null;\n        }\n        return { uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), name: workspaceFolder.name };\n    }\n}\nexports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass FoldingRangeFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.FoldingRangeRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let capability = ensure(ensure(capabilites, 'textDocument'), 'foldingRange');\n        capability.dynamicRegistration = true;\n        capability.rangeLimit = 5000;\n        capability.lineFoldingOnly = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideFoldingRanges: (document, context, token) => {\n                const client = this._client;\n                const provideFoldingRanges = (document, _, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token).then(this.asFoldingRanges.bind(this), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideFoldingRanges\n                    ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges)\n                    : provideFoldingRanges(document, context, token);\n            }\n        };\n        return [vscode_1.languages.registerFoldingRangeProvider(options.documentSelector, provider), provider];\n    }\n    asFoldingRangeKind(kind) {\n        if (kind) {\n            switch (kind) {\n                case vscode_languageserver_protocol_1.FoldingRangeKind.Comment:\n                    return vscode_1.FoldingRangeKind.Comment;\n                case vscode_languageserver_protocol_1.FoldingRangeKind.Imports:\n                    return vscode_1.FoldingRangeKind.Imports;\n                case vscode_languageserver_protocol_1.FoldingRangeKind.Region:\n                    return vscode_1.FoldingRangeKind.Region;\n            }\n        }\n        return void 0;\n    }\n    asFoldingRanges(foldingRanges) {\n        if (Array.isArray(foldingRanges)) {\n            return foldingRanges.map(r => {\n                return new vscode_1.FoldingRange(r.startLine, r.endLine, this.asFoldingRangeKind(r.kind));\n            });\n        }\n        return [];\n    }\n}\nexports.FoldingRangeFeature = FoldingRangeFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nclass DeclarationFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.DeclarationRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        const declarationSupport = ensure(ensure(capabilites, 'textDocument'), 'declaration');\n        declarationSupport.dynamicRegistration = true;\n        declarationSupport.linkSupport = true;\n    }\n    initialize(capabilities, documentSelector) {\n        const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideDeclaration: (document, position, token) => {\n                const client = this._client;\n                const provideDeclaration = (document, position, token) => {\n                    return client.sendRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token).then(client.protocol2CodeConverter.asDeclarationResult, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideDeclaration\n                    ? middleware.provideDeclaration(document, position, token, provideDeclaration)\n                    : provideDeclaration(document, position, token);\n            }\n        };\n        return [vscode_1.languages.registerDeclarationProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.DeclarationFeature = DeclarationFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = Object.create(null);\n    }\n    return target[key];\n}\nclass SelectionRangeFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.SelectionRangeRequest.type);\n    }\n    fillClientCapabilities(capabilites) {\n        let capability = ensure(ensure(capabilites, 'textDocument'), 'selectionRange');\n        capability.dynamicRegistration = true;\n    }\n    initialize(capabilities, documentSelector) {\n        let [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const provider = {\n            provideSelectionRanges: (document, positions, token) => {\n                const client = this._client;\n                const provideSelectionRanges = (document, positions, token) => {\n                    const requestParams = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                        positions: client.code2ProtocolConverter.asPositions(positions)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, requestParams, token).then((ranges) => client.protocol2CodeConverter.asSelectionRanges(ranges), (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, error);\n                        return Promise.resolve(null);\n                    });\n                };\n                const middleware = client.clientOptions.middleware;\n                return middleware.provideSelectionRanges\n                    ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges)\n                    : provideSelectionRanges(document, positions, token);\n            }\n        };\n        return [vscode_1.languages.registerSelectionRangeProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.SelectionRangeFeature = SelectionRangeFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst progressPart_1 = require(\"./progressPart\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = Object.create(null);\n    }\n    return target[key];\n}\nclass ProgressFeature {\n    constructor(_client) {\n        this._client = _client;\n    }\n    fillClientCapabilities(capabilities) {\n        ensure(capabilities, 'window').workDoneProgress = true;\n    }\n    initialize() {\n        let client = this._client;\n        let createHandler = (params) => {\n            new progressPart_1.ProgressPart(this._client, params.token);\n        };\n        client.onRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, createHandler);\n    }\n}\nexports.ProgressFeature = ProgressFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst client_1 = require(\"./client\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar protocol2code;\n(function (protocol2code) {\n    function asCallHierarchyItem(converter, item) {\n        if (item === null) {\n            return undefined;\n        }\n        let result = new vscode_1.CallHierarchyItem(converter.asSymbolKind(item.kind), item.name, item.detail || '', converter.asUri(item.uri), converter.asRange(item.range), converter.asRange(item.selectionRange));\n        if (item.tags !== undefined) {\n            result.tags = converter.asSymbolTags(item.tags);\n        }\n        return result;\n    }\n    protocol2code.asCallHierarchyItem = asCallHierarchyItem;\n    function asCallHierarchyItems(converter, items) {\n        if (items === null) {\n            return undefined;\n        }\n        let result = items.map(item => asCallHierarchyItem(converter, item));\n        return result[0];\n    }\n    protocol2code.asCallHierarchyItems = asCallHierarchyItems;\n    function asCallHierarchyIncomingCall(converter, item) {\n        return new vscode_1.CallHierarchyIncomingCall(asCallHierarchyItem(converter, item.from), converter.asRanges(item.fromRanges));\n    }\n    protocol2code.asCallHierarchyIncomingCall = asCallHierarchyIncomingCall;\n    function asCallHierarchyIncomingCalls(converter, items) {\n        if (items === null) {\n            return undefined;\n        }\n        return items.map(item => asCallHierarchyIncomingCall(converter, item));\n    }\n    protocol2code.asCallHierarchyIncomingCalls = asCallHierarchyIncomingCalls;\n    function asCallHierarchyOutgoingCall(converter, item) {\n        return new vscode_1.CallHierarchyOutgoingCall(asCallHierarchyItem(converter, item.to), converter.asRanges(item.fromRanges));\n    }\n    protocol2code.asCallHierarchyOutgoingCall = asCallHierarchyOutgoingCall;\n    function asCallHierarchyOutgoingCalls(converter, items) {\n        if (items === null) {\n            return undefined;\n        }\n        return items.map(item => asCallHierarchyOutgoingCall(converter, item));\n    }\n    protocol2code.asCallHierarchyOutgoingCalls = asCallHierarchyOutgoingCalls;\n})(protocol2code || (protocol2code = {}));\nvar code2protocol;\n(function (code2protocol) {\n    function asCallHierarchyItem(converter, value) {\n        const result = {\n            name: value.name,\n            kind: converter.asSymbolKind(value.kind),\n            uri: converter.asUri(value.uri),\n            range: converter.asRange(value.range),\n            selectionRange: converter.asRange(value.selectionRange)\n        };\n        if (value.detail !== undefined && value.detail.length > 0) {\n            result.detail = value.detail;\n        }\n        if (value.tags !== undefined) {\n            result.tags = converter.asSymbolTags(value.tags);\n        }\n        return result;\n    }\n    code2protocol.asCallHierarchyItem = asCallHierarchyItem;\n})(code2protocol || (code2protocol = {}));\nclass CallHierarchyProvider {\n    constructor(client) {\n        this.client = client;\n        this.middleware = client.clientOptions.middleware;\n    }\n    prepareCallHierarchy(document, position, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const prepareCallHierarchy = (document, position, token) => {\n            const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);\n            return client.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, params, token).then((result) => {\n                return protocol2code.asCallHierarchyItems(this.client.protocol2CodeConverter, result);\n            }, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, error);\n                return Promise.resolve(null);\n            });\n        };\n        return middleware.prepareCallHierarchy\n            ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy)\n            : prepareCallHierarchy(document, position, token);\n    }\n    provideCallHierarchyIncomingCalls(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideCallHierarchyIncomingCalls = (item, token) => {\n            const params = {\n                item: code2protocol.asCallHierarchyItem(client.code2ProtocolConverter, item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, params, token).then((result) => {\n                return protocol2code.asCallHierarchyIncomingCalls(client.protocol2CodeConverter, result);\n            }, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type, error);\n                return Promise.resolve(null);\n            });\n        };\n        return middleware.provideCallHierarchyIncomingCalls\n            ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls)\n            : provideCallHierarchyIncomingCalls(item, token);\n    }\n    provideCallHierarchyOutgoingCalls(item, token) {\n        const client = this.client;\n        const middleware = this.middleware;\n        const provideCallHierarchyOutgoingCalls = (item, token) => {\n            const params = {\n                item: code2protocol.asCallHierarchyItem(client.code2ProtocolConverter, item)\n            };\n            return client.sendRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, params, token).then((result) => {\n                return protocol2code.asCallHierarchyOutgoingCalls(client.protocol2CodeConverter, result);\n            }, (error) => {\n                client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type, error);\n                return Promise.resolve(null);\n            });\n        };\n        return middleware.provideCallHierarchyOutgingCalls\n            ? middleware.provideCallHierarchyOutgingCalls(item, token, provideCallHierarchyOutgoingCalls)\n            : provideCallHierarchyOutgoingCalls(item, token);\n    }\n}\nclass CallHierarchyFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type);\n    }\n    fillClientCapabilities(cap) {\n        const capabilites = cap;\n        const capability = ensure(ensure(capabilites, 'textDocument'), 'callHierarchy');\n        capability.dynamicRegistration = true;\n    }\n    initialize(cap, documentSelector) {\n        const capabilities = cap;\n        const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const client = this._client;\n        const provider = new CallHierarchyProvider(client);\n        return [vscode_1.languages.registerCallHierarchyProvider(options.documentSelector, provider), provider];\n    }\n}\nexports.CallHierarchyFeature = CallHierarchyFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vscode = require(\"vscode\");\nconst client_1 = require(\"./client\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nfunction ensure(target, key) {\n    if (target[key] === void 0) {\n        target[key] = {};\n    }\n    return target[key];\n}\nvar protocol2code;\n(function (protocol2code) {\n    function asSemanticTokens(value) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        return new vscode.SemanticTokens(new Uint32Array(value.data), value.resultId);\n    }\n    protocol2code.asSemanticTokens = asSemanticTokens;\n    function asSemanticTokensEdit(value) {\n        return new vscode.SemanticTokensEdit(value.start, value.deleteCount, value.data !== undefined ? new Uint32Array(value.data) : undefined);\n    }\n    protocol2code.asSemanticTokensEdit = asSemanticTokensEdit;\n    function asSemanticTokensEdits(value) {\n        if (value === undefined || value === null) {\n            return undefined;\n        }\n        return new vscode.SemanticTokensEdits(value.edits.map(asSemanticTokensEdit), value.resultId);\n    }\n    protocol2code.asSemanticTokensEdits = asSemanticTokensEdits;\n    function asLegend(value) {\n        return value;\n    }\n    protocol2code.asLegend = asLegend;\n})(protocol2code || (protocol2code = {}));\nclass SemanticTokensFeature extends client_1.TextDocumentFeature {\n    constructor(client) {\n        super(client, vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type);\n    }\n    fillClientCapabilities(cap) {\n        const capabilites = cap;\n        let capability = ensure(ensure(capabilites, 'textDocument'), 'semanticTokens');\n        capability.dynamicRegistration = true;\n        capability.tokenTypes = [\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.comment,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.keyword,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.number,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.regexp,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.operator,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.namespace,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.type,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.struct,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.class,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.interface,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.enum,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.typeParameter,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.function,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.member,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.macro,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.variable,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.parameter,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.property,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenTypes.label\n        ];\n        capability.tokenModifiers = [\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.declaration,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.documentation,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.static,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.abstract,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.deprecated,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.async,\n            vscode_languageserver_protocol_1.Proposed.SemanticTokenModifiers.readonly\n        ];\n    }\n    initialize(cap, documentSelector) {\n        const capabilities = cap;\n        let [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);\n        if (!id || !options) {\n            return;\n        }\n        this.register(this.messages, { id: id, registerOptions: options });\n    }\n    registerLanguageProvider(options) {\n        const hasEditProvider = options.documentProvider !== undefined && typeof options.documentProvider !== 'boolean' && options.documentProvider.edits === true;\n        const documentProvider = {\n            provideDocumentSemanticTokens: (document, token) => {\n                const client = this._client;\n                const middleware = client.clientOptions.middleware;\n                const provideDocumentSemanticTokens = (document, token) => {\n                    const params = {\n                        textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document)\n                    };\n                    return client.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, params, token).then((result) => {\n                        return protocol2code.asSemanticTokens(result);\n                    }, (error) => {\n                        client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type, error);\n                        return undefined;\n                    });\n                };\n                return middleware.provideDocumentSemanticTokens\n                    ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens)\n                    : provideDocumentSemanticTokens(document, token);\n            },\n            provideDocumentSemanticTokensEdits: hasEditProvider\n                ? (document, previousResultId, token) => {\n                    const client = this._client;\n                    const middleware = client.clientOptions.middleware;\n                    const provideDocumentSemanticTokensEdits = (document, previousResultId, token) => {\n                        const params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            previousResultId\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, params, token).then((result) => {\n                            if (vscode_languageserver_protocol_1.Proposed.SemanticTokens.is(result)) {\n                                return protocol2code.asSemanticTokens(result);\n                            }\n                            else {\n                                return protocol2code.asSemanticTokensEdits(result);\n                            }\n                        }, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type, error);\n                            return undefined;\n                        });\n                    };\n                    return middleware.provideDocumentSemanticTokensEdits\n                        ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits)\n                        : provideDocumentSemanticTokensEdits(document, previousResultId, token);\n                }\n                : undefined\n        };\n        const hasRangeProvider = options.rangeProvider === true;\n        const rangeProvider = hasRangeProvider\n            ? {\n                provideDocumentRangeSemanticTokens: (document, range, token) => {\n                    const client = this._client;\n                    const middleware = client.clientOptions.middleware;\n                    const provideDocumentRangeSemanticTokens = (document, range, token) => {\n                        const params = {\n                            textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),\n                            range: client.code2ProtocolConverter.asRange(range)\n                        };\n                        return client.sendRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, params, token).then((result) => {\n                            return protocol2code.asSemanticTokens(result);\n                        }, (error) => {\n                            client.logFailedRequest(vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type, error);\n                            return undefined;\n                        });\n                    };\n                    return middleware.provideDocumentRangeSemanticTokens\n                        ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens)\n                        : provideDocumentRangeSemanticTokens(document, range, token);\n                }\n            }\n            : undefined;\n        const disposables = [];\n        const legend = protocol2code.asLegend(options.legend);\n        disposables.push(vscode.languages.registerDocumentSemanticTokensProvider(options.documentSelector, documentProvider, legend));\n        if (rangeProvider !== undefined) {\n            disposables.push(vscode.languages.registerDocumentRangeSemanticTokensProvider(options.documentSelector, rangeProvider, legend));\n        }\n        return [new vscode.Disposable(() => disposables.forEach(item => item.dispose())), { document: documentProvider, range: rangeProvider }];\n    }\n}\nexports.SemanticTokensFeature = SemanticTokensFeature;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cp = require(\"child_process\");\nconst path_1 = require(\"path\");\nconst isWindows = (process.platform === 'win32');\nconst isMacintosh = (process.platform === 'darwin');\nconst isLinux = (process.platform === 'linux');\nfunction terminate(process, cwd) {\n    if (isWindows) {\n        try {\n            // This we run in Atom execFileSync is available.\n            // Ignore stderr since this is otherwise piped to parent.stderr\n            // which might be already closed.\n            let options = {\n                stdio: ['pipe', 'pipe', 'ignore']\n            };\n            if (cwd) {\n                options.cwd = cwd;\n            }\n            cp.execFileSync('taskkill', ['/T', '/F', '/PID', process.pid.toString()], options);\n            return true;\n        }\n        catch (err) {\n            return false;\n        }\n    }\n    else if (isLinux || isMacintosh) {\n        try {\n            var cmd = path_1.join(__dirname, 'terminateProcess.sh');\n            var result = cp.spawnSync(cmd, [process.pid.toString()]);\n            return result.error ? false : true;\n        }\n        catch (err) {\n            return false;\n        }\n    }\n    else {\n        process.kill('SIGKILL');\n        return true;\n    }\n}\nexports.terminate = terminate;\n", "/* --------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n * ------------------------------------------------------------------------------------------ */\n'use strict';\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cp = require(\"child_process\");\nconst fs = require(\"fs\");\nconst SemVer = require(\"semver\");\nconst client_1 = require(\"./client\");\nconst vscode_1 = require(\"vscode\");\nconst vscode_languageserver_protocol_1 = require(\"vscode-languageserver-protocol\");\nconst colorProvider_1 = require(\"./colorProvider\");\nconst configuration_1 = require(\"./configuration\");\nconst implementation_1 = require(\"./implementation\");\nconst typeDefinition_1 = require(\"./typeDefinition\");\nconst workspaceFolders_1 = require(\"./workspaceFolders\");\nconst foldingRange_1 = require(\"./foldingRange\");\nconst declaration_1 = require(\"./declaration\");\nconst selectionRange_1 = require(\"./selectionRange\");\nconst progress_1 = require(\"./progress\");\nconst callHierarchy_proposed_1 = require(\"./callHierarchy.proposed\");\nconst semanticTokens_proposed_1 = require(\"./semanticTokens.proposed\");\nconst Is = require(\"./utils/is\");\nconst processes_1 = require(\"./utils/processes\");\n__export(require(\"./client\"));\nconst REQUIRED_VSCODE_VERSION = '^1.41.0'; // do not change format, updated by `updateVSCode` script\nvar Executable;\n(function (Executable) {\n    function is(value) {\n        return Is.string(value.command);\n    }\n    Executable.is = is;\n})(Executable || (Executable = {}));\nvar TransportKind;\n(function (TransportKind) {\n    TransportKind[TransportKind[\"stdio\"] = 0] = \"stdio\";\n    TransportKind[TransportKind[\"ipc\"] = 1] = \"ipc\";\n    TransportKind[TransportKind[\"pipe\"] = 2] = \"pipe\";\n    TransportKind[TransportKind[\"socket\"] = 3] = \"socket\";\n})(TransportKind = exports.TransportKind || (exports.TransportKind = {}));\nvar Transport;\n(function (Transport) {\n    function isSocket(value) {\n        let candidate = value;\n        return candidate && candidate.kind === TransportKind.socket && Is.number(candidate.port);\n    }\n    Transport.isSocket = isSocket;\n})(Transport || (Transport = {}));\nvar NodeModule;\n(function (NodeModule) {\n    function is(value) {\n        return Is.string(value.module);\n    }\n    NodeModule.is = is;\n})(NodeModule || (NodeModule = {}));\nvar StreamInfo;\n(function (StreamInfo) {\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.writer !== void 0 && candidate.reader !== void 0;\n    }\n    StreamInfo.is = is;\n})(StreamInfo || (StreamInfo = {}));\nvar ChildProcessInfo;\n(function (ChildProcessInfo) {\n    function is(value) {\n        let candidate = value;\n        return candidate && candidate.process !== void 0 && typeof candidate.detached === 'boolean';\n    }\n    ChildProcessInfo.is = is;\n})(ChildProcessInfo || (ChildProcessInfo = {}));\nclass LanguageClient extends client_1.BaseLanguageClient {\n    constructor(arg1, arg2, arg3, arg4, arg5) {\n        let id;\n        let name;\n        let serverOptions;\n        let clientOptions;\n        let forceDebug;\n        if (Is.string(arg2)) {\n            id = arg1;\n            name = arg2;\n            serverOptions = arg3;\n            clientOptions = arg4;\n            forceDebug = !!arg5;\n        }\n        else {\n            id = arg1.toLowerCase();\n            name = arg1;\n            serverOptions = arg2;\n            clientOptions = arg3;\n            forceDebug = arg4;\n        }\n        if (forceDebug === void 0) {\n            forceDebug = false;\n        }\n        super(id, name, clientOptions);\n        this._serverOptions = serverOptions;\n        this._forceDebug = forceDebug;\n        try {\n            this.checkVersion();\n        }\n        catch (error) {\n            if (Is.string(error.message)) {\n                this.outputChannel.appendLine(error.message);\n            }\n            throw error;\n        }\n    }\n    checkVersion() {\n        let codeVersion = SemVer.parse(vscode_1.version);\n        if (!codeVersion) {\n            throw new Error(`No valid VS Code version detected. Version string is: ${vscode_1.version}`);\n        }\n        // Remove the insider pre-release since we stay API compatible.\n        if (codeVersion.prerelease && codeVersion.prerelease.length > 0) {\n            codeVersion.prerelease = [];\n        }\n        if (!SemVer.satisfies(codeVersion, REQUIRED_VSCODE_VERSION)) {\n            throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${vscode_1.version}`);\n        }\n    }\n    stop() {\n        return super.stop().then(() => {\n            if (this._serverProcess) {\n                let toCheck = this._serverProcess;\n                this._serverProcess = undefined;\n                if (this._isDetached === void 0 || !this._isDetached) {\n                    this.checkProcessDied(toCheck);\n                }\n                this._isDetached = undefined;\n            }\n        });\n    }\n    checkProcessDied(childProcess) {\n        if (!childProcess) {\n            return;\n        }\n        setTimeout(() => {\n            // Test if the process is still alive. Throws an exception if not\n            try {\n                process.kill(childProcess.pid, 0);\n                processes_1.terminate(childProcess);\n            }\n            catch (error) {\n                // All is fine.\n            }\n        }, 2000);\n    }\n    handleConnectionClosed() {\n        this._serverProcess = undefined;\n        super.handleConnectionClosed();\n    }\n    createMessageTransports(encoding) {\n        function getEnvironment(env, fork) {\n            if (!env && !fork) {\n                return undefined;\n            }\n            let result = Object.create(null);\n            Object.keys(process.env).forEach(key => result[key] = process.env[key]);\n            if (fork) {\n                result['ELECTRON_RUN_AS_NODE'] = '1';\n                result['ELECTRON_NO_ASAR'] = '1';\n            }\n            if (env) {\n                Object.keys(env).forEach(key => result[key] = env[key]);\n            }\n            return result;\n        }\n        const debugStartWith = ['--debug=', '--debug-brk=', '--inspect=', '--inspect-brk='];\n        const debugEquals = ['--debug', '--debug-brk', '--inspect', '--inspect-brk'];\n        function startedInDebugMode() {\n            let args = process.execArgv;\n            if (args) {\n                return args.some((arg) => {\n                    return debugStartWith.some(value => arg.startsWith(value)) ||\n                        debugEquals.some(value => arg === value);\n                });\n            }\n            return false;\n        }\n        function assertStdio(process) {\n            if (process.stdin === null || process.stdout === null || process.stderr === null) {\n                throw new Error('Process created without stdio streams');\n            }\n        }\n        let server = this._serverOptions;\n        // We got a function.\n        if (Is.func(server)) {\n            return server().then((result) => {\n                if (client_1.MessageTransports.is(result)) {\n                    this._isDetached = !!result.detached;\n                    return result;\n                }\n                else if (StreamInfo.is(result)) {\n                    this._isDetached = !!result.detached;\n                    return { reader: new vscode_languageserver_protocol_1.StreamMessageReader(result.reader), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(result.writer) };\n                }\n                else {\n                    let cp;\n                    if (ChildProcessInfo.is(result)) {\n                        cp = result.process;\n                        this._isDetached = result.detached;\n                    }\n                    else {\n                        cp = result;\n                        this._isDetached = false;\n                    }\n                    cp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                    return { reader: new vscode_languageserver_protocol_1.StreamMessageReader(cp.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(cp.stdin) };\n                }\n            });\n        }\n        let json;\n        let runDebug = server;\n        if (runDebug.run || runDebug.debug) {\n            if (this._forceDebug || startedInDebugMode()) {\n                json = runDebug.debug;\n            }\n            else {\n                json = runDebug.run;\n            }\n        }\n        else {\n            json = server;\n        }\n        return this._getServerWorkingDir(json.options).then(serverWorkingDir => {\n            if (NodeModule.is(json) && json.module) {\n                let node = json;\n                let transport = node.transport || TransportKind.stdio;\n                if (node.runtime) {\n                    let args = [];\n                    let options = node.options || Object.create(null);\n                    if (options.execArgv) {\n                        options.execArgv.forEach(element => args.push(element));\n                    }\n                    args.push(node.module);\n                    if (node.args) {\n                        node.args.forEach(element => args.push(element));\n                    }\n                    let execOptions = Object.create(null);\n                    execOptions.cwd = serverWorkingDir;\n                    execOptions.env = getEnvironment(options.env, false);\n                    let pipeName = undefined;\n                    if (transport === TransportKind.ipc) {\n                        // exec options not correctly typed in lib\n                        execOptions.stdio = [null, null, null, 'ipc'];\n                        args.push('--node-ipc');\n                    }\n                    else if (transport === TransportKind.stdio) {\n                        args.push('--stdio');\n                    }\n                    else if (transport === TransportKind.pipe) {\n                        pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();\n                        args.push(`--pipe=${pipeName}`);\n                    }\n                    else if (Transport.isSocket(transport)) {\n                        args.push(`--socket=${transport.port}`);\n                    }\n                    args.push(`--clientProcessId=${process.pid.toString()}`);\n                    if (transport === TransportKind.ipc || transport === TransportKind.stdio) {\n                        let serverProcess = cp.spawn(node.runtime, args, execOptions);\n                        if (!serverProcess || !serverProcess.pid) {\n                            return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);\n                        }\n                        this._serverProcess = serverProcess;\n                        serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                        if (transport === TransportKind.ipc) {\n                            serverProcess.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return Promise.resolve({ reader: new vscode_languageserver_protocol_1.IPCMessageReader(serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(serverProcess) });\n                        }\n                        else {\n                            return Promise.resolve({ reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin) });\n                        }\n                    }\n                    else if (transport === TransportKind.pipe) {\n                        return vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport) => {\n                            let process = cp.spawn(node.runtime, args, execOptions);\n                            if (!process || !process.pid) {\n                                return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);\n                            }\n                            this._serverProcess = process;\n                            process.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            process.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return transport.onConnected().then((protocol) => {\n                                return { reader: protocol[0], writer: protocol[1] };\n                            });\n                        });\n                    }\n                    else if (Transport.isSocket(transport)) {\n                        return vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport) => {\n                            let process = cp.spawn(node.runtime, args, execOptions);\n                            if (!process || !process.pid) {\n                                return Promise.reject(`Launching server using runtime ${node.runtime} failed.`);\n                            }\n                            this._serverProcess = process;\n                            process.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            process.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            return transport.onConnected().then((protocol) => {\n                                return { reader: protocol[0], writer: protocol[1] };\n                            });\n                        });\n                    }\n                }\n                else {\n                    let pipeName = undefined;\n                    return new Promise((resolve, _reject) => {\n                        let args = node.args && node.args.slice() || [];\n                        if (transport === TransportKind.ipc) {\n                            args.push('--node-ipc');\n                        }\n                        else if (transport === TransportKind.stdio) {\n                            args.push('--stdio');\n                        }\n                        else if (transport === TransportKind.pipe) {\n                            pipeName = vscode_languageserver_protocol_1.generateRandomPipeName();\n                            args.push(`--pipe=${pipeName}`);\n                        }\n                        else if (Transport.isSocket(transport)) {\n                            args.push(`--socket=${transport.port}`);\n                        }\n                        args.push(`--clientProcessId=${process.pid.toString()}`);\n                        let options = node.options || Object.create(null);\n                        options.env = getEnvironment(options.env, true);\n                        options.execArgv = options.execArgv || [];\n                        options.cwd = serverWorkingDir;\n                        options.silent = true;\n                        if (transport === TransportKind.ipc || transport === TransportKind.stdio) {\n                            let sp = cp.fork(node.module, args || [], options);\n                            assertStdio(sp);\n                            this._serverProcess = sp;\n                            sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                            if (transport === TransportKind.ipc) {\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                resolve({ reader: new vscode_languageserver_protocol_1.IPCMessageReader(this._serverProcess), writer: new vscode_languageserver_protocol_1.IPCMessageWriter(this._serverProcess) });\n                            }\n                            else {\n                                resolve({ reader: new vscode_languageserver_protocol_1.StreamMessageReader(sp.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(sp.stdin) });\n                            }\n                        }\n                        else if (transport === TransportKind.pipe) {\n                            vscode_languageserver_protocol_1.createClientPipeTransport(pipeName).then((transport) => {\n                                let sp = cp.fork(node.module, args || [], options);\n                                assertStdio(sp);\n                                this._serverProcess = sp;\n                                sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                transport.onConnected().then((protocol) => {\n                                    resolve({ reader: protocol[0], writer: protocol[1] });\n                                });\n                            });\n                        }\n                        else if (Transport.isSocket(transport)) {\n                            vscode_languageserver_protocol_1.createClientSocketTransport(transport.port).then((transport) => {\n                                let sp = cp.fork(node.module, args || [], options);\n                                assertStdio(sp);\n                                this._serverProcess = sp;\n                                sp.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                sp.stdout.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                                transport.onConnected().then((protocol) => {\n                                    resolve({ reader: protocol[0], writer: protocol[1] });\n                                });\n                            });\n                        }\n                    });\n                }\n            }\n            else if (Executable.is(json) && json.command) {\n                let command = json;\n                let args = command.args || [];\n                let options = Object.assign({}, command.options);\n                options.cwd = options.cwd || serverWorkingDir;\n                let serverProcess = cp.spawn(command.command, args, options);\n                if (!serverProcess || !serverProcess.pid) {\n                    return Promise.reject(`Launching server using command ${command.command} failed.`);\n                }\n                serverProcess.stderr.on('data', data => this.outputChannel.append(Is.string(data) ? data : data.toString(encoding)));\n                this._serverProcess = serverProcess;\n                this._isDetached = !!options.detached;\n                return Promise.resolve({ reader: new vscode_languageserver_protocol_1.StreamMessageReader(serverProcess.stdout), writer: new vscode_languageserver_protocol_1.StreamMessageWriter(serverProcess.stdin) });\n            }\n            return Promise.reject(new Error(`Unsupported server configuration ` + JSON.stringify(server, null, 4)));\n        });\n    }\n    registerProposedFeatures() {\n        this.registerFeatures(ProposedFeatures.createAll(this));\n    }\n    registerBuiltinFeatures() {\n        super.registerBuiltinFeatures();\n        this.registerFeature(new configuration_1.ConfigurationFeature(this));\n        this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this));\n        this.registerFeature(new implementation_1.ImplementationFeature(this));\n        this.registerFeature(new colorProvider_1.ColorProviderFeature(this));\n        this.registerFeature(new workspaceFolders_1.WorkspaceFoldersFeature(this));\n        this.registerFeature(new foldingRange_1.FoldingRangeFeature(this));\n        this.registerFeature(new declaration_1.DeclarationFeature(this));\n        this.registerFeature(new selectionRange_1.SelectionRangeFeature(this));\n        this.registerFeature(new progress_1.ProgressFeature(this));\n    }\n    _mainGetRootPath() {\n        let folders = vscode_1.workspace.workspaceFolders;\n        if (!folders || folders.length === 0) {\n            return undefined;\n        }\n        let folder = folders[0];\n        if (folder.uri.scheme === 'file') {\n            return folder.uri.fsPath;\n        }\n        return undefined;\n    }\n    _getServerWorkingDir(options) {\n        let cwd = options && options.cwd;\n        if (!cwd) {\n            cwd = this.clientOptions.workspaceFolder\n                ? this.clientOptions.workspaceFolder.uri.fsPath\n                : this._mainGetRootPath();\n        }\n        if (cwd) {\n            // make sure the folder exists otherwise creating the process will fail\n            return new Promise(s => {\n                fs.lstat(cwd, (err, stats) => {\n                    s(!err && stats.isDirectory() ? cwd : undefined);\n                });\n            });\n        }\n        return Promise.resolve(undefined);\n    }\n}\nexports.LanguageClient = LanguageClient;\nclass SettingMonitor {\n    constructor(_client, _setting) {\n        this._client = _client;\n        this._setting = _setting;\n        this._listeners = [];\n    }\n    start() {\n        vscode_1.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this._listeners);\n        this.onDidChangeConfiguration();\n        return new vscode_1.Disposable(() => {\n            if (this._client.needsStop()) {\n                this._client.stop();\n            }\n        });\n    }\n    onDidChangeConfiguration() {\n        let index = this._setting.indexOf('.');\n        let primary = index >= 0 ? this._setting.substr(0, index) : this._setting;\n        let rest = index >= 0 ? this._setting.substr(index + 1) : undefined;\n        let enabled = rest ? vscode_1.workspace.getConfiguration(primary).get(rest, false) : vscode_1.workspace.getConfiguration(primary);\n        if (enabled && this._client.needsStart()) {\n            this._client.start();\n        }\n        else if (!enabled && this._client.needsStop()) {\n            this._client.stop();\n        }\n    }\n}\nexports.SettingMonitor = SettingMonitor;\n// Exporting proposed protocol.\nvar ProposedFeatures;\n(function (ProposedFeatures) {\n    function createAll(client) {\n        let result = [\n            new callHierarchy_proposed_1.CallHierarchyFeature(client),\n            new semanticTokens_proposed_1.SemanticTokensFeature(client)\n        ];\n        return result;\n    }\n    ProposedFeatures.createAll = createAll;\n})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));\n", "/* --------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n * ------------------------------------------------------------------------------------------ */\r\n\r\nimport * as vscode from 'vscode';\r\nimport { workspace, ExtensionContext, commands, window, Selection } from 'vscode';\r\nimport {\r\n\tLanguageClient,\r\n\tLanguageClientOptions,\r\n\tServerOptions\r\n} from 'vscode-languageclient';\r\nimport * as requirements from './requirements';\r\nimport * as net from 'net';\r\nimport * as child_process from 'child_process';\r\nimport * as lc from 'vscode-languageclient';\r\nimport { activateDebug } from './activateDebug'\r\nimport { DebugAdapterFactory } from './debugFactory'\r\nimport { MoosebookContentProvider } from './moosebookProvider';\r\n\r\nexport let client: LanguageClient;\r\nlet socket: net.Socket;\r\n\r\nexport async function activate(context: ExtensionContext) {\r\n\t// Testing Pharo can be used\r\n\tconsole.info('Start Pharo Language extension');\r\n\treturn requirements.resolveRequirements().catch(error => {\r\n\t\twindow.showErrorMessage(error.message, error.label).then((selection) => {\r\n\t\t\tif (error.label && error.label === selection && error.command) {\r\n\t\t\t\tcommands.executeCommand(error.command, error.commandParam);\r\n\t\t\t}\r\n\t\t});\r\n\t}).then (\r\n\t\tasync (requirements : requirements.RequirementsData) => {\r\n\t\t\r\n\t\t// Create the pharo language server client\r\n\t\tclient = createPharoLanguageServer(requirements, context);\r\n\t\t\r\n\t\t// Start the client. This will also launch the server\r\n\t\tcontext.subscriptions.push(client.start());\r\n\t\twindow.showInformationMessage('Client started');\r\n\t\r\n\t\t// Create new command\r\n\t\tcreateCommands(context);\r\n\r\n\t\t// Create debugguer\r\n\t\tlet factory = new DebugAdapterFactory();\r\n\t\tactivateDebug(context, factory);\r\n\r\n\t\t// Create Moosebook\r\n\t\tconsole.info('Start moosebook');\r\n\t\tconst moosebookContentProvider = new MoosebookContentProvider();\r\n\t\tcontext.subscriptions.push(vscode.notebook.registerNotebookContentProvider('moosebook', moosebookContentProvider));\r\n\t})\r\n\r\n}\r\n\r\nfunction createCommands(context: ExtensionContext) {\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.extensionVersion', commandPharoExtensionVersion));\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.printIt', commandPharoPrintIt));\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.showIt', commandPharoShowIt));\r\n\tcontext.subscriptions.push(vscode.commands.registerCommand('pharo.save', commandPharoSave));\r\n}\r\n\r\n\r\n\r\nexport function deactivate() {\r\n}\r\n\r\n/*\r\n * Section with extension commands\r\n */\r\n\r\nfunction commandPharoExtensionVersion() {\r\n\tclient.sendRequest(\"command:version\").then((result: string) => {\r\n\t\tconsole.log(result);\r\n\t\twindow.showInformationMessage(result);\r\n\t});\r\n}\r\n\r\nfunction commandPharoPrintIt() {\r\n\tlet editor = vscode.window.activeTextEditor;\r\n\tlet selection = editor.selection;\r\n\tclient.sendRequest('command:printIt', {\"line\": editor.document.getText(selection)}).then( (result: string) => {\r\n\t\teditor.edit(editBuilder => {\r\n\t\t\teditBuilder.replace( new vscode.Selection(selection.end, selection.end), ' \"' + result + '\" ');\r\n\t\t})\r\n\t}).catch((error) => window.showErrorMessage(error));\r\n}\r\n\r\nfunction commandPharoShowIt() {\r\n\tlet editor = vscode.window.activeTextEditor;\r\n\tclient.sendRequest('command:printIt', {\"line\": editor.document.getText(editor.selection)}).then( (result: string) => {\r\n\t\twindow.showInformationMessage(result);\r\n\t}).catch((error) => window.showErrorMessage(error));\r\n}\r\n\r\nfunction commandPharoSave() {\r\n\tclient.sendRequest('command:save').then( (result: string) => {\r\n\t\twindow.showInformationMessage(result);\r\n\t}).catch((error) => window.showErrorMessage(error));\r\n}\r\n\r\n/*\r\n * Section with function for Pharo Language Server\r\n */\r\n\r\nfunction createPharoLanguageServer(requirements: requirements.RequirementsData, context: ExtensionContext) {\r\n\tlet serverOptions: ServerOptions = () => createServerWithSocket(requirements.pathToVM, requirements.pathToImage, context);\r\n\r\n\t// Options to control the language client\r\n\tlet clientOptions: LanguageClientOptions = {\r\n\t\t// Register the server for plain text documents\r\n\t\tdocumentSelector: [{ scheme: 'file', language: 'pharo' }],\r\n\t\tsynchronize: {\r\n\t\t\t// Notify the server about file changes to '.clientrc files contained in the workspace\r\n\t\t\tfileEvents: workspace.createFileSystemWatcher('**/.clientrc')\r\n\t\t}\r\n\t};\r\n\r\n\t// Create the language client and start the client.\r\n\treturn new LanguageClient(\r\n\t\t'pharoLanguageServer',\r\n\t\t'Pharo Language Server',\r\n\t\tserverOptions,\r\n\t\tclientOptions\r\n\t);\r\n}\r\n\r\nasync function createServerWithSocket(pharoPath: string, pathToImage: string, context: ExtensionContext) {\r\n    let dls: child_process.ChildProcess;\r\n\tdls = child_process.spawn(pharoPath.trim(), [\r\n\t\tpathToImage, 'st', context.asAbsolutePath('/res/run-server.st')\r\n\t]);\r\n\r\n\tawait sleep(8000); // Wait that the Pharo server start\r\n\r\n\tsocket = net.connect({ port: 4000, host: '127.0.0.1' }, () => {\r\n\t\t// 'connect' listener.\r\n\t\tconsole.log('connected to server!');\r\n\t});\r\n\r\n\tlet result: lc.StreamInfo = {\r\n\t\twriter: socket,\r\n\t\treader: socket\r\n\t};\r\n\treturn Promise.resolve(result);\r\n}\r\n\r\nasync function sleep(ms: number) {\r\n\treturn new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n", "import * as vscode from 'vscode';\r\n\r\nexport interface RequirementsData {\r\n    pathToVM: string;\r\n    pathToImage: string;\r\n}\r\n\r\ninterface ErrorData {\r\n    message: string;\r\n    label: string;\r\n    command: string;\r\n    commandParam: any;\r\n}\r\n\r\nexport async function resolveRequirements(): Promise<RequirementsData> {\r\n    const pathToVM = await checkPathToVM();\r\n\tconst pathToImage = await checkPathToImage();\r\n    return Promise.resolve({ pathToVM: pathToVM, pathToImage: pathToImage });\r\n}\r\n\r\nasync function checkPathToVM(): Promise<string> {\r\n\treturn new Promise(async (resolve, reject) => {\r\n\t\tif (vscode.workspace.getConfiguration('pharo').get('pathToVM') === '') {\r\n\t\t\treject({\r\n\t\t\t\tmessage: 'Path to VM not set',\r\n\t\t\t\tlabel: 'Open settings',\r\n\t\t\t\tcommand: 'workbench.action.openSettingsJson'\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn resolve(vscode.workspace.getConfiguration('pharo').get('pathToVM'));\r\n\r\n\t});\r\n}\r\n\r\nasync function checkPathToImage(): Promise<string> {\r\n\treturn new Promise(async (resolve, reject) => {\r\n\t\tif (vscode.workspace.getConfiguration('pharo').get('pathToImage') === '') {\r\n\t\t\treject({\r\n\t\t\t\tmessage: 'Path to Image not set',\r\n\t\t\t\tlabel: 'Open settings',\r\n\t\t\t\tcommand: 'workbench.action.openSettingsJson'\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn resolve(vscode.workspace.getConfiguration('pharo').get('pathToImage'));\r\n\t});\r\n}", "import * as vscode from 'vscode';\r\n\r\nexport function activateDebug(context: vscode.ExtensionContext, factory: vscode.DebugAdapterDescriptorFactory) {\r\n\tcontext.subscriptions.push(\r\n\t\tvscode.commands.registerCommand('extension.pharo-debug.debugEditorContents', (resource: vscode.Uri) => {\r\n\t\t\tlet targetResource = resource;\r\n\t\t\tif (!targetResource && vscode.window.activeTextEditor) {\r\n\t\t\t\ttargetResource = vscode.window.activeTextEditor.document.uri;\r\n\t\t\t}\r\n\t\t\tif (targetResource) {\r\n\t\t\t\tvscode.debug.startDebugging(undefined, {\r\n\t\t\t\t\ttype: 'pharodb',\r\n\t\t\t\t\tname: 'Debug File',\r\n\t\t\t\t\trequest: 'launch',\r\n\t\t\t\t\tprogram: targetResource.fsPath\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t})\r\n\t);\r\n\r\n\r\n\tcontext.subscriptions.push(vscode.debug.registerDebugAdapterDescriptorFactory('pharodb', factory));\r\n\r\n}", "import * as vscode from 'vscode';\r\nimport { client } from './extension';\r\n\r\nexport class DebugAdapterFactory implements vscode.DebugAdapterDescriptorFactory {\r\n\r\n\tasync createDebugAdapterDescriptor(session: vscode.DebugSession, executable: vscode.DebugAdapterExecutable): Promise<vscode.ProviderResult<vscode.DebugAdapterDescriptor>> {\r\n\r\n\t\tconst port : Promise<number> = client.sendRequest('dap:startServer', { }).then((result: number) => {\r\n\t\t\treturn result;\r\n\t\t})\r\n\r\n\t\t// make VS Code connect to debug server\r\n\t\treturn new vscode.DebugAdapterServer(await port, 'localhost');\r\n\t}\r\n\r\n}", "import * as vscode from 'vscode';\r\nimport { Moosebook } from './moosebook';\r\n\r\ninterface RawNotebookCell {\r\n\tlanguage: string;\r\n\tvalue: string;\r\n\tkind: vscode.NotebookCellKind;\r\n\teditable?: boolean;\r\n}\r\n\r\ninterface ProjectAssociation {\r\n\t(key: string): boolean;\r\n}\r\n\r\n\r\nexport class MoosebookContentProvider implements  vscode.NotebookContentProvider, vscode.NotebookKernel {\r\n\treadonly id = 'moosebookKernel';\r\n\tpublic label = 'Moosebook Kernel';\r\n\r\n\tprivate readonly _associations = new Map<string, [ProjectAssociation, Moosebook]>();\r\n\tprivate _localDisposables: vscode.Disposable[] = [];\r\n\tsupportedLanguages?: string[] = ['pharo'];\r\n\tprivate _executionOrder = 0;\r\n\r\n\tconstructor() {\r\n\t\tthis._localDisposables.push(\r\n\t\t\tvscode.notebook.onDidOpenNotebookDocument(document => {\r\n\t\t\t\tconst docKey = document.uri.toString();\r\n\t\t\t\tif (!this.lookupMoosebook(docKey)) {\r\n\t\t\t\t\tconst project = new Moosebook(document);\r\n\t\t\t\t\tthis.register(\r\n\t\t\t\t\t\tdocKey,\r\n\t\t\t\t\t\tproject,\r\n\t\t\t\t\t\tkey => document.cells.some(cell => cell.index.toString() === key) || (key === docKey),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tvscode.notebook.onDidCloseNotebookDocument(document => {\r\n\t\t\t\tconst project = this.unregister(document.uri.toString());\r\n\t\t\t\tif (project) {\r\n\t\t\t\t\tproject.dispose();\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t);\r\n\t\tvscode.notebook.registerNotebookKernelProvider({\r\n\t\t\tviewType: 'moosebook',\r\n\t\t}, {\r\n\t\t\tprovideKernels: () => {\r\n\t\t\t\treturn [this];\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinterrupt?(document: vscode.NotebookDocument): void {\r\n\t\tthrow new Error('Method not implemented.');\r\n\t}\r\n\r\n\tasync executeCellsRequest(document: vscode.NotebookDocument, ranges: vscode.NotebookCellRange[]) {\r\n\t\tconst cells: vscode.NotebookCell[] = [];\r\n\t\tfor (let range of ranges) {\r\n\t\t\tfor (let i = range.start; i < range.end; i++) {\r\n\t\t\t\tcells.push(document.cells[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._executeCells(cells);\r\n\t}\r\n\r\n\tprivate async _executeCells(cells: vscode.NotebookCell[]): Promise<void> {\r\n\t\tfor (const cell of cells) {\r\n\t\t\tconst execution = vscode.notebook.createNotebookCellExecutionTask(cell.notebook.uri, cell.index, this.id)!;\r\n\t\t\tawait this._doExecuteCell(execution);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async _doExecuteCell(execution: vscode.NotebookCellExecutionTask): Promise<void> {\r\n\r\n\t\texecution.executionOrder = ++this._executionOrder;\r\n\t\texecution.start({ startTime: Date.now() });\r\n\r\n\t\tlet output = {mimetype: 'text/html', content: 'error... '};\r\n\t\tlet error: Error | undefined;\r\n\t\tconst moosebook = this.lookupMoosebook(execution.cell.index);\r\n\t\ttry {\r\n\t\t\toutput = await moosebook.eval(execution.cell);\r\n\t\t} catch(err) {\r\n\t\t\texecution.replaceOutput([new vscode.NotebookCellOutput([\r\n\t\t\t\tnew vscode.NotebookCellOutputItem('application/x.notebook.error-traceback', {\r\n\t\t\t\t\tename: err instanceof Error && err.name || 'error',\r\n\t\t\t\t\tevalue: err instanceof Error && err.message || JSON.stringify(err, undefined, 4),\r\n\t\t\t\t\ttraceback: []\r\n\t\t\t\t})\r\n\t\t\t])]);\r\n\t\t\texecution.end({ success: false });\r\n\t\t\treturn;\r\n\t\t}\r\n\t\r\n\r\n\t\texecution.replaceOutput([new vscode.NotebookCellOutput([\r\n\t\t\tnew vscode.NotebookCellOutputItem(output.mimetype, output.content)])]);\r\n\t\texecution.end({ success: true });\r\n\t}\r\n\r\n\r\n\r\n\r\n\tpublic lookupMoosebook(keyOrUri: string | number | vscode.Uri | undefined): Moosebook | undefined {\r\n\t\tif (keyOrUri) {\r\n\t\t\tlet key: string;\r\n\t\t\tif (typeof keyOrUri === 'string') {\r\n\t\t\t\tkey = keyOrUri;\r\n\t\t\t} else {\r\n\t\t\t\tkey = keyOrUri.toString();\r\n\t\t\t}\r\n\t\t\tfor (let [association, value] of this._associations.values()) {\r\n\t\t\t\tif (association(key)) {\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\tasync openNotebook(uri: vscode.Uri): Promise<vscode.NotebookData> {\r\n\t\tlet contents = '';\r\n\t\ttry {\r\n\t\t\tcontents = Buffer.from(await vscode.workspace.fs.readFile(uri)).toString('utf8');\r\n\t\t} catch {\r\n\t\t}\r\n\r\n\t\tlet raw: RawNotebookCell[];\r\n\t\ttry {\r\n\t\t\traw = <RawNotebookCell[]>JSON.parse(contents);\r\n\t\t} catch {\r\n\t\t\traw = [];\r\n\t\t}\r\n\r\n\t\tconst notebookData: vscode.NotebookData = {\r\n\t\t\tmetadata: new vscode.NotebookDocumentMetadata().with({ editable: true }),\r\n\t\t\tcells: raw.map(item => ({\r\n\t\t\t\tkind: item.kind,\r\n\t\t\t\tsource: item.value,\r\n\t\t\t\tlanguage: item.language,\r\n\t\t\t\toutputs: [],\r\n\t\t\t\tmetadata: new vscode.NotebookCellMetadata().with({\r\n\t\t\t\t\teditable: true,\r\n\t\t\t\t\tbreakpointMargin: false\r\n\t\t\t\t })\r\n\t\t\t}))\r\n\t\t};\r\n\t\treturn notebookData;\r\n\t}\r\n\r\n\tpublic saveNotebook(document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise<void> {\r\n\t\treturn this._save(document, document.uri);\r\n\t}\r\n\r\n\tpublic saveNotebookAs(targetResource: vscode.Uri, document: vscode.NotebookDocument, _cancellation: vscode.CancellationToken): Promise<void> {\r\n\t\treturn this._save(document, targetResource);\r\n\t}\r\n\r\n\tasync resolveNotebook(_document: vscode.NotebookDocument, _webview: vscode.NotebookCommunication): Promise<void> {\r\n\t\t// nothing\r\n\t}\r\n\r\n\tasync backupNotebook(document: vscode.NotebookDocument, context: vscode.NotebookDocumentBackupContext, _cancellation: vscode.CancellationToken): Promise<vscode.NotebookDocumentBackup> {\r\n\t\treturn { id: '', delete: () => {} };\r\n\t}\r\n\r\n\tpublic dispose() {\r\n\t}\r\n\r\n\t// ---- private ----\r\n\r\n\tprivate async _save(document: vscode.NotebookDocument, targetResource: vscode.Uri): Promise<void> {\r\n\t\tlet contents: RawNotebookCell[] = [];\r\n\t\tfor (let cell of document.cells) {\r\n\t\t\tcontents.push({\r\n\t\t\t\tkind: cell.kind,\r\n\t\t\t\tlanguage: cell.document.languageId,\r\n\t\t\t\tvalue: cell.document.getText(),\r\n\t\t\t});\r\n\t\t}\r\n\t\tawait vscode.workspace.fs.writeFile(targetResource, Buffer.from(JSON.stringify(contents)));\r\n\t}\r\n\r\n\tprivate register(key: string, project: Moosebook, association: ProjectAssociation) {\r\n\t\tthis._associations.set(key, [association, project]);\r\n\t}\r\n\r\n\tprivate unregister(key: string): Moosebook | undefined {\r\n\t\tconst project = this.lookupMoosebook(key);\r\n\t\tif (project) {\r\n\t\t\tthis._associations.delete(key);\r\n\t\t}\r\n\t\treturn project;\r\n\t}\r\n}", "/*---------------------------------------------------------------------------------------------\r\n *  Copyright (c) Microsoft Corporation. All rights reserved.\r\n *  Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as vscode from 'vscode';\r\nimport { client } from './extension';\r\n\r\ninterface PharoResponse {\r\n\tmimetype: string,\r\n\tcontent: string\r\n}\r\n\r\n\r\nexport class Moosebook implements vscode.Disposable {\r\n\r\n\r\n\tconstructor(doc: vscode.NotebookDocument) {\r\n\t\t\r\n\t}\r\n\r\n\tasync dispose() {\r\n\t\t\r\n\t}\r\n\r\n\tpublic async restartKernel() {\r\n\r\n\t}\r\n\r\n\tpublic async toggleDebugging(document: vscode.NotebookDocument) {\r\n\r\n\t}\r\n\r\n\tpublic async eval(cell: vscode.NotebookCell): Promise<PharoResponse> {\r\n\t\t// Eval\r\n\t\treturn client.sendRequest('command:notebookPrintIt', {\"line\": cell.document.getText()}).then( (result: PharoResponse) => {\r\n\t\t\tif (result.mimetype == 'error')\r\n\t\t\tthrow new Error(result.content);\r\n\t\t\treturn result;\r\n\t\t}).catch((error) => { throw new Error(error);\r\n\t\t});\r\n\t}\r\n\r\n\tpublic addDebugSession(session: vscode.DebugSession) {\r\n\r\n\t}\r\n\r\n\tpublic removeDebugSession(session: vscode.DebugSession) {\r\n\r\n\t}\r\n\r\n}\r\n"],
-  "mappings": "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",
-  "names": []
-}
diff --git a/samples/hello.moosebook b/samples/hello.moosebook
index e69de29..8a9c034 100644
--- a/samples/hello.moosebook
+++ b/samples/hello.moosebook
@@ -0,0 +1 @@
+[{"kind":2,"language":"pharo","value":""}]
\ No newline at end of file
diff --git a/src/extension.ts b/src/extension.ts
index 56c899c..09be460 100644
--- a/src/extension.ts
+++ b/src/extension.ts
@@ -50,6 +50,7 @@ export async function activate(context: ExtensionContext) {
 		// Create Moosebook
 		console.info('Start moosebook');
 		const moosebookContentProvider = new MoosebookContentProvider();
+		context.subscriptions.push(vscode.notebook.registerNotebookKernelProvider({ viewType: 'moosebook' }, moosebookContentProvider));
 		context.subscriptions.push(vscode.notebook.registerNotebookContentProvider('moosebook', moosebookContentProvider));
 	})
 
diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
index a996704..0cc3b4d 100644
--- a/src/moosebookProvider.ts
+++ b/src/moosebookProvider.ts
@@ -13,7 +13,7 @@ interface ProjectAssociation {
 }
 
 
-export class MoosebookContentProvider implements  vscode.NotebookContentProvider, vscode.NotebookKernel {
+export class MoosebookContentProvider implements  vscode.NotebookContentProvider, vscode.NotebookKernel, vscode.NotebookKernelProvider {
 	readonly id = 'moosebookKernel';
 	public label = 'Moosebook Kernel';
 
@@ -42,13 +42,10 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 				}
 			}),
 		);
-		vscode.notebook.registerNotebookKernelProvider({
-			viewType: 'moosebook',
-		}, {
-			provideKernels: () => {
-				return [this];
-			}
-		});
+	}
+
+	provideKernels() {
+		return [this];
 	}
 
 	interrupt?(document: vscode.NotebookDocument): void {
diff --git a/src/types/vscode.d.ts b/src/vscode.d.ts
similarity index 97%
rename from src/types/vscode.d.ts
rename to src/vscode.d.ts
index 6052472..b8f0707 100644
--- a/src/types/vscode.d.ts
+++ b/src/vscode.d.ts
@@ -2271,14 +2271,10 @@ declare module 'vscode' {
 		 * there is a currently active editor.
 		 * @param context Context carrying additional information.
 		 * @param token A cancellation token.
-		 *
-		 * @return An array of code actions, such as quick fixes or refactorings. The lack of a result can be signaled
-		 * by returning `undefined`, `null`, or an empty array.
-		 *
-		 * We also support returning `Command` for legacy reasons, however all new extensions should return
-		 * `CodeAction` object instead.
+		 * @return An array of commands, quick fixes, or refactorings or a thenable of such. The lack of a result can be
+		 * signaled by returning `undefined`, `null`, or an empty array.
 		 */
-		provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(Command | T)[]>;
+		provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(Command | CodeAction)[]>;
 
 		/**
 		 * Given a code action fill in its [`edit`](#CodeAction.edit)-property. Changes to
@@ -2668,134 +2664,6 @@ declare module 'vscode' {
 		provideEvaluatableExpression(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<EvaluatableExpression>;
 	}
 
-	/**
-	 * Provide inline value as text.
-	 */
-	export class InlineValueText {
-		/**
-		 * The document range for which the inline value applies.
-		 */
-		readonly range: Range;
-		/**
-		 * The text of the inline value.
-		 */
-		readonly text: string;
-		/**
-		 * Creates a new InlineValueText object.
-		 *
-		 * @param range The document line where to show the inline value.
-		 * @param text The value to be shown for the line.
-		 */
-		constructor(range: Range, text: string);
-	}
-
-	/**
-	 * Provide inline value through a variable lookup.
-	 * If only a range is specified, the variable name will be extracted from the underlying document.
-	 * An optional variable name can be used to override the extracted name.
-	 */
-	export class InlineValueVariableLookup {
-		/**
-		 * The document range for which the inline value applies.
-		 * The range is used to extract the variable name from the underlying document.
-		 */
-		readonly range: Range;
-		/**
-		 * If specified the name of the variable to look up.
-		 */
-		readonly variableName?: string;
-		/**
-		 * How to perform the lookup.
-		 */
-		readonly caseSensitiveLookup: boolean;
-		/**
-		 * Creates a new InlineValueVariableLookup object.
-		 *
-		 * @param range The document line where to show the inline value.
-		 * @param variableName The name of the variable to look up.
-		 * @param caseSensitiveLookup How to perform the lookup. If missing lookup is case sensitive.
-		 */
-		constructor(range: Range, variableName?: string, caseSensitiveLookup?: boolean);
-	}
-
-	/**
-	 * Provide an inline value through an expression evaluation.
-	 * If only a range is specified, the expression will be extracted from the underlying document.
-	 * An optional expression can be used to override the extracted expression.
-	 */
-	export class InlineValueEvaluatableExpression {
-		/**
-		 * The document range for which the inline value applies.
-		 * The range is used to extract the evaluatable expression from the underlying document.
-		 */
-		readonly range: Range;
-		/**
-		 * If specified the expression overrides the extracted expression.
-		 */
-		readonly expression?: string;
-		/**
-		 * Creates a new InlineValueEvaluatableExpression object.
-		 *
-		 * @param range The range in the underlying document from which the evaluatable expression is extracted.
-		 * @param expression If specified overrides the extracted expression.
-		 */
-		constructor(range: Range, expression?: string);
-	}
-
-	/**
-	 * Inline value information can be provided by different means:
-	 * - directly as a text value (class InlineValueText).
-	 * - as a name to use for a variable lookup (class InlineValueVariableLookup)
-	 * - as an evaluatable expression (class InlineValueEvaluatableExpression)
-	 * The InlineValue types combines all inline value types into one type.
-	 */
-	export type InlineValue = InlineValueText | InlineValueVariableLookup | InlineValueEvaluatableExpression;
-
-	/**
-	 * A value-object that contains contextual information when requesting inline values from a InlineValuesProvider.
-	 */
-	export interface InlineValueContext {
-
-		/**
-		 * The stack frame (as a DAP Id) where the execution has stopped.
-		 */
-		readonly frameId: number;
-
-		/**
-		 * The document range where execution has stopped.
-		 * Typically the end position of the range denotes the line where the inline values are shown.
-		 */
-		readonly stoppedLocation: Range;
-	}
-
-	/**
-	 * The inline values provider interface defines the contract between extensions and the VS Code debugger inline values feature.
-	 * In this contract the provider returns inline value information for a given document range
-	 * and VS Code shows this information in the editor at the end of lines.
-	 */
-	export interface InlineValuesProvider {
-
-		/**
-		 * An optional event to signal that inline values have changed.
-		 * @see [EventEmitter](#EventEmitter)
-		 */
-		onDidChangeInlineValues?: Event<void> | undefined;
-
-		/**
-		 * Provide "inline value" information for a given document and range.
-		 * VS Code calls this method whenever debugging stops in the given document.
-		 * The returned inline values information is rendered in the editor at the end of lines.
-		 *
-		 * @param document The document for which the inline values information is needed.
-		 * @param viewPort The visible document range for which inline values should be computed.
-		 * @param context A bag containing contextual information like the current location.
-		 * @param token A cancellation token.
-		 * @return An array of InlineValueDescriptors or a thenable that resolves to such. The lack of a result can be
-		 * signaled by returning `undefined` or `null`.
-		 */
-		provideInlineValues(document: TextDocument, viewPort: Range, context: InlineValueContext, token: CancellationToken): ProviderResult<InlineValue[]>;
-	}
-
 	/**
 	 * A document highlight kind.
 	 */
@@ -3364,7 +3232,7 @@ declare module 'vscode' {
 		appendPlaceholder(value: string | ((snippet: SnippetString) => any), number?: number): SnippetString;
 
 		/**
-		 * Builder-function that appends a choice (`${1|a,b,c|}`) to
+		 * Builder-function that appends a choice (`${1|a,b,c}`) to
 		 * the [`value`](#SnippetString.value) of this snippet string.
 		 *
 		 * @param values The values for choices - the array of strings
@@ -6674,10 +6542,6 @@ declare module 'vscode' {
 		 * tasks are always fully resolved. A valid default implementation for the
 		 * `resolveTask` method is to return `undefined`.
 		 *
-		 * Note that when filling in the properties of `task`, you _must_ be sure to
-		 * use the exact same `TaskDefinition` and not create a new one. Other properties
-		 * may be changed.
-		 *
 		 * @param task The task to resolve.
 		 * @param token A cancellation token.
 		 * @return The resolved task
@@ -7800,13 +7664,6 @@ declare module 'vscode' {
 		 * from the user's workspace.
 		 */
 		readonly backupId?: string;
-
-		/**
-		 * If the URI is an untitled file, this will be populated with the byte data of that file
-		 *
-		 * If this is provided, your extension should utilize this byte data rather than executing fs APIs on the URI passed in
-		 */
-		readonly untitledDocumentData?: Uint8Array;
 	}
 
 	/**
@@ -8045,24 +7902,6 @@ declare module 'vscode' {
 		 */
 		export const sessionId: string;
 
-		/**
-		 * Indicates that this is a fresh install of the application.
-		 * `true` if within the first day of installation otherwise `false`.
-		 */
-		export const isNewAppInstall: boolean;
-
-		/**
-		 * Indicates whether the users has telemetry enabled.
-		 * Can be observed to determine if the extension should send telemetry.
-		 */
-		export const isTelemetryEnabled: boolean;
-
-		/**
-		 * An [event](#Event) which fires when the user enabled or disables telemetry.
-		 * `true` if the user has enabled telemetry or `false` if the user has disabled telemetry.
-		 */
-		export const onDidChangeTelemetryEnabled: Event<boolean>;
-
 		/**
 		 * The name of a remote. Defined by extensions, popular samples are `wsl` for the Windows
 		 * Subsystem for Linux or `ssh-remote` for remotes using a secure shell.
@@ -9272,7 +9111,7 @@ declare module 'vscode' {
 		/**
 		 * Object with environment variables that will be added to the VS Code process.
 		 */
-		env?: { [key: string]: string | null | undefined };
+		env?: { [key: string]: string | null };
 
 		/**
 		 * Whether the terminal process environment should be exactly as provided in
@@ -10211,16 +10050,9 @@ declare module 'vscode' {
 	}
 
 	/**
-	 * Namespace for dealing with the current workspace. A workspace is the collection of one
-	 * or more folders that are opened in a VS Code window (instance).
-	 *
-	 * It is also possible to open VS Code without a workspace. For example, when you open a
-	 * new VS Code window by selecting a file from your platform's File menu, you will not be
-	 * inside a workspace. In this mode, some of VS Code's capabilities are reduced but you can
-	 * still open text files and edit them.
-	 *
-	 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information on
-	 * the concept of workspaces in VS Code.
+	 * Namespace for dealing with the current workspace. A workspace is the representation
+	 * of the folder that has been opened. There is no workspace when just a file but not a
+	 * folder has been opened.
 	 *
 	 * The workspace offers support for [listening](#workspace.createFileSystemWatcher) to fs
 	 * events and for [finding](#workspace.findFiles) files. Both perform well and run _outside_
@@ -10237,33 +10069,22 @@ declare module 'vscode' {
 		export const fs: FileSystem;
 
 		/**
-		 * The workspace folder that is open in VS Code. `undefined` when no workspace
+		 * The folder that is open in the editor. `undefined` when no folder
 		 * has been opened.
 		 *
-		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information
-		 * on workspaces in VS Code.
-		 *
 		 * @deprecated Use [`workspaceFolders`](#workspace.workspaceFolders) instead.
 		 */
 		export const rootPath: string | undefined;
 
 		/**
-		 * List of workspace folders that are open in VS Code. `undefined when no workspace
-		 * has been opened.
-		 *
-		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information
-		 * on workspaces in VS Code.
-		 *
+		 * List of workspace folders or `undefined` when no folder is open.
 		 * *Note* that the first entry corresponds to the value of `rootPath`.
 		 */
 		export const workspaceFolders: ReadonlyArray<WorkspaceFolder> | undefined;
 
 		/**
-		 * The name of the workspace. `undefined` when no workspace
+		 * The name of the workspace. `undefined` when no folder
 		 * has been opened.
-		 *
-		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information on
-		 * the concept of workspaces in VS Code.
 		 */
 		export const name: string | undefined;
 
@@ -10279,7 +10100,7 @@ declare module 'vscode' {
 		 * for a workspace that is untitled and not yet saved.
 		 *
 		 * Depending on the workspace that is opened, the value will be:
-		 *  * `undefined` when no workspace is opened
+		 *  * `undefined` when no workspace or  a single folder is opened
 		 *  * the path of the workspace file as `Uri` otherwise. if the workspace
 		 * is untitled, the returned URI will use the `untitled:` scheme
 		 *
@@ -10291,9 +10112,6 @@ declare module 'vscode' {
 		 * vscode.commands.executeCommand('vscode.openFolder', uriOfWorkspace);
 		 * ```
 		 *
-		 * Refer to https://code.visualstudio.com/docs/editor/workspaces for more information on
-		 * the concept of workspaces in VS Code.
-		 *
 		 * **Note:** it is not advised to use `workspace.workspaceFile` to write
 		 * configuration data into the file. You can use `workspace.getConfiguration().update()`
 		 * for that purpose which will work both when a single folder is opened as
@@ -10926,21 +10744,6 @@ declare module 'vscode' {
 		 */
 		export function registerEvaluatableExpressionProvider(selector: DocumentSelector, provider: EvaluatableExpressionProvider): Disposable;
 
-		/**
-		 * Register a provider that returns data for the debugger's 'inline value' feature.
-		 * Whenever the generic VS Code debugger has stopped in a source file, providers registered for the language of the file
-		 * are called to return textual data that will be shown in the editor at the end of lines.
-		 *
-		 * Multiple providers can be registered for a language. In that case providers are asked in
-		 * parallel and the results are merged. A failing provider (rejected promise or exception) will
-		 * not cause a failure of the whole operation.
-		 *
-		 * @param selector A selector that defines the documents this provider is applicable to.
-		 * @param provider An inline values provider.
-		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
-		 */
-		export function registerInlineValuesProvider(selector: DocumentSelector, provider: InlineValuesProvider): Disposable;
-
 		/**
 		 * Register a document highlight provider.
 		 *
@@ -11685,7 +11488,7 @@ declare module 'vscode' {
 		readonly path: string;
 
 		/**
-		 * Create a description for a debug adapter running as a Named Pipe (on Windows)/UNIX Domain Socket (on non-Windows) based server.
+		 * Create a description for a debug adapter running as a socket based server.
 		 */
 		constructor(path: string);
 	}
@@ -12528,84 +12331,6 @@ declare module 'vscode' {
 		readonly provider: AuthenticationProviderInformation;
 	}
 
-	/**
-	 * Options for creating an [AuthenticationProvider](#AuthenticationProvider).
-	 */
-	export interface AuthenticationProviderOptions {
-		/**
-		 * Whether it is possible to be signed into multiple accounts at once with this provider.
-		 * If not specified, will default to false.
-		*/
-		readonly supportsMultipleAccounts?: boolean;
-	}
-
-	/**
-	* An [event](#Event) which fires when an [AuthenticationSession](#AuthenticationSession) is added, removed, or changed.
-	*/
-	export interface AuthenticationProviderAuthenticationSessionsChangeEvent {
-		/**
-		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been added.
-		*/
-		readonly added?: ReadonlyArray<AuthenticationSession>;
-
-		/**
-		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been removed.
-		 */
-		readonly removed?: ReadonlyArray<AuthenticationSession>;
-
-		/**
-		 * The [AuthenticationSession](#AuthenticationSession)s of the [AuthenticationProvider](#AuthentiationProvider) that have been changed.
-		 * A session changes when its data excluding the id are updated. An example of this is a session refresh that results in a new
-		 * access token being set for the session.
-		 */
-		readonly changed?: ReadonlyArray<AuthenticationSession>;
-	}
-
-	/**
-	 * A provider for performing authentication to a service.
-	 */
-	export interface AuthenticationProvider {
-		/**
-		 * An [event](#Event) which fires when the array of sessions has changed, or data
-		 * within a session has changed.
-		 */
-		readonly onDidChangeSessions: Event<AuthenticationProviderAuthenticationSessionsChangeEvent>;
-
-		/**
-		 * Get a list of sessions.
-		 * @param scopes An optional list of scopes. If provided, the sessions returned should match
-		 * these permissions, otherwise all sessions should be returned.
-		 * @returns A promise that resolves to an array of authentication sessions.
-		 */
-		getSessions(scopes?: string[]): Thenable<ReadonlyArray<AuthenticationSession>>;
-
-		/**
-		 * Prompts a user to login.
-		 *
-		 * If login is successful, the onDidChangeSessions event should be fired.
-		 *
-		 * If login fails, a rejected promise should be returned.
-		 *
-		 * If the provider has specified that it does not support multiple accounts,
-		 * then this should never be called if there is already an existing session matching these
-		 * scopes.
-		 * @param scopes A list of scopes, permissions, that the new session should be created with.
-		 * @returns A promise that resolves to an authentication session.
-		 */
-		createSession(scopes: string[]): Thenable<AuthenticationSession>;
-
-		/**
-		 * Removes the session corresponding to session id.
-		 *
-		 * If the removal is successful, the onDidChangeSessions event should be fired.
-		 *
-		 * If a session cannot be removed, the provider should reject with an error message.
-		 * @param sessionId The id of the session to remove.
-		 */
-		removeSession(sessionId: string): Thenable<void>;
-	}
-
-
 	/**
 	 * Namespace for authentication.
 	 */
@@ -12645,20 +12370,6 @@ declare module 'vscode' {
 		 * been added, removed, or changed.
 		 */
 		export const onDidChangeSessions: Event<AuthenticationSessionsChangeEvent>;
-
-		/**
-		 * Register an authentication provider.
-		 *
-		 * There can only be one provider per id and an error is being thrown when an id
-		 * has already been used by another provider. Ids are case-sensitive.
-		 *
-		 * @param id The unique identifier of the provider.
-		 * @param label The human-readable name of the provider.
-		 * @param provider The authentication provider provider.
-		 * @params options Additional options for the provider.
-		 * @return A [disposable](#Disposable) that unregisters this provider when being disposed.
-		 */
-		export function registerAuthenticationProvider(id: string, label: string, provider: AuthenticationProvider, options?: AuthenticationProviderOptions): Disposable;
 	}
 }
 
diff --git a/src/types/vscode.proposed.d.ts b/src/vscode.proposed.d.ts
similarity index 98%
rename from src/types/vscode.proposed.d.ts
rename to src/vscode.proposed.d.ts
index a262196..d78a878 100644
--- a/src/types/vscode.proposed.d.ts
+++ b/src/vscode.proposed.d.ts
@@ -942,6 +942,20 @@ declare module 'vscode' {
 
 	//#endregion
 
+	//#region Provide a way for custom editors to process untitled files without relying on textDocument https://github.com/microsoft/vscode/issues/115631
+	/**
+	 * Additional information about the opening custom document.
+	 */
+	interface CustomDocumentOpenContext {
+		/**
+		 * If the URI is an untitled file, this will be populated with the byte data of that file
+		 *
+		 * If this is provided, your extension should utilize this byte data rather than executing fs APIs on the URI passed in
+		 */
+		readonly untitledDocumentData?: Uint8Array;
+	}
+	//#endregion
+
 	//#region https://github.com/microsoft/vscode/issues/106744, Notebooks (misc)
 
 	export enum NotebookCellKind {
@@ -1559,10 +1573,10 @@ declare module 'vscode' {
 		readonly token: CancellationToken;
 
 		clearOutput(cellIndex?: number): Thenable<void>;
-		appendOutput(out: NotebookCellOutput | NotebookCellOutput[], cellIndex?: number): Thenable<void>;
-		replaceOutput(out: NotebookCellOutput | NotebookCellOutput[], cellIndex?: number): Thenable<void>;
-		appendOutputItems(items: NotebookCellOutputItem | NotebookCellOutputItem[], outputId: string): Thenable<void>;
-		replaceOutputItems(items: NotebookCellOutputItem | NotebookCellOutputItem[], outputId: string): Thenable<void>;
+		appendOutput(out: NotebookCellOutput[], cellIndex?: number): Thenable<void>;
+		replaceOutput(out: NotebookCellOutput[], cellIndex?: number): Thenable<void>;
+		appendOutputItems(items: NotebookCellOutputItem[], outputId: string): Thenable<void>;
+		replaceOutputItems(items: NotebookCellOutputItem[], outputId: string): Thenable<void>;
 	}
 
 	export enum NotebookCellExecutionState {
@@ -2311,11 +2325,6 @@ declare module 'vscode' {
 		 */
 		readonly id: string;
 
-		/**
-		 * URI this TestItem is associated with. May be a file or file.
-		 */
-		readonly uri: Uri;
-
 		/**
 		 * A set of children this item has. You can add new children to it, which
 		 * will propagate to the editor UI.
@@ -2333,10 +2342,10 @@ declare module 'vscode' {
 		description?: string;
 
 		/**
-		 * Location of the test item in its `uri`. This is only meaningful if the
-		 * `uri` points to a file.
+		 * Location of the test in the workspace. This is used to show line
+		 * decorations and code lenses for the test.
 		 */
-		range?: Range;
+		location?: Location;
 
 		/**
 		 * Whether this test item can be run individually, defaults to `true`.
@@ -2365,11 +2374,10 @@ declare module 'vscode' {
 		 * Creates a new TestItem instance.
 		 * @param id Value of the "id" property
 		 * @param label Value of the "label" property.
-		 * @param uri Value of the "uri" property.
 		 * @param parent Parent of this item. This should only be defined for the
 		 * test root.
 		 */
-		constructor(id: string, label: string, uri: Uri, expandable: boolean);
+		constructor(id: string, label: string, expandable: boolean);
 
 		/**
 		 * Marks the test as outdated. This can happen as a result of file changes,
@@ -2541,11 +2549,6 @@ declare module 'vscode' {
 		 */
 		readonly id: string;
 
-		/**
-		 * URI this TestItem is associated with. May be a file or file.
-		 */
-		readonly uri: Uri;
-
 		/**
 		 * Display name describing the test case.
 		 */
@@ -2557,10 +2560,10 @@ declare module 'vscode' {
 		readonly description?: string;
 
 		/**
-		 * Location of the test item in its `uri`. This is only meaningful if the
-		 * `uri` points to a file.
+		 * Location of the test in the workspace. This is used to show line
+		 * decorations and code lenses for the test.
 		 */
-		readonly range?: Range;
+		readonly location?: Location;
 
 		/**
 		 * Current result of the test.
@@ -2789,7 +2792,7 @@ declare module 'vscode' {
 	/**
 	 * The object describing the properties of the workspace trust request
 	 */
-	export interface WorkspaceTrustRequestOptions {
+	export interface WorkspaceTrustRequest {
 		/**
 		 * When true, a modal dialog will be used to request workspace trust.
 		 * When false, a badge will be displayed on the Setting activity bar item
@@ -2805,10 +2808,10 @@ declare module 'vscode' {
 
 		/**
 		 * Prompt the user to chose whether to trust the current workspace
-		 * @param options Optional object describing the properties of the
+		 * @param request Optional object describing the properties of the
 		 * workspace trust request
 		 */
-		export function requireWorkspaceTrust(options?: WorkspaceTrustRequestOptions): Thenable<WorkspaceTrustState>;
+		export function requireWorkspaceTrust(request?: WorkspaceTrustRequest): Thenable<WorkspaceTrustState>;
 
 		/**
 		 * Event that fires when the trust state of the current workspace changes

From d762d6819b60a89776d9d10dc7e8792646320914 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Wed, 31 Mar 2021 11:39:22 +0200
Subject: [PATCH 11/14] reduce size package

---
 .vscodeignore | 4 +++-
 esbuild.js    | 5 -----
 package.json  | 3 +--
 3 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/.vscodeignore b/.vscodeignore
index 6887617..73b8b7d 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -2,11 +2,13 @@
 node_modules/
 out/
 src/
-/textFixture
+testFixture
 scripts/
 tsconfig.json
+tsconfig.base.json
 webpack.config.js
 samples/
 docs/
 *.vsix
 .gitignore
+esbuild.js
diff --git a/esbuild.js b/esbuild.js
index d86b7fc..a038a9f 100644
--- a/esbuild.js
+++ b/esbuild.js
@@ -1,8 +1,3 @@
-/*---------------------------------------------------------------------------------------------
- *  Copyright (c) Microsoft Corporation. All rights reserved.
- *  Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
 // @ts-check
 
 const esbuild = require('esbuild');
diff --git a/package.json b/package.json
index 2aa8d9e..3a70404 100644
--- a/package.json
+++ b/package.json
@@ -5,6 +5,7 @@
 	"author": "Benoît Verhaeghe",
 	"license": "MIT",
 	"version": "0.0.11",
+	"preview": true,
 	"icon": "icon.png",
 	"enableProposedApi": true,
 	"repository": {
@@ -185,8 +186,6 @@
 		"compile": "tsc -b",
 		"test": "sh ./scripts/e2e.sh",
 		"vscode:prepublish": "npm run bundle-all",
-		"webpack": "webpack --mode development",
-		"webpack-dev": "webpack --mode development --watch",
 		"test-compile": "tsc -p ./",
 		"get-proposed": "npx vscode-dts dev",
 		"get-main": "npx vscode-dts main",

From ffc048d9b4578a7c4192f30c7d67be4e0b3afb8d Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Wed, 31 Mar 2021 15:26:39 +0200
Subject: [PATCH 12/14] problem with undefined

---
 samples/oo-analysis.moosebook |  2 +-
 src/moosebookProvider.ts      | 22 ++++++++++------------
 2 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/samples/oo-analysis.moosebook b/samples/oo-analysis.moosebook
index d2da59b..000e130 100644
--- a/samples/oo-analysis.moosebook
+++ b/samples/oo-analysis.moosebook
@@ -1 +1 @@
-[{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8 and VSCode"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\nclient\r\n    signalProgress: false;\r\n    url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n    downloadTo: FileLocator imageDirectory.\r\nclient isSuccess\r\n    ifTrue: [ ZipArchive new\r\n        readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n        extractAllTo: FileLocator imageDirectory.\r\n\r\n        \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n        \"This line is not required in Windows system\"\r\n        LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n    ifFalse: [ Error signal: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := true.\r\naggregation := true.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"view := RTView new.\r\nFAMIXSystemNestingMap new\r\n\t\tviewNamespaces: (mooseModel allNamespaces select: [ :each | each allClasses anySatisfy: [ :c | c isStub not ] ])\r\n\t\thighlighting: {}\r\n\t\tonRaw: view.\r\nview"}]
\ No newline at end of file
+[{"kind":2,"language":"pharo","value":"1+1"},{"kind":1,"language":"markdown","value":"# Analyzing Java with Moose 8 and VSCode"},{"kind":2,"language":"pharo","value":"1+1"},{"kind":1,"language":"markdown","value":"## Clone the Java project you want to analyze"},{"kind":2,"language":"pharo","value":"javaProjectFileRef := MooseEasyUtility cloneGitHubRepo: 'https://github.com/bethrobson/Head-First-Design-Patterns'."},{"kind":1,"language":"markdown","value":"## Parse Java to make FAMIX model"},{"kind":1,"language":"markdown","value":"\r\nSetup"},{"kind":2,"language":"pharo","value":"client := ZnClient new.\r\nclient\r\n    signalProgress: false;\r\n    url: 'https://github.com/moosetechnology/VerveineJ/archive/v1.0.2.zip';\r\n    downloadTo: FileLocator imageDirectory.\r\nclient isSuccess\r\n    ifTrue: [ ZipArchive new\r\n        readFrom: (FileLocator imageDirectory / 'v1.0.2.zip') asFileReference pathString ;\r\n        extractAllTo: FileLocator imageDirectory.\r\n\r\n        \"Since permissions are not preserved with ZipArchive#extractAllTo:\"\r\n        \"This line is not required in Windows system\"\r\n        LibC runCommand: 'chmod u+x ', (FileLocator imageDirectory / 'VerveineJ-1.0.1/verveinej.sh') asFileReference pathString ]\r\n    ifFalse: [ Error signal: 'Download failed.' ]"},{"kind":1,"language":"markdown","value":"Parse"},{"kind":2,"language":"pharo","value":"wizard := MooseEasyFamixMaker\r\n     generateMSETo: 'tmp/HFDP.mse' asFileReference\r\n     parsing: 'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns' asFileReference\r\n     with: (FileLocator imageDirectory / 'VerveineJ-1.0.2/verveinej.bat') asFileReference.\r\nwizard generateMSE."},{"kind":1,"language":"markdown","value":"## Load model of Java source (into Moose)"},{"kind":2,"language":"pharo","value":"mseFileRef := 'tmp/HFDP.mse' asFileReference. \"Generated by FamixMaker\"\r\nmseStream := mseFileRef readStream.\r\nmseStream\r\n\tifNotNil: [ \r\n\t\tmooseModel := MooseModel importFromMSEStream: mseStream. \r\n\t\tmooseModel rootFolder:\r\n      'tmp/MooseEasyRepos/bethrobson__Head-First-Design-Patterns'.\r\n\t\tmseStream close. ]\r\n\tifNil: [ self error: \r\n    'Could not load MSE file into Moose: ' , mseFileRef asString ].\r\nmseStream.\r\nmooseModel install"},{"kind":1,"language":"markdown","value":"## Analysing with Moose"},{"kind":1,"language":"markdown","value":"### Visualize a Java package in PlantUML"},{"kind":2,"language":"pharo","value":"\"Install PlantUMLPharo\"\r\nversion := 'master'.\r\nMetacello new\r\n\t\trepository: 'github://fuhrmanator/PlantUMLPharoGizmo:' , version, '/src';\r\n\t\tbaseline: 'PUGizmo';\r\n\t\tload."},{"kind":1,"language":"markdown","value":"Create the PlantUML code"},{"kind":2,"language":"pharo","value":"attribute := true.\r\nmethod := false.\r\ninheritance := true.\r\naggregation := true.\r\ncreateCheckBox := false.\r\n\r\npreference := 'set namespaceSeparator ::' , String cr\r\n\t\t, 'hide empty members' , String cr , 'scale 1' , String cr\r\n\t\t, 'left to right direction' , String cr.\r\n\r\nitems := mooseModel allModelClasses select: [:each | each mooseName beginsWith: 'headfirst::designpatterns::combining::decorator' ].\r\n\r\n\r\npUMLSource := PUGizmo\r\n\t\tplantUMLSourceForMooseJavaClasses: items\r\n\t\twithPreference: preference\r\n\t\twithRelationships:\r\n\t\t\t{attribute.\r\n\t\t\tmethod.\r\n\t\t\tinheritance.\r\n\t\t\taggregation.\r\n\t\t\tcreateCheckBox}.\r\n\r\nplantKey := pUMLSource asPlantUMLKey.\r\nserverUrl := 'https://www.plantuml.com/plantuml/img/', plantKey.  \r\nimageMorph := (ZnEasy getPng: serverUrl asUrl)."},{"kind":1,"language":"markdown","value":"### Using Pharo"},{"kind":2,"language":"pharo","value":"\"Query all classes that have more than two direct FAMIX superclasses\"\r\nclassesImplementingMoreThanOneInterface := mooseModel allModelClasses \r\n\tselect: [ :each | \r\n\t\teach directSuperclasses size > 2 ].\r\nString streamContents: [ :stream | classesImplementingMoreThanOneInterface do: [:class | stream << class name ] separatedBy: [stream << ', ' ] ]"},{"kind":2,"language":"pharo","value":"view := RTView new.\r\nFAMIXSystemNestingMap new\r\n\t\tviewNamespaces: (mooseModel allNamespaces select: [ :each | each allClasses anySatisfy: [ :c | c isStub not ] ])\r\n\t\thighlighting: {}\r\n\t\tonRaw: view.\r\nview"}]
\ No newline at end of file
diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
index 0cc3b4d..99aae4f 100644
--- a/src/moosebookProvider.ts
+++ b/src/moosebookProvider.ts
@@ -100,18 +100,16 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 
 
 
-	public lookupMoosebook(keyOrUri: string | number | vscode.Uri | undefined): Moosebook | undefined {
-		if (keyOrUri) {
-			let key: string;
-			if (typeof keyOrUri === 'string') {
-				key = keyOrUri;
-			} else {
-				key = keyOrUri.toString();
-			}
-			for (let [association, value] of this._associations.values()) {
-				if (association(key)) {
-					return value;
-				}
+	public lookupMoosebook(keyOrUri: string | number | vscode.Uri): Moosebook | undefined {
+		let key: string;
+		if (typeof keyOrUri === 'string') {
+			key = keyOrUri;
+		} else {
+			key = keyOrUri.toString();
+		}
+		for (let [association, value] of this._associations.values()) {
+			if (association(key)) {
+				return value;
 			}
 		}
 		return undefined;

From b2fa1be563b915b79d0de999edabc802181c7dc7 Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Wed, 31 Mar 2021 15:30:08 +0200
Subject: [PATCH 13/14] remove useless line

---
 src/moosebookProvider.ts | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/moosebookProvider.ts b/src/moosebookProvider.ts
index 99aae4f..5edf5af 100644
--- a/src/moosebookProvider.ts
+++ b/src/moosebookProvider.ts
@@ -98,8 +98,6 @@ export class MoosebookContentProvider implements  vscode.NotebookContentProvider
 	}
 
 
-
-
 	public lookupMoosebook(keyOrUri: string | number | vscode.Uri): Moosebook | undefined {
 		let key: string;
 		if (typeof keyOrUri === 'string') {

From fada21db0eafe7f6f91372d4524de41e3799673f Mon Sep 17 00:00:00 2001
From: badetitou <badetitou@gmail.com>
Date: Thu, 1 Apr 2021 16:46:07 +0200
Subject: [PATCH 14/14] fix launch.json to autobuild with the new strat

---
 .vscode/launch.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.vscode/launch.json b/.vscode/launch.json
index f2b1c2c..2250bc7 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -12,7 +12,7 @@
 			"outFiles": ["${workspaceRoot}/dist/**/*.js"],
 			"preLaunchTask": {
 				"type": "npm",
-				"script": "compile"
+				"script": "bundle-all"
 			}
 		}
 	]