From 2af853a8d66dcff2fe6c53a79066a438acd5c5f7 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Thu, 6 Apr 2023 21:30:42 +0800 Subject: [PATCH 1/6] 0.0.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83e4e54..992ea56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-tiatterraform", - "version": "0.1.0", + "version": "0.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-tiatterraform", - "version": "0.1.0", + "version": "0.0.2", "license": "MIT", "dependencies": { "all": "^0.0.0", diff --git a/package.json b/package.json index e82fb4b..dc52fc6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-tencentcloud-terraform", "displayName": "Tencent Cloud Terraform", "description": "VS Code extension for developing with Terraform on Tencent Cloud", - "version": "0.0.1", + "version": "0.0.2", "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", From 47c89f58cedfa076e323e9c2dfe7494810672429 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Fri, 21 Apr 2023 23:57:35 +0800 Subject: [PATCH 2/6] add import feature --- images/images_bak/compose.svg | 3 + images/images_bak/dark/link.svg | 3 + images/images_bak/light/link.svg | 3 + images/images_bak/logo.png | Bin 0 -> 27193 bytes images/logo.svg | 1 + package-lock.json | 6906 +++++++++-------- package.json | 69 +- package.nls.json | 13 + .../TerraformCompletionProvider.ts | 3 +- .../TerraformDefinitionProvider.ts | 3 +- src/cloudShell.ts | 59 - src/commons/commands.ts | 24 + src/commons/container.ts | 10 + src/commons/context.ts | 8 + src/commons/index.ts | 11 + src/commons/multiStepInput.ts | 219 + src/commons/tencent/commands.ts | 13 + src/commons/tencent/index.ts | 27 + src/commons/tencent/sdkApi.ts | 7 + src/commons/tencent/treeDataProvider.ts | 61 + src/commons/tencent/types/api.ts | 142 + src/commons/tencent/types/index.ts | 1 + src/connectivity/client.ts | 64 + src/extension.ts | 130 +- src/import/cvm.ts | 61 + src/integratedShell.ts | 77 +- src/terraformUtils.ts | 25 + src/utils/cpUtils.ts | 8 +- src/utils/icons.ts | 10 + src/utils/settingUtils.ts | 23 + src/views/help/helpExplorer.ts | 59 + src/views/help/index.ts | 8 + src/views/index.ts | 8 + src/views/resources/index.ts | 10 + src/views/resources/resExplorer.ts | 104 + tsconfig.json | 51 +- 36 files changed, 5017 insertions(+), 3207 deletions(-) create mode 100644 images/images_bak/compose.svg create mode 100644 images/images_bak/dark/link.svg create mode 100644 images/images_bak/light/link.svg create mode 100644 images/images_bak/logo.png create mode 100644 images/logo.svg create mode 100644 package.nls.json create mode 100644 src/commons/commands.ts create mode 100644 src/commons/container.ts create mode 100644 src/commons/context.ts create mode 100644 src/commons/index.ts create mode 100644 src/commons/multiStepInput.ts create mode 100644 src/commons/tencent/commands.ts create mode 100644 src/commons/tencent/index.ts create mode 100644 src/commons/tencent/sdkApi.ts create mode 100644 src/commons/tencent/treeDataProvider.ts create mode 100644 src/commons/tencent/types/api.ts create mode 100644 src/commons/tencent/types/index.ts create mode 100644 src/connectivity/client.ts create mode 100644 src/import/cvm.ts create mode 100644 src/terraformUtils.ts create mode 100644 src/utils/icons.ts create mode 100644 src/views/help/helpExplorer.ts create mode 100644 src/views/help/index.ts create mode 100644 src/views/index.ts create mode 100644 src/views/resources/index.ts create mode 100644 src/views/resources/resExplorer.ts diff --git a/images/images_bak/compose.svg b/images/images_bak/compose.svg new file mode 100644 index 0000000..7c800af --- /dev/null +++ b/images/images_bak/compose.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/images_bak/dark/link.svg b/images/images_bak/dark/link.svg new file mode 100644 index 0000000..6e7ee14 --- /dev/null +++ b/images/images_bak/dark/link.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/images/images_bak/light/link.svg b/images/images_bak/light/link.svg new file mode 100644 index 0000000..1f9933c --- /dev/null +++ b/images/images_bak/light/link.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/images_bak/logo.png b/images/images_bak/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b7484f3daf37a082c894b741f3739ee821d77ba4 GIT binary patch literal 27193 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 \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 992ea56..5d408df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3064 +1,3850 @@ { - "name": "vscode-tiatterraform", - "version": "0.0.2", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "vscode-tiatterraform", - "version": "0.0.2", - "license": "MIT", - "dependencies": { - "all": "^0.0.0", - "fs-extra": "^11.1.0", - "lodash": "^4.17.21", - "opn": "^6.0.0", - "shared": "^0.2.0", - "vscode-extension-telemetry-wrapper": "^0.13.3" - }, - "devDependencies": { - "@types/fs-extra": "^11.0.1", - "@types/glob": "^8.0.1", - "@types/lodash": "^4.14.191", - "@types/mocha": "^10.0.1", - "@types/node": "16.x", - "@typescript-eslint/eslint-plugin": "^5.49.0", - "@typescript-eslint/parser": "^5.49.0", - "@vscode/test-electron": "^2.2.2", - "eslint": "^8.33.0", - "glob": "^8.1.0", - "mocha": "^10.1.0", - "typescript": "^4.9.4", - "vscode": "^1.1.37" - }, - "engines": { - "vscode": "^1.50.1" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", - "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", - "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@microsoft/1ds-core-js": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.9.tgz", - "integrity": "sha512-3pCfM2TzHn3gU9pxHztduKcVRdb/nzruvPFfHPZD0IM0mb0h6TGo2isELF3CTMahTx50RAC51ojNIw2/7VRkOg==", - "dependencies": { - "@microsoft/applicationinsights-core-js": "2.8.10", - "@microsoft/applicationinsights-shims": "^2.0.2", - "@microsoft/dynamicproto-js": "^1.1.7" - } - }, - "node_modules/@microsoft/1ds-post-js": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.9.tgz", - "integrity": "sha512-D/RtqkQ2Nr4cuoGqmhi5QTmi3cBlxehIThJ1u3BaH9H/YkLNTKEcHZRWTXy14bXheCefNHciLuadg37G2Kekcg==", - "dependencies": { - "@microsoft/1ds-core-js": "3.2.9", - "@microsoft/applicationinsights-shims": "^2.0.2", - "@microsoft/dynamicproto-js": "^1.1.7" - } - }, - "node_modules/@microsoft/applicationinsights-core-js": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.10.tgz", - "integrity": "sha512-jQrufDW0+sV8fBhRvzIPNGiCC6dELH+Ug0DM5CfN9757TBqZJz8CSWyDjex39as8+jD0F/8HRU9QdmrVgq5vFg==", - "dependencies": { - "@microsoft/applicationinsights-shims": "2.0.2", - "@microsoft/dynamicproto-js": "^1.1.7" - }, - "peerDependencies": { - "tslib": "*" - } - }, - "node_modules/@microsoft/applicationinsights-shims": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz", - "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" - }, - "node_modules/@microsoft/dynamicproto-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.7.tgz", - "integrity": "sha512-SK3D3aVt+5vOOccKPnGaJWB5gQ8FuKfjboUJHedMP7gu54HqSCXX5iFXhktGD8nfJb0Go30eDvs/UDoTnR2kOA==" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "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/fs-extra": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", - "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", - "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", - "dev": true, - "dependencies": { - "@types/minimatch": "^5.1.2", - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/jsonfile": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", - "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.191", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", - "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.18.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.13.tgz", - "integrity": "sha512-l0/3XZ153UTlNOnZK8xSNoJlQda9/WnYgiTdcKKPJSZjdjI9MU+A9oMXOesAWLSnqAaaJhj3qfQsU07Dr8OUwg==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", - "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/type-utils": "5.53.0", - "@typescript-eslint/utils": "5.53.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", - "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", - "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", - "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.53.0", - "@typescript-eslint/utils": "5.53.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", - "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", - "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/visitor-keys": "5.53.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", - "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.53.0", - "@typescript-eslint/types": "5.53.0", - "@typescript-eslint/typescript-estree": "5.53.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.53.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", - "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.53.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vscode/extension-telemetry": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.6.2.tgz", - "integrity": "sha512-yb/wxLuaaCRcBAZtDCjNYSisAXz3FWsSqAha5nhHcYxx2ZPdQdWuZqVXGKq0ZpHVndBWWtK6XqtpCN2/HB4S1w==", - "dependencies": { - "@microsoft/1ds-core-js": "^3.2.3", - "@microsoft/1ds-post-js": "^3.2.3" - }, - "engines": { - "vscode": "^1.60.0" - } - }, - "node_modules/@vscode/test-electron": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", - "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", - "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": ">=16" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "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/all": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/all/-/all-0.0.0.tgz", - "integrity": "sha512-0oKlfNVv2d+d7c1gwjGspzgbwot47PGQ4b3v1ccx4mR8l9P/Y6E6Dr/yE8lNT63EcAKEbHo6UG3odDpC/NQcKw==" - }, - "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-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "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/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "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/bintrees": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-0.0.10.tgz", - "integrity": "sha512-BkR37mfNUjTN36dENR1V6BlW8rqzpJnqCBhe2ZtWXJ1UgTVPHIlWSfYX7Ap/FlAgl7XWRr3mG4eR2LFnezBG1g==" - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "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==", - "dev": true, - "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/bson": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/bson/-/bson-0.1.9.tgz", - "integrity": "sha512-HlvXnohuuxlb/AzILVZFgGBO7658NPddPn1Q8PRC6ANHoPZKJotU0WG9+PoMjO7ZFM/e+jKbqOstXJLyIhSOgA==", - "deprecated": "Fixed a critical issue with BSON serialization documented in CVE-2019-2391, see https://bit.ly/2KcpXdo for more details", - "hasInstallScript": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "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": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "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.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "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/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/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/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "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/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "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.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "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/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "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/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==", - "dev": true - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dev": true, - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "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": "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/eslint": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", - "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^2.0.0", - "@eslint/js": "8.35.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", - "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "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.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "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/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-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "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": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", - "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "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/fstream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "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/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "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-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/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.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "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/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "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==", - "dev": true - }, - "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-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "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-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, - "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.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "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/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "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/mongodb": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.2.14.tgz", - "integrity": "sha512-6e+wAdsDC8LXAiDd8hyvs3PelKsJC/zIuNehU3FeI4JidhoYW2CG3jGTshg9MI8UKPrcyB8sqY0blpRFPYPLSg==", - "deprecated": "Please upgrade to 2.2.19 or higher", - "dependencies": { - "bson": "0.1.8" - }, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/mongodb/node_modules/bson": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/bson/-/bson-0.1.8.tgz", - "integrity": "sha512-Zen/6PF3Mox895jY2kVBC8m/zbApUgUoGwQ7p+UqdcByls5aYNgE4CrpXgycsPcMio+wto6nRvhJlJuZr5hxBw==", - "deprecated": "Fixed a critical issue with BSON serialization documented in CVE-2019-2391, see https://bit.ly/2KcpXdo for more details", - "hasInstallScript": true, - "engines": { - "node": ">=0.6.19" - } - }, - "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/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "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": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/node-uuid": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz", - "integrity": "sha512-xKQtL5imfvX6PvUmgJyU/XaNT/l8tKvs+sJ6KLOmIzk/H8+sm7uE80QlPmmu3l1uirvRL3kZqtJPWoQBWT9gQw==", - "deprecated": "Use uuid module instead", - "engines": { - "node": "*" - } - }, - "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/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "deprecated": "The package has been renamed to `open`", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.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/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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/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.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "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/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "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/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.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "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.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "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/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "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" + "name": "vscode-tencentcloud-terraform", + "version": "0.0.2", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vscode-tencentcloud-terraform", + "version": "0.0.2", + "license": "MIT", + "dependencies": { + "@types/strip-ansi": "^5.2.1", + "all": "^0.0.0", + "asynckit": "^0.4.0", + "axios": "^1.3.5", + "fs-extra": "^11.1.0", + "inversify": "^6.0.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "opn": "^6.0.0", + "reflect-metadata": "^0.1.13", + "shared": "^0.2.0", + "strip-ansi": "^7.0.1", + "tencentcloud-sdk-nodejs": "^4.0.580", + "tencentcloud-sdk-nodejs-cvm": "^4.0.580", + "tencentcloud-sdk-nodejs-tke": "^4.0.576", + "vscode-extension-telemetry-wrapper": "^0.13.3", + "vscode-nls-i18n": "^0.2.4" + }, + "devDependencies": { + "@types/fs-extra": "^11.0.1", + "@types/glob": "^8.0.1", + "@types/lodash": "^4.14.191", + "@types/mocha": "^10.0.1", + "@types/node": "16.x", + "@types/opn": "^3.0.28", + "@types/vscode": "^1.77.0", + "@typescript-eslint/eslint-plugin": "^5.49.0", + "@typescript-eslint/parser": "^5.49.0", + "@vscode/test-electron": "^2.2.2", + "eslint": "^8.33.0", + "glob": "^8.1.0", + "mocha": "^10.1.0", + "tsconfig-paths": "^4.2.0", + "typescript": "^4.9.4", + "vscode": "^1.1.34" + }, + "engines": { + "vscode": "^1.70.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.0.tgz", + "integrity": "sha512-fluIaaV+GyV24CCu/ggiHdV+j4RNh85yQnAYS/G2mZODZgGmmlrgCydjUcV3YvxCm9x8nMAfThsqTni4KiXT4A==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.35.0.tgz", + "integrity": "sha512-JXdzbRiWclLVoD8sNUjR443VVlYqiYmDVT6rGUEIEHU5YJW0gaVZwV2xgM7D4arkvASqD0IlLUVjHiFuxaftRw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@microsoft/1ds-core-js": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.9.tgz", + "integrity": "sha512-3pCfM2TzHn3gU9pxHztduKcVRdb/nzruvPFfHPZD0IM0mb0h6TGo2isELF3CTMahTx50RAC51ojNIw2/7VRkOg==", + "dependencies": { + "@microsoft/applicationinsights-core-js": "2.8.10", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } + }, + "node_modules/@microsoft/1ds-post-js": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.9.tgz", + "integrity": "sha512-D/RtqkQ2Nr4cuoGqmhi5QTmi3cBlxehIThJ1u3BaH9H/YkLNTKEcHZRWTXy14bXheCefNHciLuadg37G2Kekcg==", + "dependencies": { + "@microsoft/1ds-core-js": "3.2.9", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } + }, + "node_modules/@microsoft/applicationinsights-core-js": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.10.tgz", + "integrity": "sha512-jQrufDW0+sV8fBhRvzIPNGiCC6dELH+Ug0DM5CfN9757TBqZJz8CSWyDjex39as8+jD0F/8HRU9QdmrVgq5vFg==", + "dependencies": { + "@microsoft/applicationinsights-shims": "2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + }, + "peerDependencies": { + "tslib": "*" + } + }, + "node_modules/@microsoft/applicationinsights-shims": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz", + "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" + }, + "node_modules/@microsoft/dynamicproto-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.7.tgz", + "integrity": "sha512-SK3D3aVt+5vOOccKPnGaJWB5gQ8FuKfjboUJHedMP7gu54HqSCXX5iFXhktGD8nfJb0Go30eDvs/UDoTnR2kOA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "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/fs-extra": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz", + "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==", + "dev": true, + "dependencies": { + "@types/minimatch": "^5.1.2", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/jsonfile": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz", + "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.191", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz", + "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", + "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "dev": true + }, + "node_modules/@types/node": { + "version": "16.18.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.13.tgz", + "integrity": "sha512-l0/3XZ153UTlNOnZK8xSNoJlQda9/WnYgiTdcKKPJSZjdjI9MU+A9oMXOesAWLSnqAaaJhj3qfQsU07Dr8OUwg==", + "dev": true + }, + "node_modules/@types/opn": { + "version": "3.0.28", + "resolved": "https://registry.npmjs.org/@types/opn/-/opn-3.0.28.tgz", + "integrity": "sha512-CJ8d3pXuQXjaHFUwwfZuS1vs04vCBXp50/tlR3pBWd7zjDXzX91HCeih/Lr1l57MEJECIENw00hsXPIBPz+UrA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, + "node_modules/@types/strip-ansi": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@types/strip-ansi/-/strip-ansi-5.2.1.tgz", + "integrity": "sha512-1l5iM0LBkVU8JXxnIoBqNvg+yyOXxPeN6DNoD+7A9AN1B8FhYPSeIXgyNqwIqg1uzipTgVC2hmuDzB0u9qw/PA==", + "deprecated": "This is a stub types definition. strip-ansi provides its own type definitions, so you do not need this installed.", + "dependencies": { + "strip-ansi": "*" + } + }, + "node_modules/@types/vscode": { + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.77.0.tgz", + "integrity": "sha512-MWFN5R7a33n8eJZJmdVlifjig3LWUNRrPeO1xemIcZ0ae0TEQuRc7G2xV0LUX78RZFECY1plYBn+dP/Acc3L0Q==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", + "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/type-utils": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.53.0.tgz", + "integrity": "sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", + "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", + "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.53.0", + "@typescript-eslint/utils": "5.53.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", + "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", + "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/visitor-keys": "5.53.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", + "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.53.0", + "@typescript-eslint/types": "5.53.0", + "@typescript-eslint/typescript-estree": "5.53.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.53.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", + "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.53.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vscode/extension-telemetry": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.6.2.tgz", + "integrity": "sha512-yb/wxLuaaCRcBAZtDCjNYSisAXz3FWsSqAha5nhHcYxx2ZPdQdWuZqVXGKq0ZpHVndBWWtK6XqtpCN2/HB4S1w==", + "dependencies": { + "@microsoft/1ds-core-js": "^3.2.3", + "@microsoft/1ds-post-js": "^3.2.3" + }, + "engines": { + "vscode": "^1.60.0" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.2.3.tgz", + "integrity": "sha512-7DmdGYQTqRNaLHKG3j56buc9DkstriY4aV0S3Zj32u0U9/T0L8vwWAC9QGCh1meu1VXDEla1ze27TkqysHGP0Q==", + "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": ">=16" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "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==", + "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/all": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/all/-/all-0.0.0.tgz", + "integrity": "sha512-0oKlfNVv2d+d7c1gwjGspzgbwot47PGQ4b3v1ccx4mR8l9P/Y6E6Dr/yE8lNT63EcAKEbHo6UG3odDpC/NQcKw==" + }, + "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-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "node_modules/axios": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.5.tgz", + "integrity": "sha512-glL/PvG/E+xCWwV8S6nCHcrfg1exGx7vxyUIivIA1iL7BIh6bePylCfVHwp6k13ao7SATxB6imau2kqY+I67kw==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "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/bintrees": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-0.0.10.tgz", + "integrity": "sha512-BkR37mfNUjTN36dENR1V6BlW8rqzpJnqCBhe2ZtWXJ1UgTVPHIlWSfYX7Ap/FlAgl7XWRr3mG4eR2LFnezBG1g==" + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "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==", + "dev": true, + "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/bson": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/bson/-/bson-0.1.9.tgz", + "integrity": "sha512-HlvXnohuuxlb/AzILVZFgGBO7658NPddPn1Q8PRC6ANHoPZKJotU0WG9+PoMjO7ZFM/e+jKbqOstXJLyIhSOgA==", + "deprecated": "Fixed a critical issue with BSON serialization documented in CVE-2019-2391, see https://bit.ly/2KcpXdo for more details", + "hasInstallScript": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "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": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "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.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "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/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "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.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "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/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "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/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==", + "dev": true + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", + "dev": true, + "dependencies": { + "es6-promise": "^4.0.3" + } + }, + "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": "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/eslint": { + "version": "8.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.35.0.tgz", + "integrity": "sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^2.0.0", + "@eslint/js": "8.35.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "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/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "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-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "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": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", + "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "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/fstream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fstream/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/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/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/inversify": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.1.tgz", + "integrity": "sha512-B3ex30927698TJENHR++8FfEaJGqoWOgI6ZY5Ht/nLUsFCwHn6akbwtnUAPCgUepAnTpe2qHxhDNjoKLyz6rgQ==" + }, + "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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "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": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true + }, + "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.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "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/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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/mongodb": { + "version": "1.2.14", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.2.14.tgz", + "integrity": "sha512-6e+wAdsDC8LXAiDd8hyvs3PelKsJC/zIuNehU3FeI4JidhoYW2CG3jGTshg9MI8UKPrcyB8sqY0blpRFPYPLSg==", + "deprecated": "Please upgrade to 2.2.19 or higher", + "dependencies": { + "bson": "0.1.8" + }, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/mongodb/node_modules/bson": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/bson/-/bson-0.1.8.tgz", + "integrity": "sha512-Zen/6PF3Mox895jY2kVBC8m/zbApUgUoGwQ7p+UqdcByls5aYNgE4CrpXgycsPcMio+wto6nRvhJlJuZr5hxBw==", + "deprecated": "Fixed a critical issue with BSON serialization documented in CVE-2019-2391, see https://bit.ly/2KcpXdo for more details", + "hasInstallScript": true, + "engines": { + "node": ">=0.6.19" + } + }, + "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==" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "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": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-uuid": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz", + "integrity": "sha512-xKQtL5imfvX6PvUmgJyU/XaNT/l8tKvs+sJ6KLOmIzk/H8+sm7uE80QlPmmu3l1uirvRL3kZqtJPWoQBWT9gQw==", + "deprecated": "Use uuid module instead", + "engines": { + "node": "*" + } + }, + "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/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opn": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", + "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", + "deprecated": "The package has been renamed to `open`", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.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/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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "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/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/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.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "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.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "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/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "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/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "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": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/shared": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/shared/-/shared-0.2.0.tgz", + "integrity": "sha512-nRBVf7KHFkU4vmiKAhTaJUm8miFMcU6b5I98U71Kk6uu1RIBeRwWivnMXEQOQxTxObPhOSIQSBhuIT+O/urG3A==", + "bundleDependencies": [ + "rsvp" + ], + "dependencies": { + "bintrees": "~0.0.7", + "bson": "~0.1.5", + "mongodb": "~1.2.9", + "node-uuid": "~1.3.3", + "underscore": "~1.4.0" + } + }, + "node_modules/shared/node_modules/rsvp": { + "version": "1.2.0", + "extraneous": true, + "inBundle": true, + "license": "MIT" + }, + "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/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/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/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.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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": "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/tencentcloud-sdk-nodejs": { + "version": "4.0.580", + "resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.0.580.tgz", + "integrity": "sha512-VKxc6aAE39nZrP2Hn1L775JQGSGOxR0idsJGgoMJZLT5cLy7JMaWY8cL//AhtkJ8DldpvnRlQ9wRU4IsijNEKg==", + "dependencies": { + "form-data": "^3.0.0", + "get-stream": "^6.0.0", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.2.0", + "tslib": "1.13.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tencentcloud-sdk-nodejs-common": { + "version": "4.0.580", + "resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs-common/-/tencentcloud-sdk-nodejs-common-4.0.580.tgz", + "integrity": "sha512-2C5uLBG+eHjqnsglWToH00T/VHBQRY13V6Nwfth+OEN2bS8Jeur4yN8AyHX55TAMshYe8GRKQWrdqHBYYKyPLg==", + "dependencies": { + "form-data": "^3.0.0", + "get-stream": "^6.0.0", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.2.0", + "tslib": "1.13.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tencentcloud-sdk-nodejs-common/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tencentcloud-sdk-nodejs-common/node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "node_modules/tencentcloud-sdk-nodejs-cvm": { + "version": "4.0.580", + "resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs-cvm/-/tencentcloud-sdk-nodejs-cvm-4.0.580.tgz", + "integrity": "sha512-BRonhJp/Nf59i8nUAiHUWfKOkfYXsI8vU31yfVQA39XzkRkxdZiPRt98VwnZvjip0SxrW9dH6SW7+/y/hA8BWg==", + "dependencies": { + "tencentcloud-sdk-nodejs-common": "^4.0.488" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tencentcloud-sdk-nodejs-tke": { + "version": "4.0.576", + "resolved": "https://registry.npmjs.org/tencentcloud-sdk-nodejs-tke/-/tencentcloud-sdk-nodejs-tke-4.0.576.tgz", + "integrity": "sha512-Ux3g7ZMnkA7KOkcgsGJbpEksV6rqorSuprBY8QkzdCsYs1f2yxUswZNNWqosYFMb/nyoCvWyXNO3QvwXsGsHfw==", + "dependencies": { + "tencentcloud-sdk-nodejs-common": "^4.0.488" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tencentcloud-sdk-nodejs/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tencentcloud-sdk-nodejs/node_modules/tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "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/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tsutils": { + "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" + }, + "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/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/underscore": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", + "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==" + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.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/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/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": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vscode": { + "version": "1.1.34", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.34.tgz", + "integrity": "sha512-GuT3tCT2N5Qp26VG4C+iGmWMgg/MuqtY5G5TSOT3U/X6pgjM9LFulJEeqpyf6gdzpI4VyU3ZN/lWPo54UFPuQg==", + "deprecated": "This package is deprecated in favor of @types/vscode and vscode-test. For more information please read: https://code.visualstudio.com/updates/v1_36#_splitting-vscode-package-into-typesvscode-and-vscodetest", + "dev": true, + "dependencies": { + "glob": "^7.1.2", + "mocha": "^4.0.1", + "request": "^2.88.0", + "semver": "^5.4.1", + "source-map-support": "^0.5.0", + "url-parse": "^1.4.4", + "vscode-test": "^0.4.1" + }, + "bin": { + "vscode-install": "bin/install" + }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/vscode-extension-telemetry-wrapper": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.13.3.tgz", + "integrity": "sha512-k/PbUbH9/xqiMXI2g2RXpDg+4/v08t3NzdPc7HuDPF3A1XcYkgYwsPnS/bqsKZNymSQdbLvVuie6STMxbDX9KQ==", + "dependencies": { + "@vscode/extension-telemetry": "^0.6.2", + "uuid": "^8.3.2" + }, + "engines": { + "vscode": "^1.14.0" + } + }, + "node_modules/vscode-nls-i18n": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vscode-nls-i18n/-/vscode-nls-i18n-0.2.4.tgz", + "integrity": "sha512-1gf+s5qznJ6d5e5FavJ/sjzx/VdRMtZcVc8bjKo32mQPqAx+Bzgm0ur46/el1vAO4UGmCMQjlH8sHQdjEln7zQ==" + }, + "node_modules/vscode-test": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", + "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", + "deprecated": "This package has been renamed to @vscode/test-electron, please update to the new name", + "dev": true, + "dependencies": { + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1" + }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/vscode-test/node_modules/agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "dependencies": { + "es6-promisify": "^5.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/vscode-test/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/vscode-test/node_modules/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==", + "dev": true, + "dependencies": { + "agent-base": "4", + "debug": "3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/vscode-test/node_modules/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==", + "dev": true, + "dependencies": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/vscode-test/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/vscode/node_modules/browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg==", + "dev": true + }, + "node_modules/vscode/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/vscode/node_modules/diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/vscode/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/vscode/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/vscode/node_modules/has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vscode/node_modules/he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/vscode/node_modules/minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", + "dev": true + }, + "node_modules/vscode/node_modules/mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "0.0.8" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/vscode/node_modules/mocha": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", + "dev": true, + "dependencies": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/vscode/node_modules/mocha/node_modules/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "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": "*" + } + }, + "node_modules/vscode/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/vscode/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/vscode/node_modules/supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "dependencies": { + "has-flag": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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/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.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "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.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "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" + } } - ] - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "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": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/shared": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/shared/-/shared-0.2.0.tgz", - "integrity": "sha512-nRBVf7KHFkU4vmiKAhTaJUm8miFMcU6b5I98U71Kk6uu1RIBeRwWivnMXEQOQxTxObPhOSIQSBhuIT+O/urG3A==", - "bundleDependencies": [ - "rsvp" - ], - "dependencies": { - "bintrees": "~0.0.7", - "bson": "~0.1.5", - "mongodb": "~1.2.9", - "node-uuid": "~1.3.3", - "underscore": "~1.4.0" - } - }, - "node_modules/shared/node_modules/rsvp": { - "version": "1.2.0", - "extraneous": true, - "inBundle": true, - "license": "MIT" - }, - "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/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/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/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.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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": "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/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "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": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tsutils": { - "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" - }, - "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.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/underscore": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz", - "integrity": "sha512-ZqGrAgaqqZM7LGRzNjLnw5elevWb5M8LEoDMadxIW3OWbcv72wMMgKdwOKpd5Fqxe8choLD8HN3iSj3TUh/giQ==" - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.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": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vscode": { - "version": "1.1.37", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", - "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", - "deprecated": "This package is deprecated in favor of @types/vscode and vscode-test. For more information please read: https://code.visualstudio.com/updates/v1_36#_splitting-vscode-package-into-typesvscode-and-vscodetest", - "dev": true, - "dependencies": { - "glob": "^7.1.2", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "mocha": "^5.2.0", - "semver": "^5.4.1", - "source-map-support": "^0.5.0", - "vscode-test": "^0.4.1" - }, - "bin": { - "vscode-install": "bin/install" - }, - "engines": { - "node": ">=8.9.3" - } - }, - "node_modules/vscode-extension-telemetry-wrapper": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.13.3.tgz", - "integrity": "sha512-k/PbUbH9/xqiMXI2g2RXpDg+4/v08t3NzdPc7HuDPF3A1XcYkgYwsPnS/bqsKZNymSQdbLvVuie6STMxbDX9KQ==", - "dependencies": { - "@vscode/extension-telemetry": "^0.6.2", - "uuid": "^8.3.2" - }, - "engines": { - "vscode": "^1.14.0" - } - }, - "node_modules/vscode-test": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", - "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", - "deprecated": "This package has been renamed to @vscode/test-electron, please update to the new name", - "dev": true, - "dependencies": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1" - }, - "engines": { - "node": ">=8.9.3" - } - }, - "node_modules/vscode-test/node_modules/agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "dependencies": { - "es6-promisify": "^5.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/vscode-test/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/vscode-test/node_modules/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==", - "dev": true, - "dependencies": { - "agent-base": "4", - "debug": "3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/vscode-test/node_modules/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==", - "dev": true, - "dependencies": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/vscode-test/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/vscode/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/vscode/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/vscode/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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/vscode/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vscode/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/vscode/node_modules/he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/vscode/node_modules/minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", - "dev": true - }, - "node_modules/vscode/node_modules/mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", - "dev": true, - "dependencies": { - "minimist": "0.0.8" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/vscode/node_modules/mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "dependencies": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/vscode/node_modules/mocha/node_modules/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "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": "*" - } - }, - "node_modules/vscode/node_modules/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/vscode/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/vscode/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/vscode/node_modules/supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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/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.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "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/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "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" - } } - } } diff --git a/package.json b/package.json index dc52fc6..39f8685 100644 --- a/package.json +++ b/package.json @@ -6,12 +6,13 @@ "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", + "main": "./out/src/extension.js", "repository": { "type": "git", "url": "https://github.com/tencentcloudstack/vscode-tencentcloud-terraform.git" }, "engines": { - "vscode": "^1.50.1" + "vscode": "^1.70.0" }, "categories": [ "Programming Languages", @@ -44,10 +45,52 @@ "onCommand:tcTerraform.visualize", "onCommand:tcTerraform.test", "onCommand:tcTerraform.push", + "workspaceContains:**/*.tf", "onLanguage:terraform" ], - "main": "./out/extension.js", "contributes": { + "viewsContainers": { + "activitybar": [ + { + "id": "tc-terraform-resources", + "title": "%TcTerraform.title%", + "icon": "images/logo.svg", + "when": "workspaceFolderCount > 0" + } + ] + }, + "views": { + "tc-terraform-resources": [ + { + "id": "tcTerraform.sessionExplorer", + "name": "%TcTerraform.view.session.explorer%", + "contextualTitle": "Session Explorer", + "visibility": "collapsed" + }, + { + "id": "tcTerraform.resourcesExplorer.cvm", + "name": "%TcTerraform.view.resource.explorer.cvm%", + "contextualTitle": "Resources Explorer", + "visibility": "collapsed" + }, + { + "id": "tcTerraform.resourcesExplorer.tke", + "name": "%TcTerraform.view.resource.explorer.tke%", + "contextualTitle": "Resources Explorer", + "visibility": "collapsed" + }, + { + "id": "tcTerraform.templatesExplorer", + "name": "%TcTerraform.view.template.explorer%", + "visibility": "collapsed" + }, + { + "id": "tcTerraform.helpExplorer", + "name": "%TcTerraform.view.help.explorer%", + "visibility": "collapsed" + } + ] + }, "languages": [ { "id": "terraform", @@ -137,6 +180,11 @@ "default": "true", "description": "Specifies whether or not check terraform installed in the PATH." }, + "tcTerraform.checkTerraformerCmd": { + "type": "boolean", + "default": "true", + "description": "Specifies whether or not check terraformer installed." + }, "tcTerraform.checkTCCLI": { "type": "boolean", "default": "true", @@ -185,21 +233,34 @@ "@types/mocha": "^10.0.1", "@types/node": "16.x", "@types/opn": "^3.0.28", + "@types/vscode": "^1.77.0", "@typescript-eslint/eslint-plugin": "^5.49.0", "@typescript-eslint/parser": "^5.49.0", "@vscode/test-electron": "^2.2.2", "eslint": "^8.33.0", "glob": "^8.1.0", "mocha": "^10.1.0", + "tsconfig-paths": "^4.2.0", "typescript": "^4.9.4", - "vscode": "^1.1.37" + "vscode": "^1.1.34" }, "dependencies": { + "@types/strip-ansi": "^5.2.1", "all": "^0.0.0", + "asynckit": "^0.4.0", + "axios": "^1.3.5", "fs-extra": "^11.1.0", + "inversify": "^6.0.1", "lodash": "^4.17.21", + "lodash-es": "^4.17.21", "opn": "^6.0.0", + "reflect-metadata": "^0.1.13", "shared": "^0.2.0", - "vscode-extension-telemetry-wrapper": "^0.13.3" + "strip-ansi": "^7.0.1", + "tencentcloud-sdk-nodejs": "^4.0.580", + "tencentcloud-sdk-nodejs-cvm": "^4.0.580", + "tencentcloud-sdk-nodejs-tke": "^4.0.576", + "vscode-extension-telemetry-wrapper": "^0.13.3", + "vscode-nls-i18n": "^0.2.4" } } diff --git a/package.nls.json b/package.nls.json new file mode 100644 index 0000000..cf8b289 --- /dev/null +++ b/package.nls.json @@ -0,0 +1,13 @@ +{ + "TcTerraform.title": "TencentCloud Terraofrm", + "TcTerraform.view.session.explorer": "Connect to TencentCloud", + "TcTerraform.view.template.explorer": "Tempaltes Management", + "TcTerraform.view.resource.explorer": "Resources Explorer", + "TcTerraform.view.resource.explorer.cvm": "CVM", + "TcTerraform.view.resource.explorer.tke": "TKE", + "TcTerraform.view.help.explorer": "Help", + "TcTerraform.view.help.explorer.provider": "TencentCloud Terraform Provider", + "TcTerraform.view.help.explorer.doc": "Documentation", + "TcTerraform.view.help.explorer.repo": "GitHub Repository", + "TcTerraform.productName": "TcTerraform Toolkit" +} diff --git a/src/autocomplete/TerraformCompletionProvider.ts b/src/autocomplete/TerraformCompletionProvider.ts index 297efea..c6f9384 100644 --- a/src/autocomplete/TerraformCompletionProvider.ts +++ b/src/autocomplete/TerraformCompletionProvider.ts @@ -1,5 +1,6 @@ import { CompletionItemProvider, TextDocument, Position, CancellationToken, CompletionItem, CompletionItemKind } from "vscode"; -var resources = require('../../config/snippets/tiat-resources.json'); +// var resources = require('../../config/snippets/tiat-resources.json'); +import resources from '../../config/snippets/tiat-resources.json'; import * as _ from "lodash"; var topLevelTypes = ["output", "provider", "resource", "variable", "data"]; diff --git a/src/autocomplete/TerraformDefinitionProvider.ts b/src/autocomplete/TerraformDefinitionProvider.ts index 9b23e60..59723ed 100644 --- a/src/autocomplete/TerraformDefinitionProvider.ts +++ b/src/autocomplete/TerraformDefinitionProvider.ts @@ -7,7 +7,8 @@ import { } from "vscode"; import * as _ from "lodash"; import * as opn from "opn"; -var urls = require("../../config/snippets/tiat-urls.json"); +// var urls = require("../../config/snippets/tiat-urls.json"); +import urls from "../../config/snippets/tiat-urls.json"; export class TerraformDefinitionProvider implements DefinitionProvider { public provideDefinition (document: TextDocument, position: Position, token: CancellationToken): Definition { diff --git a/src/cloudShell.ts b/src/cloudShell.ts index 33e198a..18199c4 100644 --- a/src/cloudShell.ts +++ b/src/cloudShell.ts @@ -100,51 +100,9 @@ export class TencentCloudShell extends BaseShell { private async connectedToCloudShell(): Promise { vscode.window.showWarningMessage("The cloud shell is unimplemented."); return false; - // if (this.terminal) { - // return true; - // } - - // const message = "Do you want to open CloudShell?"; - // const response: MessageItem = await vscode.window.showWarningMessage(message, DialogOption.ok, DialogOption.cancel); - // if (response === DialogOption.ok) { - // const accountAPI: AzureAccount = vscode.extensions - // .getExtension("ms-vscode.azure-account")!.exports; - - // this.cloudShell = accountAPI.createCloudShell("Linux"); - - // this.terminal = await this.cloudShell.terminal; - // this.terminal.show(); - // const storageAccount: IStorageAccount = await getStorageAccountforCloudShell(this.cloudShell); - // if (!storageAccount) { - // vscode.window.showErrorMessage("Failed to get the Storage Account information for Cloud Shell, please try again later."); - // return false; - // } - - // this.resourceGroup = storageAccount.resourceGroup; - // this.storageAccountName = storageAccount.storageAccountName; - // this.storageAccountKey = storageAccount.storageAccountKey; - // this.fileShareName = storageAccount.fileShareName; - - // terraformChannel.appendLine("Cloudshell terminal opened."); - - // return true; - // } - - // console.log("Open CloudShell cancelled by user."); - // return false; } private async pushFilePromise(file: string): Promise { - // if (await fsExtra.pathExists(file)) { - // terraformChannel.appendLine(`Uploading file ${file} to cloud shell`); - // await azFilePush( - // vscode.workspace.getWorkspaceFolder(vscode.Uri.file(file)).name, - // this.storageAccountName, - // this.storageAccountKey, - // this.fileShareName, - // file, - // ); - // } vscode.window.showWarningMessage("The cloud shell is unimplemented.", file); } @@ -160,21 +118,4 @@ export class TencentCloudShell extends BaseShell { return false; } } - - // private async resolveContainerCmd(TestType: string): Promise { - // switch (TestType) { - // case TestOption.lint: - // return "rake -f ../Rakefile build"; - // case TestOption.e2e: - // return "ssh-keygen -t rsa -b 2048 -C terraformTest -f /root/.ssh/id_rsa -N ''; rake -f ../Rakefile e2e"; - // case TestOption.custom: - // const cmd: string = await vscode.window.showInputBox({ - // prompt: "Type your custom test command", - // value: "rake -f ../Rakefile build", - // }); - // return cmd ? cmd : ""; - // default: - // return ""; - // } - // } } diff --git a/src/commons/commands.ts b/src/commons/commands.ts new file mode 100644 index 0000000..184c8f1 --- /dev/null +++ b/src/commons/commands.ts @@ -0,0 +1,24 @@ +import { commands, env, Uri } from "vscode"; +import { terraformShellManager } from "../terraformShellManager"; +import { TerraformCommand } from '../common'; + +const openURL = "tcTerraform.openurl"; +const executeImport = TerraformCommand.Import; + +export function registerHelpCommands() { + commands.registerCommand(openURL, function (url: string) { + env.openExternal(Uri.parse(url)); + }); +} + +export function registerResourceCommands() { + commands.registerCommand(executeImport, function (param: any) { + // terraformShellManager.getShell().runTerraformCmd(importObject); + terraformShellManager.getIntegratedShell().import(param, param.fileName); + }); +} + +export const cmds = { + openURL, + executeImport, +}; diff --git a/src/commons/container.ts b/src/commons/container.ts new file mode 100644 index 0000000..9153201 --- /dev/null +++ b/src/commons/container.ts @@ -0,0 +1,10 @@ +import { Container } from "inversify"; +import "reflect-metadata"; + +const container = new Container({ autoBindInjectable: true }); + +export { container }; + +export const TYPES={ + aPIDOC:"API_DOC" +}; \ No newline at end of file diff --git a/src/commons/context.ts b/src/commons/context.ts new file mode 100644 index 0000000..bfc1621 --- /dev/null +++ b/src/commons/context.ts @@ -0,0 +1,8 @@ +import { container } from './container'; +import * as vscode from 'vscode'; + +export const Context = Symbol('ExtensionContext'); + +export function bindExtensionContext(ctx: vscode.ExtensionContext) { + container.bind(Context).toConstantValue(ctx); +} \ No newline at end of file diff --git a/src/commons/index.ts b/src/commons/index.ts new file mode 100644 index 0000000..619b5f0 --- /dev/null +++ b/src/commons/index.ts @@ -0,0 +1,11 @@ +import * as command from "./commands"; +export { tencent } from "./tencent"; +export * from "./container"; +export * from "./context"; +export {cmds} from "./commands"; + +export function registerCommon() { + // registerTencent(); + command.registerHelpCommands(); + command.registerResourceCommands(); +} diff --git a/src/commons/multiStepInput.ts b/src/commons/multiStepInput.ts new file mode 100644 index 0000000..f8e756a --- /dev/null +++ b/src/commons/multiStepInput.ts @@ -0,0 +1,219 @@ +import { + QuickPickItem, + window, + Disposable, + QuickInputButton, + QuickInput, + QuickInputButtons, +} from "vscode"; + +// ------------------------------------------------------- +// Helper code that wraps the API for the multi-step case. +// ------------------------------------------------------- + +class InputFlowAction { + static back = new InputFlowAction(); + static cancel = new InputFlowAction(); + static resume = new InputFlowAction(); +} + +type InputStep = (input: MultiStepInput) => Thenable; + +interface QuickPickParameters { + title: string; + step: number; + totalSteps: number; + items: T[]; + activeItem?: T; + placeholder: string; + buttons?: QuickInputButton[]; +} + +interface InputBoxParameters { + title: string; + step: number; + totalSteps: number; + value: string; + placeholder: string; + prompt?: string; + buttons?: QuickInputButton[]; + validate: (value: string) => Promise; +} + +const shouldResume = () => { + return new Promise((resolve, reject) => {}); +}; + +export default class MultiStepInput { + static async run(start: InputStep) { + const input = new MultiStepInput(); + return input.stepThrough(start); + } + + private current?: QuickInput; + private steps: InputStep[] = []; + + private async stepThrough(start: InputStep) { + let step: InputStep | void = start; + while (step) { + this.steps.push(step); + if (this.current) { + this.current.enabled = false; + this.current.busy = true; + } + try { + step = await step(this); + } catch (err) { + if (err === InputFlowAction.back) { + this.steps.pop(); + step = this.steps.pop(); + } else if (err === InputFlowAction.resume) { + step = this.steps.pop(); + } else if (err === InputFlowAction.cancel) { + step = undefined; + } else { + throw err; + } + } + } + if (this.current) { + this.current.dispose(); + } + } + + async showQuickPick< + T extends QuickPickItem, + P extends QuickPickParameters + >({ title, step, totalSteps, items, activeItem, placeholder, buttons }: P) { + const disposables: Disposable[] = []; + try { + return await new Promise< + T | (P extends { buttons: (infer I)[] } ? I : never) + >((resolve, reject) => { + const input = window.createQuickPick(); + input.title = title; + input.step = step; + input.totalSteps = totalSteps; + input.placeholder = placeholder; + input.items = items; + if (activeItem) { + input.activeItems = [activeItem]; + } + input.buttons = [ + ...(this.steps.length > 1 ? [QuickInputButtons.Back] : []), + ...(buttons || []), + ]; + disposables.push( + input.onDidTriggerButton((item) => { + if (item === QuickInputButtons.Back) { + reject(InputFlowAction.back); + } else { + resolve(item); + } + }), + input.onDidChangeSelection((items) => resolve(items[0])), + input.onDidHide(() => { + (async () => { + reject( + shouldResume && (await shouldResume()) + ? InputFlowAction.resume + : InputFlowAction.cancel + ); + })().catch(reject); + }) + ); + if (this.current) { + this.current.dispose(); + } + this.current = input; + this.current.show(); + }); + } finally { + disposables.forEach((d) => d.dispose()); + } + } + + async showInputBox

