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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�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⪙Riu=vNL{9s% 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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 */` + */ + 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" } } ]