({ + title, + step, + totalSteps, + value, + prompt, + placeholder, + buttons, + validate, + }: P) { + const disposables: Disposable[] = []; + try { + return await new Promise< + string | (P extends { buttons: (infer I)[] } ? I : never) + >((resolve, reject) => { + const input = window.createInputBox(); + input.title = title; + input.step = step; + input.totalSteps = totalSteps; + input.value = value || ""; + input.prompt = prompt || ""; + input.placeholder = placeholder || ""; + (input.ignoreFocusOut = true), + (input.buttons = [ + ...(this.steps.length > 1 ? [QuickInputButtons.Back] : []), + ...(buttons || []), + ]); + + let passed = false; + + disposables.push( + input.onDidTriggerButton((item) => { + if (item === QuickInputButtons.Back) { + reject(InputFlowAction.back); + } else { + resolve(item); + } + }), + input.onDidAccept(async () => { + if (!passed) { + return; + } + + const value = input.value; + input.enabled = false; + input.busy = true; + if (!(await validate(value))) { + resolve(value); + } + input.enabled = true; + input.busy = false; + }), + input.onDidChangeValue(async (text) => { + validate(text) + .then(() => { + passed = true; + input.validationMessage = undefined; + }) + .catch((err) => { + passed = false; + input.validationMessage = err; + }); + }), + input.onDidHide(() => { + (async () => { + reject( + shouldResume && (await shouldResume()) + ? InputFlowAction.resume + : InputFlowAction.cancel + ); + })().catch(reject); + }) + ); + if (this.current) { + this.current.dispose(); + } + this.current = input; + this.current.show(); + }); + } finally { + disposables.forEach((d) => d.dispose()); + } + } +} diff --git a/src/commons/tencent/commands.ts b/src/commons/tencent/commands.ts new file mode 100644 index 0000000..f9bf6b4 --- /dev/null +++ b/src/commons/tencent/commands.ts @@ -0,0 +1,13 @@ +import { commands } from "vscode"; + +export function registerCommands() { +// commands.registerCommand(command.TENCENT_LOGIN, user.login); + +// commands.registerCommand(command.TENCENT_LOGINOUT, user.loginOut); +} + +export namespace command { + export const TENCENT_LOGIN = "toolkit.tencent.login"; + /** 退出登录 */ + export const TENCENT_LOGINOUT = "toolkit.tencent.loginout"; +} diff --git a/src/commons/tencent/index.ts b/src/commons/tencent/index.ts new file mode 100644 index 0000000..02a8386 --- /dev/null +++ b/src/commons/tencent/index.ts @@ -0,0 +1,27 @@ +import { commands } from "vscode"; +import { registerCommands, command as _command } from "./commands"; + +// import "./api.localfile"; +// import './api'; +// import _user from "./user"; +import _tree from "./treeDataProvider"; + +export async function registerTencent() { + registerCommands(); + + await initialization(); +} + +async function initialization() { +// commands.executeCommand( +// "setContext", +// "tencent.login", +// !!(await _user.getInfo()) +// ); +} + +export namespace tencent { +// export import user = _user; + export import tree = _tree; + export import command = _command; +} diff --git a/src/commons/tencent/sdkApi.ts b/src/commons/tencent/sdkApi.ts new file mode 100644 index 0000000..f69fd72 --- /dev/null +++ b/src/commons/tencent/sdkApi.ts @@ -0,0 +1,7 @@ +import * as tencentcloud from "tencentcloud-sdk-nodejs"; + +export interface ITencentCloudAPI { + describeInstances(params?: any): Promise; + getConfig(params?: any): Promise; +} + diff --git a/src/commons/tencent/treeDataProvider.ts b/src/commons/tencent/treeDataProvider.ts new file mode 100644 index 0000000..26b4335 --- /dev/null +++ b/src/commons/tencent/treeDataProvider.ts @@ -0,0 +1,61 @@ +import { injectable } from "inversify"; +import { + Event, + EventEmitter, + TreeDataProvider as BaseTreeDataProvider, + TreeItem as BaseTreeItem, +} from "vscode"; +import { container } from "../container"; + +export namespace tree { + export const TencentTreeProvider = Symbol("TencentTreeProvider"); + + export function refreshTreeData() { + const treeDataProvider = + container.getAll(TencentTreeProvider); + + treeDataProvider.map((item) => item.refresh()); + } + + // @ts-ignore + @injectable() + export abstract class TreeDataProvider + implements BaseTreeDataProvider + { + private _onDidChangeTreeData: EventEmitter = + new EventEmitter(); + + readonly onDidChangeTreeData: Event = + this._onDidChangeTreeData.event; + + refresh(): void { + this._onDidChangeTreeData.fire(undefined); + } + + getTreeItem(element: TreeItem): TreeItem | Thenable { + return element; + } + + async getChildren(element?: TreeItem | undefined): Promise { + // if (!element && (await user.getInfo())) { + if (!element) { + return [new TreeItem("暂无数据")]; + } + return []; + } + } + + export type TreeItemType = Omit; + + export class TreeItem extends BaseTreeItem { + constructor(public readonly label: string, params: TreeItemType = {}) { + super(label); + + Object.entries(params).forEach(([k, v]) => { + // @ts-ignore + this[k] = v; + }); + } + } +} +export default tree; diff --git a/src/commons/tencent/types/api.ts b/src/commons/tencent/types/api.ts new file mode 100644 index 0000000..a743111 --- /dev/null +++ b/src/commons/tencent/types/api.ts @@ -0,0 +1,142 @@ +export namespace res { + export interface ProductSets { + ProductSet: ProductSet[]; + } + + export interface ProductSet { + product: string; + productDocCatID?: number; + productName: string; + aPIBrief?: string; + productCNDocCatID?: number; + productVersion?: string; + productCNDocIntroUrl?: string; + } + export interface ActionSet { + actionName: string; + product: string; + description: string; + isSubscribed?: boolean; + actionCNDocUrl: string; + productName: string; + productVersion: string; + action: string; + categoryName: string; + icon?: string; + } + + export interface ActionSets { + ActionSet: ActionSet[]; + } + + export interface SDKInfo { + SDKInfo: KeyValue[]; + } + + export interface KeyValue { + Value: string; + Key: string; + } + + export interface SdkDemos { + SdkDemoSet: SdkDemoSet[]; + } + + export interface SdkDemoSet { + DemoJsonCode: string; + TypeMapSet: TypeMapSet[]; + DemoCode: string; + Language: string; + } + + interface TypeMapSet { + Postfix: string; + OriginalType: string; + SdkType: string; + DestinationType: string; + } + + interface SignDemoSet { + SignCode: string; + Language: string; + ParameterCode: string; + } + + export interface Parameters { + ActionRegions: string[]; + OutputParameterSet: any[]; + ParameterSet: ParameterSet[]; + RequestId: string; + ObjectSet: ObjectSet[]; + } + + interface ParameterSet { + IsArray: boolean; + IsPublic: boolean; + Name: string; + Default: string; + Required: boolean; + Visibility: number; + Type: string; + Example: string; + ValueAllowedNull: boolean; + Desc: string; + } + + interface ObjectSet { + ObjectId: number; + Name: string; + Members: Member[]; + Description: string; + } + + interface Member { + IsArray: boolean; + IsPublic: boolean; + Name: string; + Default: string; + Required: boolean; + Visibility: number; + Type: string; + Example: string; + Desc: string; + } + + export interface Action { + Document: string; + ActionRegions: string[]; + ParameterSet: ParameterSet[]; + RequestId: string; + ObjectSet: ObjectSet[]; + } +} +export namespace req { + interface BaseParmeter { + Version: string; + ProductName: string; + } + export interface ProductParmeter extends BaseParmeter { + ProductVersion: string; + } + export interface SDKInfoParmeter extends BaseParmeter { + SDKType: string; + } + export interface Parmeter extends ProductParmeter { + ProductAction: string; + } + export interface SdkParmeter extends BaseParmeter { + SDKType: string; + } +} + +export interface IApiDoc { + describeAllProducts(): Promise; + describeProductActions( + parame: Partial + ): Promise; + describeAllActions(): Promise; + describeSdkDemos(parame: req.Parmeter): Promise; + describeSDKInfo(parame: req.SDKInfoParmeter): Promise; + // describeAction(): Promise; + // describeParameters(parame?: req.Parmeter): Promise; +} diff --git a/src/commons/tencent/types/index.ts b/src/commons/tencent/types/index.ts new file mode 100644 index 0000000..308f5ae --- /dev/null +++ b/src/commons/tencent/types/index.ts @@ -0,0 +1 @@ +export * from './api'; \ No newline at end of file diff --git a/src/connectivity/client.ts b/src/connectivity/client.ts new file mode 100644 index 0000000..8dbdccb --- /dev/null +++ b/src/connectivity/client.ts @@ -0,0 +1,64 @@ +"use strict"; + +import * as vscode from "vscode"; +// import * as tencentcloud from "tencentcloud-sdk-nodejs-cvm"; +import { Client as CvmClient } from "tencentcloud-sdk-nodejs-cvm/tencentcloud/services/cvm/v20170312/cvm_client"; +import { Client as TkeClient } from "tencentcloud-sdk-nodejs-tke/tencentcloud/services/tke/v20180525/tke_client"; + +const tkeClient = TkeClient; +const cvmClient = CvmClient; + +export async function getTkeClient(): Promise { + const secretId = process.env.TENCENTCLOUD_SECRET_ID; + const secretKey = process.env.TENCENTCLOUD_SECRET_KEY; + + if (secretId === undefined || secretKey === undefined || secretId === null || secretKey === null) { + vscode.window.showErrorMessage("Cannot find TENCENTCLOUD_SECRET_ID and TENCENTCLOUD_SECRET_KEY, please set them first!"); + return null; + } + + return new tkeClient({ + credential: { + secretId: process.env.TENCENTCLOUD_SECRET_ID, + secretKey: process.env.TENCENTCLOUD_SECRET_KEY, + }, + region: (process.env.TENCENTCLOUD_REGION === undefined) ? + "ap-guangzhou" : process.env.TENCENTCLOUD_REGION, + profile: { + signMethod: "TC3-HMAC-SHA256", // 签名方法 + httpProfile: { + reqMethod: "POST", // 请求方法 + reqTimeout: 30, // 请求超时时间,默认60s + }, + }, + }); +} + +export async function getCvmClient(region?: string): Promise { + const secretId = process.env.TENCENTCLOUD_SECRET_ID; + const secretKey = process.env.TENCENTCLOUD_SECRET_KEY; + + if (secretId === undefined || secretKey === undefined || secretId === null || secretKey === null) { + vscode.window.showErrorMessage("Cannot find TENCENTCLOUD_SECRET_ID and TENCENTCLOUD_SECRET_KEY, please set them first!"); + return null; + } + + return new CvmClient({ + credential: { + secretId: secretId, + secretKey: secretKey, + }, + // 产品地域 + region: (process.env.TENCENTCLOUD_REGION === undefined) ? + "ap-guangzhou" : process.env.TENCENTCLOUD_REGION, + // 可选配置实例 + profile: { + // signMethod: "TC3-HMAC-SHA256", // 签名方法 + httpProfile: { + reqMethod: "POST", // 请求方法 + // reqTimeout: 60, // 请求超时时间,默认60s + endpoint: "cvm.tencentcloudapi.com", + }, + }, + }) +} diff --git a/src/extension.ts b/src/extension.ts index b58acad..605db98 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,101 +1,111 @@ // The module 'vscode' contains the VS Code extensibility API // Import the module and reference it with the alias vscode in your code below import * as vscode from 'vscode'; +import { init } from "vscode-nls-i18n"; import { TerraformCommand } from './common'; import { terraformShellManager } from "./terraformShellManager"; import * as settingUtils from './utils/settingUtils'; import { DialogOption } from "./utils/uiUtils"; import { TerraformCompletionProvider } from './autocomplete/TerraformCompletionProvider'; import { TerraformDefinitionProvider } from './autocomplete/TerraformDefinitionProvider'; +import { registerCommon } from './commons'; +import { registerView } from './views'; const TF_MODE: vscode.DocumentFilter = { language: 'terraform', scheme: 'file' }; // This method is called when your extension is activated // Your extension is activated the very first time the command is executed export async function activate(context: vscode.ExtensionContext) { - console.log('Congratulations, your extension "TencentCloud Terraform" is now active!'); + console.log('Congratulations, your extension "TencentCloud Terraform" is now active!'); - await settingUtils.checkTerraformInstalled(); - await settingUtils.checkTCCLIInstalled(); + await settingUtils.checkTerraformInstalled(); + await settingUtils.checkTCCLIInstalled(); - let disposableLogin = vscode.commands.registerCommand('tcTerraform.login', async () => { - // to-do - // wait for cloudshell and tccli implement ready - let accessKey = settingUtils.getSecretIdFromUI() - let secretKey = settingUtils.getSecretKeyFromUI() + let disposableLogin = vscode.commands.registerCommand('tcTerraform.login', async () => { + // to-do + // wait for cloudshell and tccli implement ready + let accessKey = settingUtils.getSecretIdFromUI(); + let secretKey = settingUtils.getSecretKeyFromUI(); - // process.env.TENCENTCLOUD_SECRET_ID=accessKey; - // process.env.TENCENTCLOUD_SECRET_KEY=secretKey; + // process.env.TENCENTCLOUD_SECRET_ID=accessKey; + // process.env.TENCENTCLOUD_SECRET_KEY=secretKey; - // console.log("TENCENTCLOUD_SECRET_ID:", process.env.TENCENTCLOUD_SECRET_ID); - // console.log("TENCENTCLOUD_SECRET_KEY:", process.env.TENCENTCLOUD_SECRET_KEY); + // console.log("TENCENTCLOUD_SECRET_ID:", process.env.TENCENTCLOUD_SECRET_ID); + // console.log("TENCENTCLOUD_SECRET_KEY:", process.env.TENCENTCLOUD_SECRET_KEY); - terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_ID=" + accessKey); - terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_KEY=" + secretKey); - }); + terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_ID=" + accessKey); + terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_KEY=" + secretKey); + }); - context.subscriptions.push(disposableLogin); + context.subscriptions.push(disposableLogin); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.init', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Init); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.init', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Init); + })); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.plan', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Plan); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.plan', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Plan); + })); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.apply', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Apply); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.apply', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Apply); + })); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.import', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Import); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.import', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Import); + })); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.validate', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Validate); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.validate', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Validate); + })); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.refresh', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Refresh); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.refresh', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Refresh); + })); - context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.destroy', () => { - terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Destroy); - })); + context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.destroy', () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Destroy); + })); - let disposableGraph = vscode.commands.registerCommand('tcTerraform.visualize', async () => { - if (settingUtils.isTerminalSetToCloudShell()) { - const choice: vscode.MessageItem = await vscode.window.showInformationMessage( - "Visualization only works locally. Would you like to run it in the integrated terminal?", - DialogOption.ok, - DialogOption.cancel, - ); - if (choice === DialogOption.cancel) { - return; - } - } - await terraformShellManager.getIntegratedShell().visualize(); - }); + let disposableGraph = vscode.commands.registerCommand('tcTerraform.visualize', async () => { + if (settingUtils.isTerminalSetToCloudShell()) { + const choice: vscode.MessageItem = await vscode.window.showInformationMessage( + "Visualization only works locally. Would you like to run it in the integrated terminal?", + DialogOption.ok, + DialogOption.cancel, + ); + if (choice === DialogOption.cancel) { + return; + } + } + await terraformShellManager.getIntegratedShell().visualize(); + }); - context.subscriptions.push(disposableGraph); + context.subscriptions.push(disposableGraph); - let disposableTest = vscode.commands.registerCommand('tcTerraform.test', async () => { - // to-do - }); + let disposableTest = vscode.commands.registerCommand('tcTerraform.test', async () => { + // to-do + }); - context.subscriptions.push(disposableTest); + context.subscriptions.push(disposableTest); - let disposablePush = vscode.commands.registerCommand('tcTerraform.push', async () => { - // to-do - // wait for cloudshell implement ready - }); + let disposablePush = vscode.commands.registerCommand('tcTerraform.push', async () => { + // to-do + // wait for cloudshell implement ready + }); - context.subscriptions.push(disposablePush); + context.subscriptions.push(disposablePush); + // auto-complete console.log('activate the auto complete(snippets and lint) feature'); context.subscriptions.push(vscode.languages.registerCompletionItemProvider(TF_MODE, new TerraformCompletionProvider(), '.')); context.subscriptions.push(vscode.languages.registerDefinitionProvider(TF_MODE, new TerraformDefinitionProvider())); + + // import + console.log('activate the import feature'); + init(context.extensionPath); + registerCommon(); + registerView(); } // This method is called when your extension is deactivated diff --git a/src/import/cvm.ts b/src/import/cvm.ts new file mode 100644 index 0000000..0360558 --- /dev/null +++ b/src/import/cvm.ts @@ -0,0 +1,61 @@ +"use strict"; + +import * as vscode from "vscode"; +import * as client from "../connectivity/client"; +import { Instance } from "tencentcloud-sdk-nodejs-cvm/tencentcloud/services/cvm/v20170312/cvm_models"; +import { ITencentCloudAPI } from "../commons/tencent/sdkApi"; +import { error } from "console"; + + +export class CvmService implements ITencentCloudAPI { + async getConfig(params?: any): Promise { + return { + 'resource': { + 'name': "tencentcloud_instance", + //'xxx': "yyy" + }, + 'import': { + 'filename': 'cvm.tf' + } + }; + } + + async describeInstances(params?: any): Promise { + const res = await (await client.getCvmClient()).DescribeInstances({ + // find all instances + }).then( + (result) => { + console.debug('[DEBUG]--------------------------------result:', result); + if (result.TotalCount === 0) { + throw new Error('[Warn] DescribeInstances result.TotalCount is 0.'); + } + return result.InstanceSet; + }, + (err) => { + console.error('[Error] DescribeInstances got a error from SDK.', err.message); + return err; + } + ); + + return res; + } + + + +} + +// export async function describeInstances(params:any): Promise { +// const res = await (await client.getCvmClient()).DescribeInstances({}).then(result => { +// console.warn('--------------------------------result:', result); +// if (result.TotalCount === 0) { +// throw new Error('[Warn] DescribeInstances result.TotalCount is 0.'); +// } + +// return result.InstanceSet; +// }).catch((error) => { +// console.error(error); +// return error; +// }); + +// return res; +// } diff --git a/src/integratedShell.ts b/src/integratedShell.ts index bbea64f..86350a2 100644 --- a/src/integratedShell.ts +++ b/src/integratedShell.ts @@ -13,13 +13,13 @@ import { commands, Uri, ViewColumn } from "vscode"; import * as TelemetryWrapper from "vscode-extension-telemetry-wrapper"; import { BaseShell } from "./baseShell"; import { Constants } from "./constants"; -// import { TestOption } from "./shared"; import { executeCommand } from "./utils/cpUtils"; -// import { isDockerInstalled, runCustomCommandInDocker, runE2EInDocker, runLintInDocker } from "./utils/dockerUtils"; import { drawGraph } from "./utils/dotUtils"; import { isDotInstalled } from "./utils/dotUtils"; -// import * as settingUtils from "./utils/settingUtils"; import { selectWorkspaceFolder } from "./utils/workspaceUtils"; +import { checkTerraformInstalled } from "./terraformUtils"; +// import stripAnsi from 'strip-ansi'; +import stripAnsi from 'strip-ansi'; export class IntegratedShell extends BaseShell { private static readonly GRAPH_FILE_NAME = "graph.png"; @@ -59,13 +59,73 @@ export class IntegratedShell extends BaseShell { await commands.executeCommand("vscode.open", Uri.file(path.join(cwd, IntegratedShell.GRAPH_FILE_NAME)), ViewColumn.Two); } - public runTerraformCmd(tfCommand: string) { + public async import(params: any, file?: string): Promise { + // const fileName = "cvm.tf"; + await checkTerraformInstalled(); + + const cwd: string = await selectWorkspaceFolder(); + if (!cwd) { + TelemetryWrapper.sendError(Error("noWorkspaceSelected")); + return; + } + + const fileName = (file === undefined) ? params.resource.type + '.tf' : file; + + const defaultContents = `resource "${params.resource.type}" "${params.resource.name}" {}`; + + const tfFile: string = path.join(cwd, fileName); + + if (!fse.existsSync(tfFile)) { + fse.writeFileSync(tfFile, defaultContents); + } else { + await fse.writeFile(tfFile, defaultContents); + } + + const importArgs = ['import ', params.resource.type, '.', params.resource.name, ' ', params.resource.id].join(''); + console.debug("[DEBUG]#### import cmd: args=[$s], defaultContents=[%s]", importArgs, defaultContents); + + // await this.deleteFile(cwd, fileName); + // const output: string = await executeCommand( + // "terraform", + // [args], + // { + // shell: true, + // cwd, + // }, + // ); + + await this.runTerraformCmd("terraform " + importArgs); + + // const stripAnsiPromise = import('strip-ansi'); + // const stripAnsi = (await stripAnsiPromise).default; + const content: string = + await executeCommand( + "terraform", + ["show"], + { + shell: true, + cwd, + } + ); + // const content = stripAnsi(output); + + const my = stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); + console.debug("my:%s", my); + + console.debug("[DEBUG]#### import content:[%s]", content); + fse.writeFileSync(tfFile, content); + + vscode.window.showInformationMessage(`The resource:[${params.resource.type}] has been imported successfully, generated tf file:[${tfFile}].`); + await commands.executeCommand("vscode.open", Uri.file(tfFile), ViewColumn.Active || ViewColumn.One); + } + + public async runTerraformCmd(tfCommand: string) { this.checkCreateTerminal(); this.terminal.show(); this.terminal.sendText(tfCommand); } - public runNormalCmd(tfCommand: string, newLine=true) { + public async runNormalCmd(tfCommand: string, newLine = true) { this.checkCreateTerminal(); this.terminal.show(); this.terminal.sendText(tfCommand, newLine); @@ -86,6 +146,13 @@ export class IntegratedShell extends BaseShell { } } + private async deleteFile(cwd, file: string): Promise { + const filePath: string = path.join(cwd, file); + if (await fse.pathExists(filePath)) { + await fse.remove(filePath); + } + } + private checkCreateTerminal(): void { if (!this.terminal) { this.terminal = vscode.window.createTerminal(Constants.TerraformTerminalName); diff --git a/src/terraformUtils.ts b/src/terraformUtils.ts new file mode 100644 index 0000000..8320220 --- /dev/null +++ b/src/terraformUtils.ts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +"use strict"; + +import { executeCommand } from "./utils/cpUtils"; +import * as settingUtils from "./utils/settingUtils"; +import { openUrlHintOrNotShowAgain } from "./utils/uiUtils"; + +export async function checkTerraformInstalled(): Promise { + if (settingUtils.isTerminalSetToCloudShell() || !settingUtils.getCheckTerraformCmd()) { + return; + } + try { + await executeCommand("terraform", ["-v"], { shell: true }); + } catch (error) { + openUrlHintOrNotShowAgain("Terraform is not installed, please make sure Terraform is in the PATH environment variable.", + "https://aka.ms/azTerraform-requirement", + () => { + settingUtils.setCheckTerraformCmd(false); + }); + } +} diff --git a/src/utils/cpUtils.ts b/src/utils/cpUtils.ts index 5013250..0275653 100644 --- a/src/utils/cpUtils.ts +++ b/src/utils/cpUtils.ts @@ -7,6 +7,7 @@ import * as cp from "child_process"; import { terraformChannel } from "../terraformChannel"; +import { error } from "console"; export async function executeCommand(command: string, args: string[], options: cp.SpawnOptions): Promise { return new Promise((resolve: (res: string) => void, reject: (e: Error) => void): void => { @@ -21,7 +22,12 @@ export async function executeCommand(command: string, args: string[], options: c childProc.stderr.on("data", (data: string | Buffer) => terraformChannel.append(data.toString())); - childProc.on("error", reject); + // childProc.on("error", reject); + childProc.on("error", (err: any) => { + console.error(err); + reject(err); + }); + childProc.on("close", (code: number) => { if (code !== 0) { reject(new Error(`Command "${command} ${args.toString()}" failed with exit code "${code}".`)); diff --git a/src/utils/icons.ts b/src/utils/icons.ts new file mode 100644 index 0000000..ddeeaf3 --- /dev/null +++ b/src/utils/icons.ts @@ -0,0 +1,10 @@ +// @ts-ignore +import { ThemeIcon } from 'vscode'; + +export class Icons { + public static getIcon(id:string): ThemeIcon { + // @ts-ignore + return Icons.getIcon(id); + } +} + diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index f12a787..e8ec74e 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -81,6 +81,29 @@ export async function checkTerraformInstalled(): Promise { } } +export function getCheckTerraformerCmd(): boolean { + return vscode.workspace.getConfiguration().get("tcTerraform.checkTerraformerCmd"); +} + +export function setCheckTerraformerCmd(checked: boolean): void { + vscode.workspace.getConfiguration().update("tcTerraform.checkTerraformerCmd", checked); +} + +export async function checkTerraformerInstalled(): Promise { + if (isTerminalSetToCloudShell() || !getCheckTerraformerCmd()) { + return; + } + try { + await cpUtils.executeCommand("terraformer", ["-v"], { shell: true }); + } catch (error) { + uiUtils.openUrlHintOrNotShowAgain("Terraformer is not installed, please make sure Terraformer is in the PATH environment variable.", + "https://github.com/GoogleCloudPlatform/terraformer", + () => { + setCheckTerraformerCmd(false); + }); + } +} + // export function getSecretId(): Promise { // if (isTerminalSetToCloudShell() || !checkTCCLIInstalled()) { // return; diff --git a/src/views/help/helpExplorer.ts b/src/views/help/helpExplorer.ts new file mode 100644 index 0000000..fa907f2 --- /dev/null +++ b/src/views/help/helpExplorer.ts @@ -0,0 +1,59 @@ +import { ThemeIcon } from "vscode"; +import { localize } from "vscode-nls-i18n"; + +import { container, tencent, cmds} from "../../commons"; +import { Icons } from "../../utils/icons"; + +const { tree } = tencent; + +const { TreeDataProvider, TreeItem } = tree; + +export class HelpProvider extends TreeDataProvider { + async getChildren(element?: tencent.tree.TreeItem | undefined): Promise { + if (!element) { + const elements = [ + new TreeItem(localize("TcTerraform.view.help.explorer.provider"), { + // iconPath: Icons.getIcon("tools"), + command: { + command: cmds.openURL, + title: "", + arguments: ["https://registry.terraform.io/providers/tencentcloudstack/tencentcloud/latest"], + }, + }), + new TreeItem(localize("TcTerraform.view.help.explorer.doc"), { + // iconPath: Icons.getIcon("book"), + command: { + command: cmds.openURL, + title: "", + arguments: ["https://cloud.tencent.com/product/tiat"], + }, + }), + new TreeItem(localize("TcTerraform.view.help.explorer.repo"), { + // iconPath: Icons.getIcon("github"), + command: { + command: cmds.openURL, + title: "", + arguments: ["https://github.com/tencentcloudstack/terraform-provider-tencentcloud"], + }, + }), + ]; + + // const info = await user.getInfo(); + // if (info) { + // elements.push( + // new TreeItem(localize("tencent.loginout", info.uin), { + // iconPath: Icons.getIcon("account"), + // command: { command: tencent.command.TENCENT_LOGINOUT, title: "" }, + // }) + // ); + // } + + return elements; + } + return []; + } +} + +container.bind(HelpProvider).toSelf().inSingletonScope(); + +container.bind(tencent.tree.TencentTreeProvider).toService(HelpProvider); diff --git a/src/views/help/index.ts b/src/views/help/index.ts new file mode 100644 index 0000000..2d95c8c --- /dev/null +++ b/src/views/help/index.ts @@ -0,0 +1,8 @@ +import { window } from "vscode"; + +import { container } from "../../commons/container"; +import { HelpProvider } from "./helpExplorer"; + +export function registerHelp() { + window.registerTreeDataProvider("tcTerraform.helpExplorer", container.get(HelpProvider)); +} \ No newline at end of file diff --git a/src/views/index.ts b/src/views/index.ts new file mode 100644 index 0000000..5216556 --- /dev/null +++ b/src/views/index.ts @@ -0,0 +1,8 @@ +import { registerHelp } from "./help"; +import { registerResources } from "./resources"; + +export function registerView() { + registerHelp(); + + registerResources(); +} diff --git a/src/views/resources/index.ts b/src/views/resources/index.ts new file mode 100644 index 0000000..f59a916 --- /dev/null +++ b/src/views/resources/index.ts @@ -0,0 +1,10 @@ +import { window } from "vscode"; + +import { container } from "../../commons/container"; +import { CvmResProvider, TkeResProvider } from "./resExplorer"; + +export function registerResources() { + // window.registerTreeDataProvider("tcTerraform.resourcesExplorer", container.get(CvmResProvider)); + window.registerTreeDataProvider("tcTerraform.resourcesExplorer.cvm", container.get(CvmResProvider)); + window.registerTreeDataProvider("tcTerraform.resourcesExplorer.tke", container.get(TkeResProvider)); +} \ No newline at end of file diff --git a/src/views/resources/resExplorer.ts b/src/views/resources/resExplorer.ts new file mode 100644 index 0000000..b630f83 --- /dev/null +++ b/src/views/resources/resExplorer.ts @@ -0,0 +1,104 @@ +import { inject } from "inversify"; +import { ThemeIcon, TreeItem, TreeItemCollapsibleState, window } from "vscode"; +import { readFile } from "fs/promises"; +import { join } from "path"; +import * as vscode from "vscode"; + +import { container, tencent, cmds } from "../../commons"; +import { res, IApiDoc } from "../../commons/tencent/types"; +import { Icons } from "../../utils/icons"; +import { CvmService } from "../../import/cvm"; + +export const defaultResourceName = "foo"; + +export class CvmResProvider extends tencent.tree.TreeDataProvider { + private icons: { [key: string]: any }; + + async getChildren(element?: tencent.tree.TreeItem | undefined): Promise { + if (!element) { + try { + // TODO: replace with specified resource type + const service = await new CvmService(); + const instances = await service.describeInstances(); + const config = await service.getConfig(); + + const items: tencent.tree.TreeItem[] = Array.isArray(instances) + ? instances.map(instance => ({ + label: `${instance.InstanceName}(${instance.InstanceId})`, + id: instance.InstanceId, + // iconPath: Icons.getIcon("book"), + command: { + command: cmds.executeImport, + title: "", + arguments: [{ + resource: { + type: config.resource.name, + name: defaultResourceName, + id: instance.InstanceId + }, + fileName: config.import.fileName + }], + }, + })) + : []; + + return items; + } catch (error) { + console.error('[Error]#### getChildren got a error:[%s] from CvmService. stack:%s', error.message, error.stack); + return error; + } + + } else { + if ("getChildren" in element) { + return (element as ParentItem).getChildren(element); + } + } + + return []; + } + + private async getFontIcons() { + return readFile(join(__dirname, "../package.json")).then((buff) => { + const { icons } = JSON.parse(buff.toString()).contributes; + this.icons = icons; + }); + } + + private async getIcon(name: string): Promise { + const iconName = `${name}-icon`; + + return Icons.getIcon(this.icons[iconName] ? iconName : "default-icon"); + } +} + +export class TkeResProvider extends tencent.tree.TreeDataProvider { + private icons: { [key: string]: any }; + // vscode.window.showInformationMessage(`TkeResProvider is called`); + + async getChildren(element?: tencent.tree.TreeItem | undefined): Promise { + vscode.window.showInformationMessage(`TkeResProvider is called`); + + return []; + } +} + +class ResourcesItem extends tencent.tree.TreeItem { + constructor(private action: res.ActionSet, _iconPath: ThemeIcon) { + // action.icon = iconPath.id; + super(action.actionName, { + command: { + command: "OPEN_API_DOC", + arguments: [action], + title: "", + }, + }); + } +} + +interface ParentItem { + getChildren(element: tencent.tree.TreeItem): Promise; +} + +container.bind(CvmResProvider).toSelf().inSingletonScope(); + +container.bind(tencent.tree.TencentTreeProvider).toService(CvmResProvider); diff --git a/tsconfig.json b/tsconfig.json index cd9b3a9..870d666 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,17 +1,36 @@ { - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "outDir": "out", - "lib": [ - "es6" - ], - "sourceMap": true, - "rootDir": "src", - // "strict": true /* enable all strict type-checking options */ - /* Additional Checks */ - "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - } -} + "compilerOptions": { + "experimentalDecorators": true, + "module": "commonjs", + "moduleResolution": "node", + "target": "ES2020", + "outDir": "./out", + "resolveJsonModule": true, + "allowSyntheticDefaultImports" :true, + "lib": [ + "ES2020" + ], + "sourceMap": true, + "types": [ + "reflect-metadata", + "node" + ], + "baseUrl": "./", + "paths": { + "@/*": [ + "src/*" + ] + }, + // "rootDir": "src", + // "strict": true /* enable all strict type-checking options */ + /* Additional Checks */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + }, + "ts-node": { + "require": [ + "tsconfig-paths/register" + ] + } +} \ No newline at end of file From e8551480e3c3eed07d3de5c005bb6a038472c545 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Sun, 23 Apr 2023 16:37:19 +0800 Subject: [PATCH 3/6] terraform import demo --- images/images_bak/logo.png | Bin 27193 -> 0 bytes package-lock.json | 71 +++------------ package.json | 17 +--- package.nls.json | 4 +- .../TerraformDefinitionProvider.ts | 3 +- src/common.ts | 2 + src/integratedShell.ts | 81 ++++++++++++------ src/test/suite/index.ts | 62 +++++++------- src/utils/cpUtils.ts | 15 ++-- src/utils/helper.ts | 51 +++++++++++ src/utils/uiUtils.ts | 3 +- tsconfig.json | 3 +- 12 files changed, 172 insertions(+), 140 deletions(-) delete mode 100644 images/images_bak/logo.png create mode 100644 src/utils/helper.ts diff --git a/images/images_bak/logo.png b/images/images_bak/logo.png deleted file mode 100644 index b7484f3daf37a082c894b741f3739ee821d77ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27193 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" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "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" }, @@ -830,7 +827,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -892,15 +888,6 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -917,7 +904,6 @@ "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" }, @@ -928,8 +914,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -1228,15 +1213,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -1770,7 +1746,6 @@ "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" } @@ -3048,15 +3023,6 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3070,17 +3036,14 @@ } }, "node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/strip-bom": { @@ -3108,7 +3071,6 @@ "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" }, @@ -3750,15 +3712,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", diff --git a/package.json b/package.json index 39f8685..4aa3569 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", "main": "./out/src/extension.js", + "type": "commonjs", "repository": { "type": "git", "url": "https://github.com/tencentcloudstack/vscode-tencentcloud-terraform.git" @@ -73,17 +74,6 @@ "contextualTitle": "Resources Explorer", "visibility": "collapsed" }, - { - "id": "tcTerraform.resourcesExplorer.tke", - "name": "%TcTerraform.view.resource.explorer.tke%", - "contextualTitle": "Resources Explorer", - "visibility": "collapsed" - }, - { - "id": "tcTerraform.templatesExplorer", - "name": "%TcTerraform.view.template.explorer%", - "visibility": "collapsed" - }, { "id": "tcTerraform.helpExplorer", "name": "%TcTerraform.view.help.explorer%", @@ -249,6 +239,7 @@ "all": "^0.0.0", "asynckit": "^0.4.0", "axios": "^1.3.5", + "chalk": "^4.1.2", "fs-extra": "^11.1.0", "inversify": "^6.0.1", "lodash": "^4.17.21", @@ -256,11 +247,11 @@ "opn": "^6.0.0", "reflect-metadata": "^0.1.13", "shared": "^0.2.0", - "strip-ansi": "^7.0.1", + "strip-ansi": "=6.0.0", "tencentcloud-sdk-nodejs": "^4.0.580", "tencentcloud-sdk-nodejs-cvm": "^4.0.580", "tencentcloud-sdk-nodejs-tke": "^4.0.576", "vscode-extension-telemetry-wrapper": "^0.13.3", "vscode-nls-i18n": "^0.2.4" } -} +} \ No newline at end of file diff --git a/package.nls.json b/package.nls.json index cf8b289..21a8578 100644 --- a/package.nls.json +++ b/package.nls.json @@ -3,8 +3,8 @@ "TcTerraform.view.session.explorer": "Connect to TencentCloud", "TcTerraform.view.template.explorer": "Tempaltes Management", "TcTerraform.view.resource.explorer": "Resources Explorer", - "TcTerraform.view.resource.explorer.cvm": "CVM", - "TcTerraform.view.resource.explorer.tke": "TKE", + "TcTerraform.view.resource.explorer.cvm": "Import Resouce: CVM", + "TcTerraform.view.resource.explorer.tke": "Import Resouce: TKE", "TcTerraform.view.help.explorer": "Help", "TcTerraform.view.help.explorer.provider": "TencentCloud Terraform Provider", "TcTerraform.view.help.explorer.doc": "Documentation", diff --git a/src/autocomplete/TerraformDefinitionProvider.ts b/src/autocomplete/TerraformDefinitionProvider.ts index 59723ed..3f24cdf 100644 --- a/src/autocomplete/TerraformDefinitionProvider.ts +++ b/src/autocomplete/TerraformDefinitionProvider.ts @@ -6,7 +6,8 @@ import { Definition } from "vscode"; import * as _ from "lodash"; -import * as opn from "opn"; +// import * as opn from "opn"; +import opn from "opn"; // var urls = require("../../config/snippets/tiat-urls.json"); import urls from "../../config/snippets/tiat-urls.json"; diff --git a/src/common.ts b/src/common.ts index f2e6376..dddea15 100644 --- a/src/common.ts +++ b/src/common.ts @@ -8,6 +8,8 @@ export enum TerraformCommand { Refresh = "terraform refresh", Destroy = "terraform destroy", Validate = "terraform validate", + Show = "terraform show", + State = "terraform state" } export enum TcCliCommand { diff --git a/src/integratedShell.ts b/src/integratedShell.ts index 86350a2..02737d9 100644 --- a/src/integratedShell.ts +++ b/src/integratedShell.ts @@ -18,8 +18,14 @@ import { drawGraph } from "./utils/dotUtils"; import { isDotInstalled } from "./utils/dotUtils"; import { selectWorkspaceFolder } from "./utils/workspaceUtils"; import { checkTerraformInstalled } from "./terraformUtils"; +import { TerraformCommand } from "./common"; +import * as helper from "./utils/helper"; +import { command } from "./commons/tencent/commands"; +import { promisify } from "util"; +import { ChildProcess } from "child_process"; +import * as cp from "child_process"; + // import stripAnsi from 'strip-ansi'; -import stripAnsi from 'strip-ansi'; export class IntegratedShell extends BaseShell { private static readonly GRAPH_FILE_NAME = "graph.png"; @@ -72,32 +78,29 @@ export class IntegratedShell extends BaseShell { const fileName = (file === undefined) ? params.resource.type + '.tf' : file; const defaultContents = `resource "${params.resource.type}" "${params.resource.name}" {}`; + const resAddress = `${params.resource.type}.${params.resource.name}`; const tfFile: string = path.join(cwd, fileName); - if (!fse.existsSync(tfFile)) { - fse.writeFileSync(tfFile, defaultContents); - } else { - await fse.writeFile(tfFile, defaultContents); - } + // reset file + await this.resetFileContent(tfFile, defaultContents); + // reset state + await this.resetTFState(resAddress); const importArgs = ['import ', params.resource.type, '.', params.resource.name, ' ', params.resource.id].join(''); - console.debug("[DEBUG]#### import cmd: args=[$s], defaultContents=[%s]", importArgs, defaultContents); - - // await this.deleteFile(cwd, fileName); - // const output: string = await executeCommand( - // "terraform", - // [args], - // { - // shell: true, - // cwd, - // }, - // ); - - await this.runTerraformCmd("terraform " + importArgs); - - // const stripAnsiPromise = import('strip-ansi'); - // const stripAnsi = (await stripAnsiPromise).default; + console.debug("[DEBUG]#### import cmd: args=[%s], defaultContents=[%s]", importArgs, defaultContents); + + const importRet: string = await executeCommand( + "terraform", + [importArgs], + { + shell: true, + cwd, + }, + ); + + // await this.runTerraformCmd("terraform " + importArgs); + const content: string = await executeCommand( "terraform", @@ -107,10 +110,6 @@ export class IntegratedShell extends BaseShell { cwd, } ); - // const content = stripAnsi(output); - - const my = stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007'); - console.debug("my:%s", my); console.debug("[DEBUG]#### import content:[%s]", content); fse.writeFileSync(tfFile, content); @@ -119,10 +118,36 @@ export class IntegratedShell extends BaseShell { await commands.executeCommand("vscode.open", Uri.file(tfFile), ViewColumn.Active || ViewColumn.One); } - public async runTerraformCmd(tfCommand: string) { + private async resetFileContent(tfFile: string, defaultContents: string) { + if (!fse.existsSync(tfFile)) { + fse.writeFileSync(tfFile, defaultContents); + } else { + await fse.writeFile(tfFile, defaultContents); + } + } + + private async resetTFState(resAddress: string) { + // const runFunc = () => this.runTerraformCmdWithoutTerminal(TerraformCommand.State, ['rm', '-lock=false', resAddress]); + // await helper.retryF(runFunc); + + await this.runTerraformCmd(TerraformCommand.State, ['rm', '-lock=false', resAddress]); + } + + public async runTerraformCmdWithoutTerminal(tfCommand: string, args?: string[]) { + const cmd = [tfCommand, ...(args || [])].join(' '); + const { stdout, stderr } = await promisify(cp.exec)(cmd); + return { stdout, stderr }; + } + + public async runTerraformCmd(tfCommand: string, args?: string[]) { this.checkCreateTerminal(); this.terminal.show(); - this.terminal.sendText(tfCommand); + + // const cmd= [tfCommand, args.values].join(' '); + let tmp: string[] = [tfCommand]; + args.forEach((arg) => tmp.push(arg)); + const cmd = tmp.join(' '); + this.terminal.sendText(cmd); } public async runNormalCmd(tfCommand: string, newLine = true) { diff --git a/src/test/suite/index.ts b/src/test/suite/index.ts index 7029e38..6671ba3 100644 --- a/src/test/suite/index.ts +++ b/src/test/suite/index.ts @@ -1,38 +1,40 @@ import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; +// import * as Mocha from 'mocha'; +import mocha from "mocha"; +// import * as glob from 'glob'; +import glob from 'glob'; export function run(): Promise { - // Create the mocha test - const mocha = new Mocha({ - ui: 'tdd', - color: true - }); + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true + }); - const testsRoot = path.resolve(__dirname, '..'); + const testsRoot = path.resolve(__dirname, '..'); - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); - try { - // Run the mocha test - mocha.run(failures => { - if (failures > 0) { - e(new Error(`${failures} tests failed.`)); - } else { - c(); - } - }); - } catch (err) { - console.error(err); - e(err); - } - }); - }); + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); } diff --git a/src/utils/cpUtils.ts b/src/utils/cpUtils.ts index 0275653..4995ffe 100644 --- a/src/utils/cpUtils.ts +++ b/src/utils/cpUtils.ts @@ -7,25 +7,30 @@ import * as cp from "child_process"; import { terraformChannel } from "../terraformChannel"; -import { error } from "console"; export async function executeCommand(command: string, args: string[], options: cp.SpawnOptions): Promise { return new Promise((resolve: (res: string) => void, reject: (e: Error) => void): void => { let result: string = ""; + const stripAnsi = require('strip-ansi'); const childProc: cp.ChildProcess = cp.spawn(command, args, options); - childProc.stdout.on("data", (data: string | Buffer) => { - data = data.toString(); + childProc.stdout.on("data", (raw: string | Buffer) => { + const data = stripAnsi(raw.toString()); + console.debug("[DEBUG]#### executeCommand received data:[%s]", data); + result = result.concat(data); terraformChannel.append(data); }); - childProc.stderr.on("data", (data: string | Buffer) => terraformChannel.append(data.toString())); + childProc.stderr.on("data", (raw: string | Buffer) => { + const data = stripAnsi(raw.toString()); + terraformChannel.append(data); + }); // childProc.on("error", reject); childProc.on("error", (err: any) => { console.error(err); - reject(err); + // reject(err); }); childProc.on("close", (code: number) => { diff --git a/src/utils/helper.ts b/src/utils/helper.ts new file mode 100644 index 0000000..2f7c258 --- /dev/null +++ b/src/utils/helper.ts @@ -0,0 +1,51 @@ +'use strict'; + +import { Function } from "lodash"; +import { Func } from "mocha"; + +export async function retryF(func: () => Promise<{ stdout: string, stderr: string }>): Promise { + const command = "terraform state rm tencentcloud_instance.foo"; + const maxRetry = 3; + let retryCount = 1; + + while (true) { + try { + const result = await func(); + console.log(result.stdout); + + // retry "Error acquiring the state lock" + if (/Error acquiring the state lock/.test(result.stderr)) { + if (retryCount < maxRetry) { + retryCount++; + console.log(`Retrying (${retryCount}/${maxRetry})...`); + await new Promise(resolve => setTimeout(resolve, 500)); // wait for 5 seconds before retrying + continue; + } else { + console.warn("[WARN]#### Max retry count reached."); + return; + } + } + if (/Invalid target address/.test(result.stderr) || /read-only file system/.test(result.stderr)) { + console.log(`Invalid target address is accepted: ${result.stderr}`); + return; + } + } catch (error) { + if (/Error acquiring the state lock/.test(error.message)) { + if (retryCount < maxRetry) { + retryCount++; + console.log(`An error occurred executing "${command}": ${error.message}. Retrying...`); + await new Promise(resolve => setTimeout(resolve, 500)); // wait for 5 seconds before retrying + continue; + } else { + console.warn("[WARN]#### Max retry count reached."); + return; + } + } else if (/Invalid target address/.test(error.message) || /read-only file system/.test(error.message)) { + return; + } else { + console.error(error); + return; + } + } + } +} \ No newline at end of file diff --git a/src/utils/uiUtils.ts b/src/utils/uiUtils.ts index 9818578..f5441cb 100644 --- a/src/utils/uiUtils.ts +++ b/src/utils/uiUtils.ts @@ -5,7 +5,8 @@ "use strict"; -import * as opn from "opn"; +// import * as opn from "opn"; +import opn from "opn"; import * as vscode from "vscode"; import { terraformChannel } from "../terraformChannel"; diff --git a/tsconfig.json b/tsconfig.json index 870d666..5729f13 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,8 @@ { "compilerOptions": { "experimentalDecorators": true, - "module": "commonjs", + // "module": "commonjs", + "module": "NodeNext", "moduleResolution": "node", "target": "ES2020", "outDir": "./out", From c26fb06964aeee89e74ad2c23e14ae88b07e93f3 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Sun, 23 Apr 2023 16:54:56 +0800 Subject: [PATCH 4/6] v0.0.4 --- README.md | 7 ++++--- package.json | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b948ea0..b24d94b 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,13 @@ This extension supports the following features: - Terraform commands: init, plan, apply, validate, refresh and destroy. - Auto complete: Autocomplete resource types, parameters, and resource definitions. +- Import resource: display the existing `CVM` resource and then import it as a tf file by `terraform import`. *TO-DO(Features to be supported in the future):* - Visualize: graph the terraform resources and modules. -- Resource Import: takeover and manage the existing resources on Tencent Cloud. -- Auto complete: provider code snippets of specified. -- Cloud shell: connect to Tencnet Cloud. +- Resource Import: support import of more kinds of resources by [Terraformer](https://github.com/GoogleCloudPlatform/terraformer). +- Autocomplete: provider code snippets of the specified resource. +- Connect to Tencent Cloud: login to Tencent Cloud and sync your account info(eg: obtain AKSK/Token automatically). ## Commands diff --git a/package.json b/package.json index 4aa3569..411af4a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-tencentcloud-terraform", "displayName": "Tencent Cloud Terraform", "description": "VS Code extension for developing with Terraform on Tencent Cloud", - "version": "0.0.2", + "version": "0.0.4", "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", @@ -223,7 +223,7 @@ "@types/mocha": "^10.0.1", "@types/node": "16.x", "@types/opn": "^3.0.28", - "@types/vscode": "^1.77.0", + "@types/vscode": "^1.70.0", "@typescript-eslint/eslint-plugin": "^5.49.0", "@typescript-eslint/parser": "^5.49.0", "@vscode/test-electron": "^2.2.2", From 751205a6d18532c73fdd174b7e17e3b04dff58d4 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Thu, 18 May 2023 09:27:28 +0800 Subject: [PATCH 5/6] add terraformer implement --- package.json | 14 ++- src/cloudShell.ts | 2 +- src/common.ts | 18 ---- src/commons/commands.ts | 33 ++++++- src/extension.ts | 23 ++++- src/import/cvm.ts | 4 +- src/integratedShell.ts | 81 +++++++---------- src/terraformUtils.ts | 25 ------ src/utils/baseRunner.ts | 50 +++++++++++ src/utils/cpUtils.ts | 4 +- src/utils/settingUtils.ts | 48 +--------- src/utils/terraformRunner.ts | 123 +++++++++++++++++++++++++ src/utils/terraformerRunner.ts | 138 +++++++++++++++++++++++++++++ src/views/resources/index.ts | 2 +- src/views/resources/resExplorer.ts | 2 +- terraform.log | 34 ------- 16 files changed, 412 insertions(+), 189 deletions(-) delete mode 100644 src/common.ts delete mode 100644 src/terraformUtils.ts create mode 100644 src/utils/baseRunner.ts create mode 100644 src/utils/terraformRunner.ts create mode 100644 src/utils/terraformerRunner.ts delete mode 100644 terraform.log diff --git a/package.json b/package.json index 411af4a..03896ef 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-tencentcloud-terraform", "displayName": "Tencent Cloud Terraform", "description": "VS Code extension for developing with Terraform on Tencent Cloud", - "version": "0.0.4", + "version": "0.0.5", "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", @@ -46,6 +46,8 @@ "onCommand:tcTerraform.visualize", "onCommand:tcTerraform.test", "onCommand:tcTerraform.push", + "onCommand:tcTerraformer.import", + "onCommand:tcTerraformer.plan", "workspaceContains:**/*.tf", "onLanguage:terraform" ], @@ -151,6 +153,16 @@ "command": "tcTerraform.push", "title": "Push", "category": "TencentCloud Terraform" + }, + { + "command": "tcTerraformer.import", + "title": "Import", + "category": "TencentCloud Terraformer" + }, + { + "command": "tcTerraformer.plan", + "title": "Plan", + "category": "TencentCloud Terraformer" } ], "configuration": { diff --git a/src/cloudShell.ts b/src/cloudShell.ts index 18199c4..1428d1c 100644 --- a/src/cloudShell.ts +++ b/src/cloudShell.ts @@ -14,7 +14,7 @@ import * as TelemetryWrapper from "vscode-extension-telemetry-wrapper"; import { BaseShell } from "./baseShell"; // import { aciConfig, Constants, exportContainerCmd, exportTestScript } from "./constants"; // import { azFileDelete, azFilePush, escapeFile, TerraformCommand, TestOption } from "./shared"; -import { TerraformCommand } from "./common"; +import { TerraformCommand } from "./commons/commands"; import { terraformChannel } from "./terraformChannel"; // import { getStorageAccountforCloudShell, IStorageAccount } from "./utils/cloudShellUtils"; import * as settingUtils from "./utils/settingUtils"; diff --git a/src/common.ts b/src/common.ts deleted file mode 100644 index dddea15..0000000 --- a/src/common.ts +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; - -export enum TerraformCommand { - Init = "terraform init", - Plan = "terraform plan", - Apply = "terraform apply", - Import = "terraform import", - Refresh = "terraform refresh", - Destroy = "terraform destroy", - Validate = "terraform validate", - Show = "terraform show", - State = "terraform state" -} - -export enum TcCliCommand { - Login = "tccli configure", - Service = "tccli service", -} diff --git a/src/commons/commands.ts b/src/commons/commands.ts index 184c8f1..f69631f 100644 --- a/src/commons/commands.ts +++ b/src/commons/commands.ts @@ -1,18 +1,43 @@ import { commands, env, Uri } from "vscode"; import { terraformShellManager } from "../terraformShellManager"; -import { TerraformCommand } from '../common'; + +"use strict"; + +export enum TerraformCommand { + Init = "terraform init", + Plan = "terraform plan", + Apply = "terraform apply", + Import = "terraform import", + Refresh = "terraform refresh", + Destroy = "terraform destroy", + Validate = "terraform validate", + Show = "terraform show", + State = "terraform state" +} + +export enum TerraformerCommand { + Plan = "terraformer plan", + Import = "terraformer import" +} + +export enum TcCliCommand { + Login = "tccli configure", + Service = "tccli service", +} + const openURL = "tcTerraform.openurl"; -const executeImport = TerraformCommand.Import; +// const executeImport = TerraformCommand.Import; +const executeImport = TerraformerCommand.Import; export function registerHelpCommands() { - commands.registerCommand(openURL, function (url: string) { + commands.registerCommand(cmds.openURL, function (url: string) { env.openExternal(Uri.parse(url)); }); } export function registerResourceCommands() { - commands.registerCommand(executeImport, function (param: any) { + commands.registerCommand(cmds.executeImport, function (param: any) { // terraformShellManager.getShell().runTerraformCmd(importObject); terraformShellManager.getIntegratedShell().import(param, param.fileName); }); diff --git a/src/extension.ts b/src/extension.ts index 605db98..9f7948f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,15 +1,17 @@ // The module 'vscode' contains the VS Code extensibility API // Import the module and reference it with the alias vscode in your code below import * as vscode from 'vscode'; +import * as settingUtils from "./utils/settingUtils"; import { init } from "vscode-nls-i18n"; -import { TerraformCommand } from './common'; +import { TerraformCommand } from "./commons/commands"; import { terraformShellManager } from "./terraformShellManager"; -import * as settingUtils from './utils/settingUtils'; import { DialogOption } from "./utils/uiUtils"; import { TerraformCompletionProvider } from './autocomplete/TerraformCompletionProvider'; import { TerraformDefinitionProvider } from './autocomplete/TerraformDefinitionProvider'; import { registerCommon } from './commons'; import { registerView } from './views'; +import { TerraformRunner } from './utils/terraformRunner'; +import { TerraformerRunner } from './utils/terraformerRunner'; const TF_MODE: vscode.DocumentFilter = { language: 'terraform', scheme: 'file' }; @@ -18,8 +20,8 @@ const TF_MODE: vscode.DocumentFilter = { language: 'terraform', scheme: 'file' } export async function activate(context: vscode.ExtensionContext) { console.log('Congratulations, your extension "TencentCloud Terraform" is now active!'); - await settingUtils.checkTerraformInstalled(); - await settingUtils.checkTCCLIInstalled(); + await TerraformRunner.getInstance().checkInstalled(); + await TerraformerRunner.getInstance().checkInstalled(); let disposableLogin = vscode.commands.registerCommand('tcTerraform.login', async () => { // to-do @@ -96,6 +98,19 @@ export async function activate(context: vscode.ExtensionContext) { context.subscriptions.push(disposablePush); + // terraformer + let disposableTferImport = vscode.commands.registerCommand('tcTerraformer.import', async () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Destroy); + }); + + context.subscriptions.push(disposableTferImport); + + let disposableTferPlan = vscode.commands.registerCommand('tcTerraformer.plan', async () => { + terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Destroy); + }); + + context.subscriptions.push(disposableTferPlan); + // auto-complete console.log('activate the auto complete(snippets and lint) feature'); context.subscriptions.push(vscode.languages.registerCompletionItemProvider(TF_MODE, new TerraformCompletionProvider(), '.')); diff --git a/src/import/cvm.ts b/src/import/cvm.ts index 0360558..949f7bc 100644 --- a/src/import/cvm.ts +++ b/src/import/cvm.ts @@ -15,7 +15,7 @@ export class CvmService implements ITencentCloudAPI { //'xxx': "yyy" }, 'import': { - 'filename': 'cvm.tf' + 'file': 'cvm.tf' } }; } @@ -25,7 +25,7 @@ export class CvmService implements ITencentCloudAPI { // find all instances }).then( (result) => { - console.debug('[DEBUG]--------------------------------result:', result); + // console.debug('[DEBUG]--------------------------------result:', result); if (result.TotalCount === 0) { throw new Error('[Warn] DescribeInstances result.TotalCount is 0.'); } diff --git a/src/integratedShell.ts b/src/integratedShell.ts index 02737d9..9570357 100644 --- a/src/integratedShell.ts +++ b/src/integratedShell.ts @@ -17,13 +17,14 @@ import { executeCommand } from "./utils/cpUtils"; import { drawGraph } from "./utils/dotUtils"; import { isDotInstalled } from "./utils/dotUtils"; import { selectWorkspaceFolder } from "./utils/workspaceUtils"; -import { checkTerraformInstalled } from "./terraformUtils"; -import { TerraformCommand } from "./common"; +import { TerraformCommand } from "./commons/commands"; import * as helper from "./utils/helper"; import { command } from "./commons/tencent/commands"; import { promisify } from "util"; import { ChildProcess } from "child_process"; import * as cp from "child_process"; +import { TerraformerRunner, CommandType, FlagType, FlagsMap } from "./utils/terraformerRunner"; +import { values } from "lodash"; // import stripAnsi from 'strip-ansi'; @@ -66,8 +67,10 @@ export class IntegratedShell extends BaseShell { } public async import(params: any, file?: string): Promise { - // const fileName = "cvm.tf"; - await checkTerraformInstalled(); + + const runner = TerraformerRunner.getInstance();// terraform or terraformer + + await runner.checkInstalled(); const cwd: string = await selectWorkspaceFolder(); if (!cwd) { @@ -75,63 +78,43 @@ export class IntegratedShell extends BaseShell { return; } - const fileName = (file === undefined) ? params.resource.type + '.tf' : file; + const cmd = CommandType.Import; + const flags: FlagsMap[] = [ + { + flag: FlagType.Resources, + value: ["mysql", "vpc", "subnet", "security_group"].join(",") + }, + { + flag: FlagType.Filter, + value: ["tencentcloud_mysql_instance", "cdb-fitq5t9h"].join("=") + }, + { + flag: FlagType.Regions, + value: "ap-guangzhou" + }, + { + flag: FlagType.Redirect, + value: "terraformer_default_result" + }, + ]; - const defaultContents = `resource "${params.resource.type}" "${params.resource.name}" {}`; - const resAddress = `${params.resource.type}.${params.resource.name}`; + console.debug("[DEBUG]#### Executing import command. cwd:[%s], cmd:[%s], flags:[%s]", cwd, cmd.toString, flags.toString); + const result = await runner.executeImport(cwd, "", cmd, flags); + console.debug("[DEBUG]#### Executed import command. result:[%s]", result); - const tfFile: string = path.join(cwd, fileName); - // reset file - await this.resetFileContent(tfFile, defaultContents); - // reset state - await this.resetTFState(resAddress); - const importArgs = ['import ', params.resource.type, '.', params.resource.name, ' ', params.resource.id].join(''); - console.debug("[DEBUG]#### import cmd: args=[%s], defaultContents=[%s]", importArgs, defaultContents); + const content: string = await runner.executeShow(cwd); - const importRet: string = await executeCommand( - "terraform", - [importArgs], - { - shell: true, - cwd, - }, - ); - - // await this.runTerraformCmd("terraform " + importArgs); - - const content: string = - await executeCommand( - "terraform", - ["show"], - { - shell: true, - cwd, - } - ); - console.debug("[DEBUG]#### import content:[%s]", content); - fse.writeFileSync(tfFile, content); + const tfFile: string = result; vscode.window.showInformationMessage(`The resource:[${params.resource.type}] has been imported successfully, generated tf file:[${tfFile}].`); - await commands.executeCommand("vscode.open", Uri.file(tfFile), ViewColumn.Active || ViewColumn.One); - } - private async resetFileContent(tfFile: string, defaultContents: string) { - if (!fse.existsSync(tfFile)) { - fse.writeFileSync(tfFile, defaultContents); - } else { - await fse.writeFile(tfFile, defaultContents); - } + await commands.executeCommand("vscode.open", Uri.file(tfFile), ViewColumn.Active || ViewColumn.One); } - private async resetTFState(resAddress: string) { - // const runFunc = () => this.runTerraformCmdWithoutTerminal(TerraformCommand.State, ['rm', '-lock=false', resAddress]); - // await helper.retryF(runFunc); - await this.runTerraformCmd(TerraformCommand.State, ['rm', '-lock=false', resAddress]); - } public async runTerraformCmdWithoutTerminal(tfCommand: string, args?: string[]) { const cmd = [tfCommand, ...(args || [])].join(' '); diff --git a/src/terraformUtils.ts b/src/terraformUtils.ts deleted file mode 100644 index 8320220..0000000 --- a/src/terraformUtils.ts +++ /dev/null @@ -1,25 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -"use strict"; - -import { executeCommand } from "./utils/cpUtils"; -import * as settingUtils from "./utils/settingUtils"; -import { openUrlHintOrNotShowAgain } from "./utils/uiUtils"; - -export async function checkTerraformInstalled(): Promise { - if (settingUtils.isTerminalSetToCloudShell() || !settingUtils.getCheckTerraformCmd()) { - return; - } - try { - await executeCommand("terraform", ["-v"], { shell: true }); - } catch (error) { - openUrlHintOrNotShowAgain("Terraform is not installed, please make sure Terraform is in the PATH environment variable.", - "https://aka.ms/azTerraform-requirement", - () => { - settingUtils.setCheckTerraformCmd(false); - }); - } -} diff --git a/src/utils/baseRunner.ts b/src/utils/baseRunner.ts new file mode 100644 index 0000000..bf47943 --- /dev/null +++ b/src/utils/baseRunner.ts @@ -0,0 +1,50 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Tencent Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +"use strict"; + +export abstract class BaseRunner { + + public tfExecutor: any; + + constructor() { + this.init(); + } + + /** + * execute this command to prepare the terraform import. + * @param cwd + * @returns + */ + public abstract preImport(cwd: string, args?: any, path?: string): Promise; + + /** + * execute this command to display/output the terraform state. + * @param cwd + * @returns + */ + public abstract executeShow(cwd: string, args?: string): Promise; + + /** + * execute this command to import the existing resource from tencentcloud + * @param cwd + * @param args + * @returns + */ + public abstract executeImport(cwd: string, args?: string): Promise; + + /** + * execute this command to handle post of the terraform import. + * @param cwd + * @returns + */ + public abstract postImport(cwd: string, args?: string): Promise; + + /** + * check binary whether ready or not + */ + public abstract checkInstalled(): Promise; + + public abstract init(): void; +} diff --git a/src/utils/cpUtils.ts b/src/utils/cpUtils.ts index 4995ffe..752fe60 100644 --- a/src/utils/cpUtils.ts +++ b/src/utils/cpUtils.ts @@ -24,12 +24,12 @@ export async function executeCommand(command: string, args: string[], options: c childProc.stderr.on("data", (raw: string | Buffer) => { const data = stripAnsi(raw.toString()); + console.error("Error found in stderr.on: %s", data); terraformChannel.append(data); }); - // childProc.on("error", reject); childProc.on("error", (err: any) => { - console.error(err); + console.error("Error found in childProc.on error: %s", err); // reject(err); }); diff --git a/src/utils/settingUtils.ts b/src/utils/settingUtils.ts index e8ec74e..5aff7b1 100644 --- a/src/utils/settingUtils.ts +++ b/src/utils/settingUtils.ts @@ -53,53 +53,7 @@ export async function checkTCCLIInstalled(): Promise { uiUtils.openUrlHintOrNotShowAgain("TCCLI is not installed, please install it before use extension.", "https://www.tencentcloud.com/document/product/1013/33464", () => { - setCheckTerraformCmd(false); - }); - } -} - -export function getCheckTerraformCmd(): boolean { - return vscode.workspace.getConfiguration().get("tcTerraform.checkTerraformCmd"); -} - -export function setCheckTerraformCmd(checked: boolean): void { - vscode.workspace.getConfiguration().update("tcTerraform.checkTerraformCmd", checked); -} - -export async function checkTerraformInstalled(): Promise { - if (isTerminalSetToCloudShell() || !getCheckTerraformCmd()) { - return; - } - try { - await cpUtils.executeCommand("terraform", ["-v"], { shell: true }); - } catch (error) { - uiUtils.openUrlHintOrNotShowAgain("Terraform is not installed, please make sure Terraform is in the PATH environment variable.", - "https://cloud.tencent.com/document/product/1653/82868", - () => { - setCheckTerraformCmd(false); - }); - } -} - -export function getCheckTerraformerCmd(): boolean { - return vscode.workspace.getConfiguration().get("tcTerraform.checkTerraformerCmd"); -} - -export function setCheckTerraformerCmd(checked: boolean): void { - vscode.workspace.getConfiguration().update("tcTerraform.checkTerraformerCmd", checked); -} - -export async function checkTerraformerInstalled(): Promise { - if (isTerminalSetToCloudShell() || !getCheckTerraformerCmd()) { - return; - } - try { - await cpUtils.executeCommand("terraformer", ["-v"], { shell: true }); - } catch (error) { - uiUtils.openUrlHintOrNotShowAgain("Terraformer is not installed, please make sure Terraformer is in the PATH environment variable.", - "https://github.com/GoogleCloudPlatform/terraformer", - () => { - setCheckTerraformerCmd(false); + // setCheckTerraformCmd(false); }); } } diff --git a/src/utils/terraformRunner.ts b/src/utils/terraformRunner.ts new file mode 100644 index 0000000..c7f1e14 --- /dev/null +++ b/src/utils/terraformRunner.ts @@ -0,0 +1,123 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Tencent Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +"use strict"; + +import * as path from "path"; +import * as fse from "fs-extra"; +import * as vscode from "vscode"; +import { executeCommand } from "./cpUtils"; +import { BaseRunner } from "./baseRunner"; +import { TerraformCommand } from "../commons/commands"; +import { terraformShellManager } from "../terraformShellManager"; +import * as settingUtils from "./settingUtils"; +import { openUrlHintOrNotShowAgain } from "./uiUtils"; + + +export class TerraformRunner extends BaseRunner { + private constructor() { + super(); + } + + private static ins: BaseRunner; + + public static getInstance(): BaseRunner { + if (!TerraformRunner.ins) { + TerraformRunner.ins = new TerraformRunner(); + } + return TerraformRunner.ins; + } + + public init(): void { + throw new Error("Method not implemented."); + } + + public async executeShow(cwd: string, args?: string): Promise { + return await executeCommand( + "terraform", + ["show"], + { + shell: true, + cwd, + } + ); + } + + public async executeImport(cwd: string, args?: string): Promise { + return await executeCommand( + "terraform", + [args], + { + shell: true, + cwd, + } + ); + } + + public async preImport(cwd: string, params: any, file: string): Promise<{ importArgs: string, tfFile: string }> { + const fileName = (file === undefined) ? params.resource.type + '.tf' : file; + + const defaultContents = `resource "${params.resource.type}" "${params.resource.name}" {}`; + const resAddress = `${params.resource.type}.${params.resource.name}`; + + const tfFile: string = path.join(cwd, fileName); + + // reset file + await this.resetFileContent(tfFile, defaultContents); + // reset state + await this.resetTFState(resAddress); + + const importArgs = ['import ', params.resource.type, '.', params.resource.name, ' ', params.resource.id].join(''); + console.debug("[DEBUG]#### import cmd: args=[%s], defaultContents=[%s]", importArgs, defaultContents); + return { importArgs, tfFile }; + } + + + private async resetFileContent(tfFile: string, defaultContents: string) { + if (!fse.existsSync(tfFile)) { + fse.writeFileSync(tfFile, defaultContents); + } else { + await fse.writeFile(tfFile, defaultContents); + } + } + + private async resetTFState(resAddress: string) { + await terraformShellManager.getIntegratedShell().runTerraformCmd(TerraformCommand.State, ['rm', '-lock=false', resAddress]); + } + + /** + * todo: implement + * @param cwd + * @param args + */ + public postImport(cwd: string, args?: string): Promise { + throw new Error("Method not implemented."); + } + + public async checkInstalled(): Promise { + if (settingUtils.isTerminalSetToCloudShell() || !getCheckTerraformCmd()) { + return; + } + try { + await executeCommand("terraform", ["-v"], { shell: true }); + } catch (error) { + openUrlHintOrNotShowAgain("Terraform is not installed, please make sure Terraform is in the PATH environment variable.", + "https://aka.ms/azTerraform-requirement", + () => { + setCheckTerraformCmd(false); + }); + } + return; + } +} + +export function getCheckTerraformCmd(): boolean { + return vscode.workspace.getConfiguration().get("tcTerraform.checkTerraformCmd"); +} + +export function setCheckTerraformCmd(checked: boolean): void { + vscode.workspace.getConfiguration().update("tcTerraform.checkTerraformCmd", checked); +} + + diff --git a/src/utils/terraformerRunner.ts b/src/utils/terraformerRunner.ts new file mode 100644 index 0000000..9ae885c --- /dev/null +++ b/src/utils/terraformerRunner.ts @@ -0,0 +1,138 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Tencent Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +"use strict"; +import * as vscode from "vscode"; +import * as settingUtils from "./settingUtils"; +import { executeCommand } from "./cpUtils"; +import { BaseRunner } from "./baseRunner"; +import { openUrlHintOrNotShowAgain } from "./uiUtils"; + +export enum CommandType { + Import = "import tencentcloud", + Plan = "plan tencentcloud", + Version = "version" +} + +export enum FlagType { + Resources = "-r", + Filter = "-f", + Bucket = "-b", + Excludes = "-x", + Output = "-O", + Regions = "--regions", + State = "-s", + RetryNum = "-n", + RetrySleep = "-m", + Redirect = ">" +} + +export interface FlagsMap { + flag: FlagType; + value: string; +} + +export class TerraformerRunner extends BaseRunner { + private constructor() { + super(); + } + + private static ins: BaseRunner; + + public static getInstance(): TerraformerRunner { + if (!TerraformerRunner.ins) { + TerraformerRunner.ins = new TerraformerRunner(); + } + return TerraformerRunner.ins; + } + + public init(): void { + throw new Error("Method not implemented."); + } + + + public async preImport(cwd: string, args?: any, path?: string): Promise { + await executeCommand( + "terraform", + ["init", "-upgrade"], + { + shell: true, + cwd, + }, + ); + + + // return await executeCommand( + // "terraformer", + // exeArgs, + // { + // shell: true, + // cwd, + // } + // ); + } + + public async executeImport(cwd: string, args?: string, cmd?: CommandType, flags?: FlagsMap[]): Promise { + const exeArgs: string[] = []; + if (args){ + exeArgs.push(args); + } + + if (cmd !== null) { + exeArgs.push(cmd.toString()); + } + + if (flags) { + flags.forEach((vv) => { + exeArgs.push(vv.flag.toString(), " ", vv.value); + }); + } + + const opExeArgs: string = exeArgs.join(" "); + + console.debug("[DEBUG]#### import opExeArgs:[%s]", "terraformer" + opExeArgs); + + return await executeCommand( + "terraformer", + exeArgs, + { + shell: true, + cwd, + } + ); + } + + public async postImport(cwd: string, args?: string): Promise { + throw new Error("Method not implemented."); + } + + public async executeShow(cwd: string, args?: string): Promise { + console.debug("[DEBUG]#### terraformer not need this step, skip it."); + return ""; + } + + public async checkInstalled(): Promise { + if (settingUtils.isTerminalSetToCloudShell() || !getCheckTerraformerCmd()) { + return; + } + try { + await executeCommand("terraformer", ["-v"], { shell: true }); + } catch (error) { + openUrlHintOrNotShowAgain("Terraformer is not installed, please make sure Terraformer is in the PATH environment variable.", + "https://github.com/GoogleCloudPlatform/terraformer", + () => { + setCheckTerraformerCmd(false); + }); + } + return; + } +} + +export function getCheckTerraformerCmd(): boolean { + return vscode.workspace.getConfiguration().get("tcTerraform.checkTerraformerCmd"); +} + +export function setCheckTerraformerCmd(checked: boolean): void { + vscode.workspace.getConfiguration().update("tcTerraform.checkTerraformerCmd", checked); +} diff --git a/src/views/resources/index.ts b/src/views/resources/index.ts index f59a916..5419113 100644 --- a/src/views/resources/index.ts +++ b/src/views/resources/index.ts @@ -6,5 +6,5 @@ import { CvmResProvider, TkeResProvider } from "./resExplorer"; export function registerResources() { // window.registerTreeDataProvider("tcTerraform.resourcesExplorer", container.get(CvmResProvider)); window.registerTreeDataProvider("tcTerraform.resourcesExplorer.cvm", container.get(CvmResProvider)); - window.registerTreeDataProvider("tcTerraform.resourcesExplorer.tke", container.get(TkeResProvider)); + // window.registerTreeDataProvider("tcTerraform.resourcesExplorer.tke", container.get(TkeResProvider)); } \ No newline at end of file diff --git a/src/views/resources/resExplorer.ts b/src/views/resources/resExplorer.ts index b630f83..8628d0d 100644 --- a/src/views/resources/resExplorer.ts +++ b/src/views/resources/resExplorer.ts @@ -36,7 +36,7 @@ export class CvmResProvider extends tencent.tree.TreeDataProvider { name: defaultResourceName, id: instance.InstanceId }, - fileName: config.import.fileName + fileName: config.import.file }], }, })) diff --git a/terraform.log b/terraform.log deleted file mode 100644 index 7a82c1f..0000000 --- a/terraform.log +++ /dev/null @@ -1,34 +0,0 @@ -2023-03-02T17:31:56.349+0800 [INFO] Terraform version: 1.3.4 -2023-03-02T17:31:56.350+0800 [DEBUG] using github.com/hashicorp/go-tfe v1.9.0 -2023-03-02T17:31:56.350+0800 [DEBUG] using github.com/hashicorp/hcl/v2 v2.14.1 -2023-03-02T17:31:56.350+0800 [DEBUG] using github.com/hashicorp/terraform-config-inspect v0.0.0-20210209133302-4fd17a0faac2 -2023-03-02T17:31:56.350+0800 [DEBUG] using github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 -2023-03-02T17:31:56.350+0800 [DEBUG] using github.com/zclconf/go-cty v1.12.0 -2023-03-02T17:31:56.350+0800 [INFO] Go runtime version: go1.19.3 -2023-03-02T17:31:56.350+0800 [INFO] CLI args: []string{"terraform", "init"} -2023-03-02T17:31:56.350+0800 [TRACE] Stdout is a terminal of width 139 -2023-03-02T17:31:56.350+0800 [TRACE] Stderr is a terminal of width 139 -2023-03-02T17:31:56.350+0800 [TRACE] Stdin is a terminal -2023-03-02T17:31:56.350+0800 [DEBUG] Attempting to open CLI config file: /Users/luoyin/dev.tfrc -2023-03-02T17:31:56.350+0800 [INFO] Loading CLI configuration from /Users/luoyin/dev.tfrc -2023-03-02T17:31:56.352+0800 [DEBUG] Not reading CLI config directory because config location is overridden by environment variable -2023-03-02T17:31:56.353+0800 [DEBUG] Explicit provider installation configuration is set -2023-03-02T17:31:56.353+0800 [TRACE] Selected provider installation method cliconfig.ProviderInstallationDirect with includes [] and excludes [] -2023-03-02T17:31:56.355+0800 [INFO] CLI command args: []string{"init"} -2023-03-22T22:14:19.169+0800 [INFO] Terraform version: 1.3.4 -2023-03-22T22:14:19.170+0800 [DEBUG] using github.com/hashicorp/go-tfe v1.9.0 -2023-03-22T22:14:19.170+0800 [DEBUG] using github.com/hashicorp/hcl/v2 v2.14.1 -2023-03-22T22:14:19.170+0800 [DEBUG] using github.com/hashicorp/terraform-config-inspect v0.0.0-20210209133302-4fd17a0faac2 -2023-03-22T22:14:19.170+0800 [DEBUG] using github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 -2023-03-22T22:14:19.170+0800 [DEBUG] using github.com/zclconf/go-cty v1.12.0 -2023-03-22T22:14:19.170+0800 [INFO] Go runtime version: go1.19.3 -2023-03-22T22:14:19.170+0800 [INFO] CLI args: []string{"terraform", "init"} -2023-03-22T22:14:19.170+0800 [TRACE] Stdout is a terminal of width 142 -2023-03-22T22:14:19.170+0800 [TRACE] Stderr is a terminal of width 142 -2023-03-22T22:14:19.170+0800 [TRACE] Stdin is a terminal -2023-03-22T22:14:19.170+0800 [DEBUG] Attempting to open CLI config file: /Users/luoyin/dev.tfrc -2023-03-22T22:14:19.170+0800 [INFO] Loading CLI configuration from /Users/luoyin/dev.tfrc -2023-03-22T22:14:19.170+0800 [DEBUG] Not reading CLI config directory because config location is overridden by environment variable -2023-03-22T22:14:19.170+0800 [DEBUG] Explicit provider installation configuration is set -2023-03-22T22:14:19.170+0800 [TRACE] Selected provider installation method cliconfig.ProviderInstallationDirect with includes [] and excludes [] -2023-03-22T22:14:19.171+0800 [INFO] CLI command args: []string{"init"} From 064f3d23ccfb593d584d14c7de535cd1d4672253 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Fri, 19 May 2023 09:52:29 +0800 Subject: [PATCH 6/6] terraformer integrated --- src/import/cvm.ts | 5 +--- src/import/mysql.ts | 11 +++++++++ src/import/tke.ts | 10 ++++++++ src/integratedShell.ts | 27 +++++++++++++-------- src/utils/baseRunner.ts | 18 +++++++------- src/utils/terraformRunner.ts | 6 ++--- src/utils/terraformerRunner.ts | 39 +++++++++++++++++------------- src/views/resources/resExplorer.ts | 4 ++- 8 files changed, 76 insertions(+), 44 deletions(-) create mode 100644 src/import/mysql.ts create mode 100644 src/import/tke.ts diff --git a/src/import/cvm.ts b/src/import/cvm.ts index 949f7bc..f5d09bc 100644 --- a/src/import/cvm.ts +++ b/src/import/cvm.ts @@ -6,10 +6,10 @@ import { Instance } from "tencentcloud-sdk-nodejs-cvm/tencentcloud/services/cvm/ import { ITencentCloudAPI } from "../commons/tencent/sdkApi"; import { error } from "console"; - export class CvmService implements ITencentCloudAPI { async getConfig(params?: any): Promise { return { + 'product': 'cvm', 'resource': { 'name': "tencentcloud_instance", //'xxx': "yyy" @@ -39,9 +39,6 @@ export class CvmService implements ITencentCloudAPI { return res; } - - - } // export async function describeInstances(params:any): Promise { diff --git a/src/import/mysql.ts b/src/import/mysql.ts new file mode 100644 index 0000000..6a773c5 --- /dev/null +++ b/src/import/mysql.ts @@ -0,0 +1,11 @@ +import { ITencentCloudAPI } from "@/commons/tencent/sdkApi"; + +export class MysqlService implements ITencentCloudAPI { + describeInstances(params?: any): Promise { + throw new Error("Method not implemented."); + } + getConfig(params?: any): Promise { + throw new Error("Method not implemented."); + } + +} \ No newline at end of file diff --git a/src/import/tke.ts b/src/import/tke.ts new file mode 100644 index 0000000..b49eec4 --- /dev/null +++ b/src/import/tke.ts @@ -0,0 +1,10 @@ +import { ITencentCloudAPI } from "@/commons/tencent/sdkApi"; + +export class TkeService implements ITencentCloudAPI { + describeInstances(params?: any): Promise { + throw new Error("Method not implemented."); + } + getConfig(params?: any): Promise { + throw new Error("Method not implemented."); + } +} \ No newline at end of file diff --git a/src/integratedShell.ts b/src/integratedShell.ts index 9570357..a42bd85 100644 --- a/src/integratedShell.ts +++ b/src/integratedShell.ts @@ -23,7 +23,7 @@ import { command } from "./commons/tencent/commands"; import { promisify } from "util"; import { ChildProcess } from "child_process"; import * as cp from "child_process"; -import { TerraformerRunner, CommandType, FlagType, FlagsMap } from "./utils/terraformerRunner"; +import { TerraformerRunner, CommandType, FlagType, FlagsMap, defaultProduct } from "./utils/terraformerRunner"; import { values } from "lodash"; // import stripAnsi from 'strip-ansi'; @@ -78,15 +78,23 @@ export class IntegratedShell extends BaseShell { return; } + const preRet = await runner.preImport(cwd); + console.debug("[DEBUG]#### Executed pre-import. result:[%s]", preRet); + + const resource = defaultProduct; + if (!defaultProduct.includes(params.product)) { + resource.push(params.product); + } + const cmd = CommandType.Import; const flags: FlagsMap[] = [ { flag: FlagType.Resources, - value: ["mysql", "vpc", "subnet", "security_group"].join(",") + value: resource.join(",") }, { flag: FlagType.Filter, - value: ["tencentcloud_mysql_instance", "cdb-fitq5t9h"].join("=") + value: [params.resource.type, params.resource.id].join("=") }, { flag: FlagType.Regions, @@ -98,16 +106,16 @@ export class IntegratedShell extends BaseShell { }, ]; - console.debug("[DEBUG]#### Executing import command. cwd:[%s], cmd:[%s], flags:[%s]", cwd, cmd.toString, flags.toString); - const result = await runner.executeImport(cwd, "", cmd, flags); - console.debug("[DEBUG]#### Executed import command. result:[%s]", result); - + const importRet = await runner.executeImport(cwd, "", cmd, flags); + console.debug("[DEBUG]#### Executed import command. result:[%s]", importRet); + // terraform state replace-provider registry.terraform.io/-/tencentcloud tencentcloudstack/tencentcloud + const args = ""; + const postRet = await runner.postImport(cwd, args); const content: string = await runner.executeShow(cwd); - - const tfFile: string = result; + const tfFile: string = importRet; vscode.window.showInformationMessage(`The resource:[${params.resource.type}] has been imported successfully, generated tf file:[${tfFile}].`); @@ -115,7 +123,6 @@ export class IntegratedShell extends BaseShell { } - public async runTerraformCmdWithoutTerminal(tfCommand: string, args?: string[]) { const cmd = [tfCommand, ...(args || [])].join(' '); const { stdout, stderr } = await promisify(cp.exec)(cmd); diff --git a/src/utils/baseRunner.ts b/src/utils/baseRunner.ts index bf47943..4dea3b0 100644 --- a/src/utils/baseRunner.ts +++ b/src/utils/baseRunner.ts @@ -12,6 +12,7 @@ export abstract class BaseRunner { this.init(); } + public abstract init(): void; /** * execute this command to prepare the terraform import. * @param cwd @@ -19,13 +20,6 @@ export abstract class BaseRunner { */ public abstract preImport(cwd: string, args?: any, path?: string): Promise; - /** - * execute this command to display/output the terraform state. - * @param cwd - * @returns - */ - public abstract executeShow(cwd: string, args?: string): Promise; - /** * execute this command to import the existing resource from tencentcloud * @param cwd @@ -37,14 +31,20 @@ export abstract class BaseRunner { /** * execute this command to handle post of the terraform import. * @param cwd + * @param executor Choose who will execute this command? terraform or terraformer * @returns */ - public abstract postImport(cwd: string, args?: string): Promise; + public abstract postImport(cwd: string, executor?:string, args?: string): Promise; /** * check binary whether ready or not */ public abstract checkInstalled(): Promise; - public abstract init(): void; + /** + * execute this command to display/output the terraform state. + * @param cwd + * @returns + */ + public abstract executeShow(cwd: string, args?: string): Promise; } diff --git a/src/utils/terraformRunner.ts b/src/utils/terraformRunner.ts index c7f1e14..5ad5388 100644 --- a/src/utils/terraformRunner.ts +++ b/src/utils/terraformRunner.ts @@ -30,7 +30,7 @@ export class TerraformRunner extends BaseRunner { } public init(): void { - throw new Error("Method not implemented."); + // throw new Error("Method not implemented."); } public async executeShow(cwd: string, args?: string): Promise { @@ -91,8 +91,8 @@ export class TerraformRunner extends BaseRunner { * @param cwd * @param args */ - public postImport(cwd: string, args?: string): Promise { - throw new Error("Method not implemented."); + public async postImport(cwd: string, args?: string): Promise { + console.debug("[DEBUG]#### terraform postImport TODO."); } public async checkInstalled(): Promise { diff --git a/src/utils/terraformerRunner.ts b/src/utils/terraformerRunner.ts index 9ae885c..99f2c7f 100644 --- a/src/utils/terraformerRunner.ts +++ b/src/utils/terraformerRunner.ts @@ -9,6 +9,8 @@ import { executeCommand } from "./cpUtils"; import { BaseRunner } from "./baseRunner"; import { openUrlHintOrNotShowAgain } from "./uiUtils"; +export const defaultProduct = ["vpc", "subnet", "security_group"]; + export enum CommandType { Import = "import tencentcloud", Plan = "plan tencentcloud", @@ -34,6 +36,7 @@ export interface FlagsMap { } export class TerraformerRunner extends BaseRunner { + static defaultProduct: any; private constructor() { super(); } @@ -48,12 +51,13 @@ export class TerraformerRunner extends BaseRunner { } public init(): void { - throw new Error("Method not implemented."); + // throw new Error("Method not implemented."); } public async preImport(cwd: string, args?: any, path?: string): Promise { - await executeCommand( + console.debug("[DEBUG]#### TerraformerRunner.preImport begin, cwd:[%s], args:[%s], path:[%s]", cwd, args, path); + return await executeCommand( "terraform", ["init", "-upgrade"], { @@ -61,21 +65,12 @@ export class TerraformerRunner extends BaseRunner { cwd, }, ); - - - // return await executeCommand( - // "terraformer", - // exeArgs, - // { - // shell: true, - // cwd, - // } - // ); } public async executeImport(cwd: string, args?: string, cmd?: CommandType, flags?: FlagsMap[]): Promise { + console.debug("[DEBUG]#### TerraformerRunner.executeImport begin, cwd:[%s], args:[%s], cmd:[%s], flags:[%s]", cwd, args, cmd.toString(), flags.toString()); const exeArgs: string[] = []; - if (args){ + if (args) { exeArgs.push(args); } @@ -85,13 +80,13 @@ export class TerraformerRunner extends BaseRunner { if (flags) { flags.forEach((vv) => { - exeArgs.push(vv.flag.toString(), " ", vv.value); + exeArgs.push(vv.flag.toString(), vv.value); }); } const opExeArgs: string = exeArgs.join(" "); - console.debug("[DEBUG]#### import opExeArgs:[%s]", "terraformer" + opExeArgs); + console.debug("[DEBUG]#### import exeArgs:[%s]", opExeArgs); return await executeCommand( "terraformer", @@ -104,11 +99,21 @@ export class TerraformerRunner extends BaseRunner { } public async postImport(cwd: string, args?: string): Promise { - throw new Error("Method not implemented."); + console.debug("[DEBUG]#### TerraformerRunner.postImport begin, cwd:[%s], args:[%s]", cwd, args); + const exeArgs = args.split(","); + + return await executeCommand( + "terraformer", + exeArgs, + { + shell: true, + cwd, + } + ); } public async executeShow(cwd: string, args?: string): Promise { - console.debug("[DEBUG]#### terraformer not need this step, skip it."); + console.debug("[DEBUG]#### TerraformerRunner not need this step, skip it."); return ""; } diff --git a/src/views/resources/resExplorer.ts b/src/views/resources/resExplorer.ts index 8628d0d..e9a8c11 100644 --- a/src/views/resources/resExplorer.ts +++ b/src/views/resources/resExplorer.ts @@ -36,7 +36,9 @@ export class CvmResProvider extends tencent.tree.TreeDataProvider { name: defaultResourceName, id: instance.InstanceId }, - fileName: config.import.file + product: config.product, + fileName: config.import.file, + this: config }], }, }))