diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 3184ec467b..0000000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Build -on: - push: - branches: - - main - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - - name: checkout repo - uses: actions/checkout@v2 - - - uses: actions/setup-node@v2 - with: - node-version-file: '.nvmrc' - - - name: clean install dependencies - run: npm ci - - - name: compile and create vsix - run: npm run package -- -o extension.vsix - - - name: upload vsix as artifact - uses: actions/upload-artifact@v1 - with: - name: vscode-terraform-${{github.sha}}.vsix - path: ${{github.workspace}}/extension.vsix diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 00dce07935..01102a42a7 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -3,43 +3,81 @@ name: Publish Preview release on: schedule: # run every day at 00:15 UTC to avoid high load times at the start of every hour - - cron: '15 0 * * *' + - cron: "15 0 * * *" jobs: - publish: - name: Publish Preview to VS Code Marketplace - runs-on: ubuntu-latest + build: + name: Package + strategy: + matrix: + include: + - vsce_target: win32-x64 + ls_target: windows_amd64 + npm_config_arch: x64 + - vsce_target: win32-ia32 + ls_target: windows_386 + npm_config_arch: ia32 + - vsce_target: win32-arm64 + ls_target: windows_arm64 + npm_config_arch: arm + - vsce_target: linux-x64 + ls_target: linux_amd64 + npm_config_arch: x64 + - vsce_target: linux-arm64 + ls_target: linux_arm64 + npm_config_arch: arm64 + - vsce_target: linux-armhf + ls_target: linux_arm + npm_config_arch: arm + - vsce_target: darwin-x64 + ls_target: darwin_amd64 + npm_config_arch: x64 + - vsce_target: darwin-arm64 + ls_target: darwin_arm64 + npm_config_arch: arm64 + runs-on: "ubuntu-latest" steps: - name: Check out repository uses: actions/checkout@v2 - - name: Set preview in package.json id: set-preview run: | ./build/preview - - name: Read extension version id: ext-version run: | content=`cat ./package.json | jq -r .version` echo "::set-output name=content::$content" - - uses: actions/setup-node@v2 with: - node-version-file: '.nvmrc' - + node-version-file: ".nvmrc" - name: Install dependencies run: npm ci - - - name: vsce package - run: npx -- vsce package --out=${{ runner.temp }}/terraform-${{ steps.ext-version.outputs.content }}.vsix - + env: + npm_config_arch: ${{ matrix.npm_config_arch }} + - name: Package VSIX + run: npm run package -- --target=${{ matrix.vsce_target }} + env: + ls_target: ${{ matrix.ls_target }} + - name: Upload vsix as artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.vsce_target }} + path: "*.vsix" - name: Check latest published version + shell: bash run: | export EXTENSION_ID=`cat package.json | jq -r '.publisher + "." + .name'` npx -- vsce show --json $EXTENSION_ID | jq '.versions[0]' - - name: vsce publish - run: npx -- vsce publish --no-git-tag-version --packagePath=${{ runner.temp }}/terraform-${{ steps.ext-version.outputs.content }}.vsix + publish: + name: Publish All + runs-on: ubuntu-latest + needs: build + if: success() && startsWith( github.ref, 'refs/tags/v') + steps: + - uses: actions/download-artifact@v2 + - name: Publish Preview Extension + run: npx vsce publish --no-git-tag-version --packagePath $(find . -iname *.vsix) env: VSCE_PAT: ${{ secrets.VSCE_PAT }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 7750850f89..9056ad3d52 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -6,9 +6,36 @@ on: - 'v[0-9]+.[0-9]+.[0-9]+*' jobs: - publish: - name: Publish to VS Code Marketplace - runs-on: ubuntu-latest + build: + name: Package + strategy: + matrix: + include: + - vsce_target: win32-x64 + ls_target: windows_amd64 + npm_config_arch: x64 + - vsce_target: win32-ia32 + ls_target: windows_386 + npm_config_arch: ia32 + - vsce_target: win32-arm64 + ls_target: windows_arm64 + npm_config_arch: arm + - vsce_target: linux-x64 + ls_target: linux_amd64 + npm_config_arch: x64 + - vsce_target: linux-arm64 + ls_target: linux_arm64 + npm_config_arch: arm64 + - vsce_target: linux-armhf + ls_target: linux_arm + npm_config_arch: arm + - vsce_target: darwin-x64 + ls_target: darwin_amd64 + npm_config_arch: x64 + - vsce_target: darwin-arm64 + ls_target: darwin_arm64 + npm_config_arch: arm64 + runs-on: "ubuntu-latest" steps: - name: Check out repository uses: actions/checkout@v2 @@ -29,18 +56,26 @@ jobs: node-version-file: '.nvmrc' - name: Install dependencies run: npm ci - - name: vsce package - run: npx -- vsce package --out=${{ runner.temp }}/terraform-${{ steps.ext-version.outputs.content }}.vsix + env: + npm_config_arch: ${{ matrix.npm_config_arch }} + - name: Package VSIX + run: npm run package -- --target=${{ matrix.vsce_target }} + env: + ls_target: ${{ matrix.ls_target }} - name: Upload vsix as artifact uses: actions/upload-artifact@v2 with: - name: terraform-${{ steps.ext-version.outputs.content }} - path: ${{ runner.temp }}/terraform-${{ steps.ext-version.outputs.content }}.vsix - - name: Check latest published version - run: | - export EXTENSION_ID=`cat package.json | jq -r '.publisher + "." + .name'` - npx -- vsce show --json $EXTENSION_ID | jq '.versions[0]' - - name: vsce publish - run: npx -- vsce publish --no-git-tag-version --packagePath=${{ runner.temp }}/terraform-${{ steps.ext-version.outputs.content }}.vsix + name: ${{ matrix.vsce_target }} + path: "*.vsix" + + publish: + name: Publish All + runs-on: ubuntu-latest + needs: build + if: success() && startsWith( github.ref, 'refs/tags/v') + steps: + - uses: actions/download-artifact@v2 + - name: Publish Extension + run: npx vsce publish --no-git-tag-version --packagePath $(find . -iname *.vsix) env: VSCE_PAT: ${{ secrets.VSCE_PAT }} diff --git a/.gitignore b/.gitignore index 6e07d2a2d1..e67d4965eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +bin/ out/ node_modules/ *.vsix diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 1d7ac851ea..3cf34c4916 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] + "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "connor4312.esbuild-problem-matchers"] } diff --git a/.vscode/launch.json b/.vscode/launch.json index f7804a8ba2..cf3331ed31 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,13 +5,9 @@ "name": "Launch Client", "type": "extensionHost", "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceRoot}"], - "outFiles": ["${workspaceRoot}/out/**/*.js"], - "preLaunchTask": { - "type": "npm", - "script": "watch" - } + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "npm: watch" }, { "name": "Run Extension Tests", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 0414de6690..1552712ec5 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,15 +4,17 @@ { "type": "npm", "script": "watch", - "problemMatcher": "$tsc-watch", + "group": "build", + "problemMatcher": "$esbuild-watch", "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } + "label": "npm: watch" + }, + { + "type": "npm", + "script": "build", + "group": "build", + "problemMatcher": "$esbuild", + "label": "npm: build" }, { "label": "terraformInitAndWatch", diff --git a/.vscodeignore b/.vscodeignore index 6694275b31..2d8215e79d 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -3,6 +3,7 @@ .vscode-test build/ lsp/ +node_modules/ src/ **/__mocks__ out/*.test.* diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index ccf423fee1..e3bd7ea30c 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,32 +1,108 @@ -# Building +# Development -The extension makes use of the [VSCode Language Server](https://github.com/Microsoft/vscode-languageserver-node) client package to integrate with [terraform-ls](https://github.com/hashicorp/terraform-ls) for [language features](https://code.visualstudio.com/api/language-extensions/programmatic-language-features). The directions below cover how to build and package the extension; please see the `terraform-ls` documentation for how to build the language server executable. +We are an open source project on GitHub and would enjoy your contributions! Please [open a new issue](https://github.com/hashicorp/terraform-vscode-extension/issues) before working on a PR that requires significant effort. This will allow us to make sure the work is in line with the project's goals. -Requirements: +## Building -- Node -- npm -- VSCode +The extension makes use of the [VSCode Language Server](https://github.com/Microsoft/vscode-languageserver-node) client package to integrate with [terraform-ls](https://github.com/hashicorp/terraform-ls) for [language features](https://code.visualstudio.com/api/language-extensions/programmatic-language-features). The directions below cover how to build and package the extension; please see the [`terraform-ls`](https://github.com/hashicorp/terraform-ls) documentation for how to build the language server executable. -After cloning the repo, run `npm i` to install dependencies. There's an included build task to compile the TypeScript files to JavaScript; you can run it directly with `npm run compile`. +### Requirements -In order to use an independently built or installed version of `terraform-ls`, you will need to set `terraform.languageServer.pathToBinary` to the correct executable path. +- VSCode >= 1.61 +- Node >= 16.13.2 +- npm >= 8.x -The extension can be run in a development mode (useful for testing syntax highlighting changes, for example) via the debug task called `Launch Client`. This will open a new window with the extension loaded, and from there you can open any files or folders you want to check against. This extension development window can also be used to run commands, and use the language server installer. +### Getting the code -To package your local development copy for testing, use the [vsce](https://www.npmjs.com/package/vsce) tool with `vcse package`. +``` +git clone https://github.com/hashicorp/vscode-terraform +``` -# Development +### Dependencies -We are an open source project on GitHub and would enjoy your contributions! Please [open a new issue](https://github.com/hashicorp/terraform-vscode-extension/issues) before working on a PR that requires significant effort. This will allow us to make sure the work is in line with the project's goals. +After cloning the repo, run `npm install` to install dependencies. There's an included build task to compile the TypeScript files to JavaScript; you can run it directly with `npm run compile`. + +``` +> npm install +> npm run compile +``` + +> In order to use an independently built or installed version of terraform-ls, you will need to set `terraform.languageServer.pathToBinary` to the correct executable path. + +## Running the Extension + +The extension can be run in a development mode via the launch task called `Launch Client`. This will open a new VS Code window with the extension loaded, and from there you can open any files or folders you want to check against. This extension development window can also be used to run commands or any other feature the extension provides. + +> New to VS Code development? You can get started [here](https://code.visualstudio.com/api/get-started/your-first-extension) + +## Tests + +Automated `unit` and `integration` tests can be written using [mocha](https://mochajs.org) and live inside `./src/test` with file pattern `*.test.ts`. + +> It is *required* that `terraform` is available on `$PATH` to run the tests. + +To run the `unit tests` from the command-line run: + +```bash +> `npm test:unit` +``` + +To run the `integration tests` from the command-line without any configuration, run `npm test`. By default, `npm test` will test against VS Code Stable. If you want to test against a different VS Code version, or if you want to have VS Code remain open, use an environment variable to indicate which version of VS Code to test against: + +```bash +# VS Code Stable is open, use Insiders: +> VSCODE_VERSION='insiders' npm test + +# VS Code Insiders is open, use Stable: +> VSCODE_VERSION='stable' npm test + +# Test against VS Code v1.55.8: +> VSCODE_VERSION='1.55.8' npm test +``` + +To run the `integration` tests in PowerShell, set the environment variable accordingly: + +```powershell +# VS Code Stable is open, use Insiders: +> $env:VSCODE_VERSION ='insiders' +> npm test +``` + +The tests can also be run within VSCode itself, using the launch task `Run Extension Tests`. This will open a new VS Code window, run the test suite, and exit with the test results. + +### Acceptance Tests + +End to end acceptance tests with the extension running against the language server are a work in progress. An example can be seen in [`./src/test/integration/symbols.test.ts`](src/test/integration/symbols.test.ts). + +Unfortunately automated user input does not appear to be possible (keypresses, cursor clicks) at the moment, but some integration testing can be performed by using the vscode API to open/edit files, and triggering events/commands such as language server requests and verifying the responses. + +The `terraform init` command runs automatically when tests are executed. + +### Test Fixture Data + +Sample files for tests should be added to the [`./testFixture`](testFixture/) folder, this is the folder vscode will open during tests. Starting from this folder will prevent the language server from walking other folders that typically exist such as `node_modules`. + +## Packaging + +To package the extension into a [`platform specific extension`](https://code.visualstudio.com/api/working-with-extensions/publishing-extension#platformspecific-extensions) VSIX ready for testing run the following command: -# Testing +``` +npm run package -- --target=win32-x64 +``` -Automated tests can be written using [mocha](https://mochajs.org) and live inside `./src` with file pattern `*.test.ts`. To run the tests from the command-line with `npm t` you will need to have closed any open VSCode windows. The tests can also be run within VSCode itself, using the debug task `Run Extension Tests`. It is required that `terraform` is available on `$PATH` for integration tests of the language server. +Replace `target` with the platform/architecture combination that is on the supported matrix list. -## Integration Tests -It is possible to write integration tests with the extension running against the language server. An example can be seen in [`./src/test/symbols.test.ts`](src/test/symbols.test.ts). Unfortunately automated user input does not appear to be possible (keypresses, cursor clicks), but some integration testing can be performed by using the vscode API to open/edit files, and triggering events/commands such as language server requests and verifying the responses. +platform | terraform-ls | extension | vs code + -- | -- | -- | -- +macOS | darwin_amd64 | darwin_x64 | ✅ +macOS | darwin_arm64 | darwin_arm64 | ✅ +Linux | linux_amd64 | linux_x64 | ✅ +Linux | linux_arm | linux_armhf | ✅ +Linux | linux_arm64 | linux_arm64 | ✅ +Windows | windows_386 | win32_ia32 | ✅ +Windows | windows_amd64 | win32_x64 | ✅ +Windows | windows_arm64 | win32_arm64 | ✅ -Any of the [built in commands](https://code.visualstudio.com/api/references/commands) along with any custom commands the extension has defined can be triggered. Where needed, [expose items to the public API](https://github.com/hashicorp/vscode-terraform/blob/70bfcf060e3e2d75cfa67a453cd4c9e1cec9a1d4/src/extension.ts#L87) of the extension for [inspection](https://github.com/hashicorp/vscode-terraform/blob/70bfcf060e3e2d75cfa67a453cd4c9e1cec9a1d4/src/test/helper.ts#L33) during tests. Helpers, such as the `open` helper should be added to [`./src/test/helper.ts`](src/test/helper.ts). +This will run several chained commands which will download the specified version of terraform-ls, minify the extension using esbuild, and package the extension using vsce into a VSIX. -Sample files for tests should be added to the [`./testFixture`](testFixture/) folder, this is the folder vscode will open with during tests, the running of `terraform init` has been automated. Starting from this folder will prevent the language server from walking this projects other folders that typically exist such as `node_modules`, however `process.cwd()` is still be the project root. +> You can run `npm run package` without paramaters, but this will not produce a platform specific extension. diff --git a/build/downloader.ts b/build/downloader.ts new file mode 100644 index 0000000000..f4884140e1 --- /dev/null +++ b/build/downloader.ts @@ -0,0 +1,114 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import * as releases from '@hashicorp/js-releases'; + +function getPlatform(platform: string) { + if (platform === 'win32') { + return 'windows'; + } + if (platform === 'sunos') { + return 'solaris'; + } + return platform; +} + +function getArch(arch: string) { + // platform | terraform-ls | extension platform | vs code editor + // -- | -- | -- | -- + // macOS | darwin_amd64 | darwin_x64 | ✅ + // macOS | darwin_arm64 | darwin_arm64 | ✅ + // Linux | linux_amd64 | linux_x64 | ✅ + // Linux | linux_arm | linux_armhf | ✅ + // Linux | linux_arm64 | linux_arm64 | ✅ + // Windows | windows_386 | win32_ia32 | ✅ + // Windows | windows_amd64 | win32_x64 | ✅ + // Windows | windows_arm64 | win32_arm64 | ✅ + if (arch === 'ia32') { + return '386'; + } + if (arch === 'x64') { + return 'amd64'; + } + if (arch === 'armhf') { + return 'arm'; + } + return arch; +} + +interface ExtensionInfo { + extensionVersion: string; + languageServerVersion: string; +} + +function getExtensionInfo(): ExtensionInfo { + // eslint-disable-next-line @typescript-eslint/no-var-requires + const pjson = require('../package.json'); + return { + extensionVersion: pjson.version, + languageServerVersion: pjson.langServer.version, + }; +} + +async function run(platform: string, architecture: string) { + const cwd = path.resolve(__dirname); + + const buildDir = path.basename(cwd); + const repoDir = cwd.replace(buildDir, ''); + const installPath = path.join(repoDir, 'bin'); + if (fs.existsSync(installPath)) { + console.log('terraform-ls path exists. Exiting'); + return; + } + + fs.mkdirSync(installPath); + + const extInfo = getExtensionInfo(); + console.log(extInfo); + + // userAgent = `Terraform-VSCode/${extensionVersion} VSCode/${vscodeVersion}`; + const ciBuild = process.env.CI; + const runnerLocation = ciBuild ? `CLI-Downloader GitHub-Actions` : `CLI-Downloader`; + const userAgent = `Terraform-VSCode/${extInfo.extensionVersion} ${runnerLocation} (${platform}; ${architecture})`; + + const release = await releases.getRelease('terraform-ls', extInfo.languageServerVersion, userAgent); + + const os = getPlatform(platform); + const arch = getArch(architecture); + + const build = release.getBuild(os, arch); + if (!build) { + throw new Error(`Install error: no matching terraform-ls binary for ${os}/${arch}`); + } + + console.log(build); + + const zipfile = path.resolve(installPath, `terraform-ls_v${release.version}.zip`); + await release.download(build.url, zipfile, userAgent); + await release.verify(zipfile, build.filename); + await release.unpack(installPath, zipfile); + + fs.rmSync(zipfile, { + recursive: true, + }); +} + +let os = process.platform.toString(); +let arch = process.arch; + +// ls_target=linux_amd64 npm run package -- --target=linux-x64 +const lsTarget = process.env.ls_target; +if (lsTarget !== undefined) { + const tgt = lsTarget.split('_'); + os = tgt[0]; + arch = tgt[1]; +} + +// npm run download:ls --target=darwin-x64 +const target = process.env.npm_config_target; +if (target !== undefined) { + const tgt = target.split('-'); + os = tgt[0]; + arch = tgt[1]; +} + +run(os, arch); diff --git a/package-lock.json b/package-lock.json index 0f8ad305f1..5f5f2eecc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,31 +9,26 @@ "version": "2.19.0", "license": "MPL-2.0", "dependencies": { - "@hashicorp/js-releases": "^1.4.0", - "@types/semver": "^7.3.4", - "openpgp": "^4.10.10", - "semver": "^7.3.5", "short-unique-id": "^3.2.3", "vscode-extension-telemetry": "^0.4.2", "vscode-languageclient": "^7.0.0", "vscode-uri": "^3.0.2", - "which": "^2.0.2", - "yauzl": "^2.10.0" + "which": "^2.0.2" }, "devDependencies": { + "@hashicorp/js-releases": "^1.4.0", "@types/chai": "^4.2.22", "@types/glob": "^7.1.3", "@types/jest": "^27.0.3", "@types/mocha": "^9.0.0", "@types/node": "^16.11.7", - "@types/openpgp": "^4.4.15", "@types/vscode": "^1.61.1", "@types/which": "^2.0.1", - "@types/yauzl": "^2.9.1", "@typescript-eslint/eslint-plugin": "^5.9.0", "@typescript-eslint/parser": "^5.9.0", "@vscode/test-electron": "^2.0.1", "chai": "^4.3.4", + "esbuild": "^0.14.11", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", @@ -41,8 +36,8 @@ "jest": "^27.4.3", "mocha": "^9.1.3", "prettier": "^2.3.2", - "temp": "^0.9.4", "ts-jest": "^27.1.0", + "ts-node": "^10.4.0", "typescript": "^4.5.4", "vsce": "^2.6.3" }, @@ -639,6 +634,27 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -672,6 +688,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@hashicorp/js-releases/-/js-releases-1.4.0.tgz", "integrity": "sha512-1LNDI0hzRT3xFUcIfv8YnkzKSVggj0yVaVYcnNabEM//kgYTvWQQ5D8s41jNxrYEsBeVo+KsMdd+6MlIFMrg0w==", + "dev": true, "dependencies": { "@types/semver": "^7.3.1", "del": "^5.1.0", @@ -680,17 +697,6 @@ "yauzl": "^2.10.0" } }, - "node_modules/@hashicorp/js-releases/node_modules/openpgp": { - "version": "5.0.0-1", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.0.0-1.tgz", - "integrity": "sha512-yfmRStdmOQPZbNbvwyQrqjLOTGW4QO0/aok/Vt08Zhf4UB9w0tGA5c6zBxDefxq+SmXlqEsmdNu+AtYx5G8D6A==", - "dependencies": { - "asn1.js": "^5.0.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", @@ -1011,6 +1017,7 @@ "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" @@ -1023,6 +1030,7 @@ "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" } @@ -1031,6 +1039,7 @@ "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" @@ -1066,6 +1075,30 @@ "node": ">= 6" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/babel__core": { "version": "7.1.18", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", @@ -1107,15 +1140,6 @@ "@babel/types": "^7.3.0" } }, - "node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/chai": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", @@ -1126,6 +1150,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -1183,7 +1208,8 @@ "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, "node_modules/@types/mocha": { "version": "9.0.0", @@ -1194,16 +1220,8 @@ "node_modules/@types/node": { "version": "16.11.19", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" - }, - "node_modules/@types/openpgp": { - "version": "4.4.18", - "resolved": "https://registry.npmjs.org/@types/openpgp/-/openpgp-4.4.18.tgz", - "integrity": "sha512-8PGX6byEni97ZRRp2fVguSk4hbw4e+0vd8XHmyUt0+PjRoMcOZHsn+StQQjfo/wA/3kf/KCbV6I4pwmSC5/LKg==", - "dev": true, - "dependencies": { - "@types/bn.js": "*" - } + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==", + "dev": true }, "node_modules/@types/prettier": { "version": "2.4.3", @@ -1214,7 +1232,8 @@ "node_modules/@types/semver": { "version": "7.3.9", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", - "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true }, "node_modules/@types/stack-utils": { "version": "2.0.1", @@ -1249,15 +1268,6 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, - "node_modules/@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.9.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.1.tgz", @@ -1537,6 +1547,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -1650,6 +1661,12 @@ "readable-stream": "^2.0.6" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1660,6 +1677,7 @@ "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" } @@ -1668,6 +1686,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -1882,7 +1901,8 @@ "node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/boolbase": { "version": "1.0.0", @@ -1903,6 +1923,7 @@ "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" }, @@ -1994,6 +2015,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, "engines": { "node": "*" } @@ -2230,6 +2252,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, "engines": { "node": ">=6" } @@ -2358,6 +2381,12 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2531,6 +2560,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "dev": true, "dependencies": { "globby": "^10.0.1", "graceful-fs": "^4.2.2", @@ -2549,6 +2579,7 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, "dependencies": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -2621,6 +2652,7 @@ "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" }, @@ -2779,6 +2811,270 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/esbuild": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", + "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "optionalDependencies": { + "esbuild-android-arm64": "0.14.11", + "esbuild-darwin-64": "0.14.11", + "esbuild-darwin-arm64": "0.14.11", + "esbuild-freebsd-64": "0.14.11", + "esbuild-freebsd-arm64": "0.14.11", + "esbuild-linux-32": "0.14.11", + "esbuild-linux-64": "0.14.11", + "esbuild-linux-arm": "0.14.11", + "esbuild-linux-arm64": "0.14.11", + "esbuild-linux-mips64le": "0.14.11", + "esbuild-linux-ppc64le": "0.14.11", + "esbuild-linux-s390x": "0.14.11", + "esbuild-netbsd-64": "0.14.11", + "esbuild-openbsd-64": "0.14.11", + "esbuild-sunos-64": "0.14.11", + "esbuild-windows-32": "0.14.11", + "esbuild-windows-64": "0.14.11", + "esbuild-windows-arm64": "0.14.11" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", + "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", + "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", + "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", + "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", + "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", + "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", + "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", + "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", + "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", + "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", + "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", + "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", + "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", + "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", + "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ] + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", + "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", + "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", + "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -3209,6 +3505,7 @@ "version": "3.2.10", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3224,6 +3521,7 @@ "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" }, @@ -3247,6 +3545,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -3264,6 +3563,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -3284,6 +3584,7 @@ "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" }, @@ -3355,7 +3656,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -3519,6 +3821,7 @@ "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", @@ -3584,7 +3887,8 @@ "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "node_modules/growl": { "version": "1.10.5", @@ -3764,6 +4068,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, "engines": { "node": ">= 4" } @@ -3807,6 +4112,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -3815,6 +4121,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, "engines": { "node": ">=8" } @@ -3823,6 +4130,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3831,7 +4139,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "1.3.8", @@ -3867,6 +4176,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -3896,6 +4206,7 @@ "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" }, @@ -3907,6 +4218,7 @@ "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" } @@ -3915,6 +4227,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, "engines": { "node": ">=6" } @@ -3923,6 +4236,7 @@ "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" } @@ -4967,6 +5281,7 @@ "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" } @@ -4975,6 +5290,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "dependencies": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -5040,7 +5356,8 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "node_modules/minimatch": { "version": "3.0.4", @@ -5262,71 +5579,12 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "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-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node_modules/node-localstorage": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz", - "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==", - "dependencies": { - "write-file-atomic": "^1.1.4" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/node-localstorage/node_modules/write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "node_modules/node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -5415,6 +5673,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -5435,13 +5694,12 @@ } }, "node_modules/openpgp": { - "version": "4.10.10", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.10.10.tgz", - "integrity": "sha512-Ub48OogGPjNsr0G/wnJ/SyAQzt/tfcXZTWVZdjKFpXCQV1Ca+upFdSPPkBlGG3lb9EQGOKZJ2tzYNH6ZyKMkDQ==", + "version": "5.0.0-1", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.0.0-1.tgz", + "integrity": "sha512-yfmRStdmOQPZbNbvwyQrqjLOTGW4QO0/aok/Vt08Zhf4UB9w0tGA5c6zBxDefxq+SmXlqEsmdNu+AtYx5G8D6A==", + "dev": true, "dependencies": { - "asn1.js": "^5.0.0", - "node-fetch": "^2.1.2", - "node-localstorage": "~1.3.0" + "asn1.js": "^5.0.0" }, "engines": { "node": ">= 8.0.0" @@ -5495,6 +5753,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -5569,6 +5828,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5592,6 +5852,7 @@ "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" } @@ -5608,7 +5869,8 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -5620,6 +5882,7 @@ "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" }, @@ -5806,6 +6069,7 @@ "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", @@ -5980,6 +6244,7 @@ "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" @@ -5989,6 +6254,7 @@ "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" }, @@ -6003,6 +6269,7 @@ "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", @@ -6030,7 +6297,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sax": { "version": "1.2.4", @@ -6175,18 +6443,11 @@ "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/slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "engines": { - "node": "*" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6417,31 +6678,6 @@ "node": ">= 6" } }, - "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dev": true, - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -6515,6 +6751,7 @@ "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" }, @@ -6601,6 +6838,65 @@ } } }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -7109,7 +7405,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -7273,6 +7570,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -7287,6 +7585,15 @@ "buffer-crc32": "~0.2.3" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7747,6 +8054,21 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@eslint/eslintrc": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", @@ -7776,22 +8098,13 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@hashicorp/js-releases/-/js-releases-1.4.0.tgz", "integrity": "sha512-1LNDI0hzRT3xFUcIfv8YnkzKSVggj0yVaVYcnNabEM//kgYTvWQQ5D8s41jNxrYEsBeVo+KsMdd+6MlIFMrg0w==", + "dev": true, "requires": { "@types/semver": "^7.3.1", "del": "^5.1.0", "openpgp": "5.0.0-1", "semver": "^7.3.5", "yauzl": "^2.10.0" - }, - "dependencies": { - "openpgp": { - "version": "5.0.0-1", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.0.0-1.tgz", - "integrity": "sha512-yfmRStdmOQPZbNbvwyQrqjLOTGW4QO0/aok/Vt08Zhf4UB9w0tGA5c6zBxDefxq+SmXlqEsmdNu+AtYx5G8D6A==", - "requires": { - "asn1.js": "^5.0.0" - } - } } }, "@humanwhocodes/config-array": { @@ -8052,6 +8365,7 @@ "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, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -8060,12 +8374,14 @@ "@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==" + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, "@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, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -8095,6 +8411,30 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/babel__core": { "version": "7.1.18", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", @@ -8136,15 +8476,6 @@ "@babel/types": "^7.3.0" } }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@types/chai": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", @@ -8155,6 +8486,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" @@ -8212,7 +8544,8 @@ "@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, "@types/mocha": { "version": "9.0.0", @@ -8223,16 +8556,8 @@ "@types/node": { "version": "16.11.19", "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.19.tgz", - "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==" - }, - "@types/openpgp": { - "version": "4.4.18", - "resolved": "https://registry.npmjs.org/@types/openpgp/-/openpgp-4.4.18.tgz", - "integrity": "sha512-8PGX6byEni97ZRRp2fVguSk4hbw4e+0vd8XHmyUt0+PjRoMcOZHsn+StQQjfo/wA/3kf/KCbV6I4pwmSC5/LKg==", - "dev": true, - "requires": { - "@types/bn.js": "*" - } + "integrity": "sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==", + "dev": true }, "@types/prettier": { "version": "2.4.3", @@ -8243,7 +8568,8 @@ "@types/semver": { "version": "7.3.9", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz", - "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==" + "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ==", + "dev": true }, "@types/stack-utils": { "version": "2.0.1", @@ -8278,15 +8604,6 @@ "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, - "@types/yauzl": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", - "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, "@typescript-eslint/eslint-plugin": { "version": "5.9.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.1.tgz", @@ -8456,6 +8773,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -8537,6 +8855,12 @@ "readable-stream": "^2.0.6" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -8546,12 +8870,14 @@ "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==" + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -8718,7 +9044,8 @@ "bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "boolbase": { "version": "1.0.0", @@ -8739,6 +9066,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -8799,7 +9127,8 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true }, "buffer-from": { "version": "1.1.2", @@ -8976,7 +9305,8 @@ "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true }, "cliui": { "version": "7.0.4", @@ -9082,6 +9412,12 @@ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -9213,6 +9549,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "dev": true, "requires": { "globby": "^10.0.1", "graceful-fs": "^4.2.2", @@ -9228,6 +9565,7 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, "requires": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -9281,6 +9619,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "requires": { "path-type": "^4.0.0" } @@ -9399,6 +9738,158 @@ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, + "esbuild": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", + "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", + "dev": true, + "requires": { + "esbuild-android-arm64": "0.14.11", + "esbuild-darwin-64": "0.14.11", + "esbuild-darwin-arm64": "0.14.11", + "esbuild-freebsd-64": "0.14.11", + "esbuild-freebsd-arm64": "0.14.11", + "esbuild-linux-32": "0.14.11", + "esbuild-linux-64": "0.14.11", + "esbuild-linux-arm": "0.14.11", + "esbuild-linux-arm64": "0.14.11", + "esbuild-linux-mips64le": "0.14.11", + "esbuild-linux-ppc64le": "0.14.11", + "esbuild-linux-s390x": "0.14.11", + "esbuild-netbsd-64": "0.14.11", + "esbuild-openbsd-64": "0.14.11", + "esbuild-sunos-64": "0.14.11", + "esbuild-windows-32": "0.14.11", + "esbuild-windows-64": "0.14.11", + "esbuild-windows-arm64": "0.14.11" + } + }, + "esbuild-android-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", + "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", + "dev": true, + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", + "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", + "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", + "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", + "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", + "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", + "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", + "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", + "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", + "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", + "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", + "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", + "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", + "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", + "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", + "dev": true, + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", + "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", + "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", + "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", + "dev": true, + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -9710,6 +10201,7 @@ "version": "3.2.10", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz", "integrity": "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A==", + "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9722,6 +10214,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -9744,6 +10237,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "requires": { "reusify": "^1.0.4" } @@ -9761,6 +10255,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, "requires": { "pend": "~1.2.0" } @@ -9778,6 +10273,7 @@ "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, "requires": { "to-regex-range": "^5.0.1" } @@ -9834,7 +10330,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -9962,6 +10459,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10006,7 +10504,8 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "growl": { "version": "1.10.5", @@ -10128,7 +10627,8 @@ "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true }, "import-fresh": { "version": "3.3.0", @@ -10153,17 +10653,20 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -10172,7 +10675,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", @@ -10201,7 +10705,8 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -10222,6 +10727,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -10229,17 +10735,20 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true }, "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==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true }, "is-plain-obj": { "version": "2.1.0", @@ -11056,12 +11565,14 @@ "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -11103,7 +11614,8 @@ "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "minimatch": { "version": "3.0.4", @@ -11273,61 +11785,12 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - }, - "dependencies": { - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - } - } - }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", "dev": true }, - "node-localstorage": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz", - "integrity": "sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==", - "requires": { - "write-file-atomic": "^1.1.4" - }, - "dependencies": { - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - } - } - }, "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", @@ -11398,6 +11861,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -11412,13 +11876,12 @@ } }, "openpgp": { - "version": "4.10.10", - "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-4.10.10.tgz", - "integrity": "sha512-Ub48OogGPjNsr0G/wnJ/SyAQzt/tfcXZTWVZdjKFpXCQV1Ca+upFdSPPkBlGG3lb9EQGOKZJ2tzYNH6ZyKMkDQ==", + "version": "5.0.0-1", + "resolved": "https://registry.npmjs.org/openpgp/-/openpgp-5.0.0-1.tgz", + "integrity": "sha512-yfmRStdmOQPZbNbvwyQrqjLOTGW4QO0/aok/Vt08Zhf4UB9w0tGA5c6zBxDefxq+SmXlqEsmdNu+AtYx5G8D6A==", + "dev": true, "requires": { - "asn1.js": "^5.0.0", - "node-fetch": "^2.1.2", - "node-localstorage": "~1.3.0" + "asn1.js": "^5.0.0" } }, "optionator": { @@ -11457,6 +11920,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -11517,7 +11981,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-key": { "version": "3.1.1", @@ -11534,7 +11999,8 @@ "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "pathval": { "version": "1.1.1", @@ -11545,7 +12011,8 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true }, "picocolors": { "version": "1.0.0", @@ -11556,7 +12023,8 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "pirates": { "version": "4.0.4", @@ -11690,7 +12158,8 @@ "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true }, "randombytes": { "version": "2.1.0", @@ -11815,12 +12284,14 @@ "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -11829,6 +12300,7 @@ "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, "requires": { "queue-microtask": "^1.2.2" } @@ -11842,7 +12314,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sax": { "version": "1.2.4", @@ -11951,12 +12424,8 @@ "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, "source-map": { "version": "0.6.1", @@ -12140,27 +12609,6 @@ } } }, - "temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -12219,6 +12667,7 @@ "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, "requires": { "is-number": "^7.0.0" } @@ -12265,6 +12714,40 @@ "yargs-parser": "20.x" } }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -12676,7 +13159,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", @@ -12800,6 +13284,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -12814,6 +13299,12 @@ "buffer-crc32": "~0.2.3" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 2b94d1980b..0b76f145c7 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,9 @@ "node": "~16.X", "vscode": "^1.61.0" }, + "langServer": { + "version": "0.25.2" + }, "qna": "https://discuss.hashicorp.com/c/terraform-core/terraform-editor-integrations/46", "bugs": { "url": "https://github.com/hashicorp/vscode-terraform/issues", @@ -320,44 +323,45 @@ ] }, "scripts": { - "vscode:prepublish": "npm run compile", - "compile": "tsc -p ./", - "watch": "tsc -watch -p ./", - "lint": "eslint src --ext ts", - "pretest": "npm run compile && npm run lint", + "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/extension.js --external:vscode --format=cjs --platform=node", + "esbuild": "npm run esbuild-base -- --sourcemap", + "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch", + "compile": "npm run esbuild", + "watch": "npm run download:ls && npm run esbuild-watch", + "download:ls": "ts-node ./build/downloader.ts", + "vscode:prepublish": "npm run download:ls && npm run esbuild-base -- --minify", + "package": "vsce package", + "test-compile": "tsc -p ./", + "pretest": "npm run download:ls && npm run test-compile && npm run lint", "test": "node ./out/test/runTest.js", "test:unit": "jest", - "package": "vsce package", + "lint": "eslint src --ext ts", "prettier": "prettier \"**/*.+(js|json|ts)\"", "format": "npm run prettier -- --write", - "check-format": "npm run prettier -- --check" + "check-format": "npm run prettier -- --check", + "preview": "ts-node ./build/preview.ts" }, "dependencies": { - "@hashicorp/js-releases": "^1.4.0", - "@types/semver": "^7.3.4", - "openpgp": "^4.10.10", - "semver": "^7.3.5", "short-unique-id": "^3.2.3", "vscode-extension-telemetry": "^0.4.2", "vscode-languageclient": "^7.0.0", "vscode-uri": "^3.0.2", - "which": "^2.0.2", - "yauzl": "^2.10.0" + "which": "^2.0.2" }, "devDependencies": { + "@hashicorp/js-releases": "^1.4.0", "@types/chai": "^4.2.22", "@types/glob": "^7.1.3", "@types/jest": "^27.0.3", "@types/mocha": "^9.0.0", "@types/node": "^16.11.7", - "@types/openpgp": "^4.4.15", "@types/vscode": "^1.61.1", "@types/which": "^2.0.1", - "@types/yauzl": "^2.9.1", "@typescript-eslint/eslint-plugin": "^5.9.0", "@typescript-eslint/parser": "^5.9.0", "@vscode/test-electron": "^2.0.1", "chai": "^4.3.4", + "esbuild": "^0.14.11", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", @@ -365,8 +369,8 @@ "jest": "^27.4.3", "mocha": "^9.1.3", "prettier": "^2.3.2", - "temp": "^0.9.4", "ts-jest": "^27.1.0", + "ts-node": "^10.4.0", "typescript": "^4.5.4", "vsce": "^2.6.3" } diff --git a/src/extension.ts b/src/extension.ts index 8b1e5d6871..7455666a11 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,12 +5,9 @@ import { LanguageClient } from 'vscode-languageclient/node'; import { Utils } from 'vscode-uri'; import { ClientHandler, TerraformLanguageClient } from './clientHandler'; import { GenerateBugReportCommand } from './commands/generateBugReport'; -import { DEFAULT_LS_VERSION, isValidVersionString } from './installer/detector'; -import { updateOrInstall } from './installer/updater'; import { ModuleCallsDataProvider } from './providers/moduleCalls'; import { ModuleProvidersDataProvider } from './providers/moduleProviders'; import { ServerPath } from './serverPath'; -import { SingleInstanceTimeout } from './utils'; import { config, getActiveTextEditor, isTerraformFile } from './vscodeUtils'; const brand = `HashiCorp Terraform`; @@ -19,7 +16,6 @@ export let terraformStatus: vscode.StatusBarItem; let reporter: TelemetryReporter; let clientHandler: ClientHandler; -const languageServerUpdater = new SingleInstanceTimeout(); export async function activate(context: vscode.ExtensionContext): Promise { const manifest = context.extension.packageJSON; @@ -44,15 +40,6 @@ export async function activate(context: vscode.ExtensionContext): Promise } } - if (config('terraform').has('languageServer.requiredVersion')) { - const langServerVer = config('terraform').get('languageServer.requiredVersion', DEFAULT_LS_VERSION); - if (!isValidVersionString(langServerVer)) { - vscode.window.showWarningMessage( - `The Terraform Language Server Version string '${langServerVer}' is not a valid semantic version and will be ignored.`, - ); - } - } - // Subscriptions context.subscriptions.push( vscode.commands.registerCommand('terraform.enableLanguageServer', async () => { @@ -64,8 +51,7 @@ export async function activate(context: vscode.ExtensionContext): Promise vscode.ConfigurationTarget.Global, ); } - await updateLanguageServer(manifest.version, lsPath); - return clientHandler.startClient(); + return startLanguageServer(); }), vscode.commands.registerCommand('terraform.disableLanguageServer', async () => { if (enabled()) { @@ -76,8 +62,7 @@ export async function activate(context: vscode.ExtensionContext): Promise vscode.ConfigurationTarget.Global, ); } - languageServerUpdater.clear(); - return clientHandler.stopClient(); + return stopLanguageServer(); }), vscode.commands.registerCommand('terraform.apply', async () => { await terraformCommand('apply', false); @@ -140,14 +125,7 @@ export async function activate(context: vscode.ExtensionContext): Promise ); if (enabled()) { - try { - await updateLanguageServer(manifest.version, lsPath); - vscode.commands.executeCommand('setContext', 'terraform.showTreeViews', true); - } catch (error) { - if (error instanceof Error) { - reporter.sendTelemetryException(error); - } - } + await startLanguageServer(); } } @@ -195,39 +173,24 @@ export async function updateTerraformStatusBar(documentUri: vscode.Uri): Promise } } -async function updateLanguageServer(extVersion: string, lsPath: ServerPath, scheduled = false) { - if (config('extensions').get('autoCheckUpdates', true) === true) { - console.log('Scheduling check for language server updates...'); - const hour = 1000 * 60 * 60; - languageServerUpdater.timeout(function () { - updateLanguageServer(extVersion, lsPath, true); - }, 24 * hour); - } - - if (lsPath.hasCustomBinPath()) { - // skip install check if user has specified a custom path to the LS - // with custom paths we *need* to start the lang client always +async function startLanguageServer() { + try { await clientHandler.startClient(); - return; + vscode.commands.executeCommand('setContext', 'terraform.showTreeViews', true); + } catch (error) { + console.log(error); // for test failure reporting + if (error instanceof Error) { + vscode.window.showErrorMessage(error instanceof Error ? error.message : error); + } else if (typeof error === 'string') { + vscode.window.showErrorMessage(error); + } } +} +async function stopLanguageServer() { try { - await updateOrInstall( - config('terraform').get('languageServer.requiredVersion', DEFAULT_LS_VERSION), - extVersion, - vscode.version, - lsPath, - reporter, - ); - - // On scheduled checks, we download to stg and do not replace prod path - // So we *do not* need to stop or start the LS - if (scheduled) { - return; - } - - // On fresh starts we *need* to start the lang client always - await clientHandler.startClient(); + await clientHandler.stopClient(); + vscode.commands.executeCommand('setContext', 'terraform.showTreeViews', false); } catch (error) { console.log(error); // for test failure reporting if (error instanceof Error) { diff --git a/src/installer/detector.ts b/src/installer/detector.ts index f06b053041..64e8b84057 100644 --- a/src/installer/detector.ts +++ b/src/installer/detector.ts @@ -1,14 +1,6 @@ -import { getRelease, Release } from '@hashicorp/js-releases'; -import * as semver from 'semver'; import * as vscode from 'vscode'; import { exec } from '../utils'; -export const DEFAULT_LS_VERSION = 'latest'; - -export function isValidVersionString(value: string): boolean { - return semver.validRange(value, { includePrerelease: true, loose: true }) !== null; -} - export async function getLsVersion(binPath: string): Promise { try { const jsonCmd: { stdout: string } = await exec(binPath, ['version', '-json']); @@ -22,40 +14,6 @@ export async function getLsVersion(binPath: string): Promise } } -export async function getRequiredVersionRelease( - versionString: string, - extensionVersion: string, - vscodeVersion: string, -): Promise { - const userAgent = `Terraform-VSCode/${extensionVersion} VSCode/${vscodeVersion}`; - - // Take the user requested version and query the hashicorp release site - try { - const release = await getRelease('terraform-ls', versionString, userAgent); - console.log(`Found Terraform language server version ${release.version} which satisfies range '${versionString}'`); - return release; - } catch (err) { - if (versionString === DEFAULT_LS_VERSION) { - throw err; - } - - console.log( - `Error while finding Terraform language server release which satisfies range '${versionString}' and will reattempt with '${DEFAULT_LS_VERSION}': ${err}`, - ); - vscode.window.showWarningMessage( - `No version matching ${versionString} found, searching for ${DEFAULT_LS_VERSION} instead`, - ); - } - - // User supplied version is either invalid or a version could not satisfy the range requested - // Attempt to find the latest release, as we need a LS to function - const release = await getRelease('terraform-ls', DEFAULT_LS_VERSION, userAgent); - console.log( - `Found Default Terraform language server version ${release.version} which satisfies range '${DEFAULT_LS_VERSION}'`, - ); - return release; -} - export async function pathExists(filePath: string): Promise { try { await vscode.workspace.fs.stat(vscode.Uri.file(filePath)); diff --git a/src/installer/installer.ts b/src/installer/installer.ts deleted file mode 100644 index 5343051939..0000000000 --- a/src/installer/installer.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { Release } from '@hashicorp/js-releases'; -import * as path from 'path'; -import * as vscode from 'vscode'; -import TelemetryReporter from 'vscode-extension-telemetry'; -import { pathExists } from './detector'; - -export async function installTerraformLS( - installPath: string, - release: Release, - extensionVersion: string, - vscodeVersion: string, - reporter: TelemetryReporter, -): Promise { - reporter.sendTelemetryEvent('installingLs', { terraformLsVersion: release.version }); - - const zipfile = path.resolve(installPath, `terraform-ls_v${release.version}.zip`); - const userAgent = `Terraform-VSCode/${extensionVersion} VSCode/${vscodeVersion}`; - const os = getPlatform(); - const arch = getArch(); - const build = release.getBuild(os, arch); - - if (!build) { - throw new Error(`Install error: no matching terraform-ls binary for ${os}/${arch}`); - } - - // On brand new extension installs, there isn't a directory until we execute here - // Create it if it doesn't exist so the downloader can unpack - if ((await pathExists(installPath)) === false) { - await vscode.workspace.fs.createDirectory(vscode.Uri.file(installPath)); - } - - // Download and unpack async inside the VS Code notification window - // This will show in the statusbar for the duration of the download and unpack - // This was the most non-distuptive choice that still provided some status to the user - return vscode.window.withProgress( - { - cancellable: false, - location: vscode.ProgressLocation.Window, - title: 'Installing terraform-ls', - }, - async (progress) => { - progress.report({ increment: 30 }); - await release.download(build.url, zipfile, userAgent); - - progress.report({ increment: 30 }); - await release.verify(zipfile, build.filename); - - progress.report({ increment: 20 }); - await release.unpack(installPath, zipfile); - - progress.report({ increment: 10 }); - return vscode.workspace.fs.delete(vscode.Uri.file(zipfile)); - }, - ); -} - -function getPlatform(): string { - const platform = process.platform.toString(); - if (platform === 'win32') { - return 'windows'; - } - if (platform === 'sunos') { - return 'solaris'; - } - return platform; -} - -function getArch(): string { - const arch = process.arch; - - if (arch === 'ia32') { - return '386'; - } - if (arch === 'x64') { - return 'amd64'; - } - - return arch; -} diff --git a/src/installer/updater.ts b/src/installer/updater.ts deleted file mode 100644 index 6d2f3325bf..0000000000 --- a/src/installer/updater.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { Release } from '@hashicorp/js-releases'; -import * as semver from 'semver'; -import * as vscode from 'vscode'; -import TelemetryReporter from 'vscode-extension-telemetry'; -import { ServerPath } from '../serverPath'; -import { config } from '../vscodeUtils'; -import { - DEFAULT_LS_VERSION, - getLsVersion, - getRequiredVersionRelease, - isValidVersionString, - pathExists, -} from './detector'; -import { installTerraformLS } from './installer'; - -export async function updateOrInstall( - lsVersion: string, - extensionVersion: string, - vscodeVersion: string, - lsPath: ServerPath, - reporter: TelemetryReporter, -): Promise { - const stgingExists = await pathExists(lsPath.stgBinPath()); - if (stgingExists) { - // LS was updated during the last run while user was using the extension - // Do not check for updates here, as normal execution flow will handle decision logic later - // Need to move stg path to prod path now and return normal execution - await vscode.workspace.fs.rename(vscode.Uri.file(lsPath.stgBinPath()), vscode.Uri.file(lsPath.binPath()), { - overwrite: true, - }); - return; - } - - // Silently default to latest if an invalid version string is passed. - // Actually telling the user about a bad string is left to the main extension code instead of here - const versionString = isValidVersionString(lsVersion) ? lsVersion : DEFAULT_LS_VERSION; - - const lsPresent = await pathExists(lsPath.binPath()); - const autoUpdate = config('extensions').get('autoUpdate', true); - if (lsPresent === true && autoUpdate === false) { - // LS is present in prod path, but user does not want automatic updates - // Return normal execution - return; - } - - // Get LS release information from hashicorp release site - // Fall back to latest if not requested version not available - let release: Release; - try { - release = await getRequiredVersionRelease(versionString, extensionVersion, vscodeVersion); - } catch (err) { - console.log( - `Error while finding Terraform language server release which satisfies range '${versionString}': ${err}`, - ); - // if the releases site is inaccessible, report it and skip the install - if (err instanceof Error) { - reporter.sendTelemetryException(err); - } - return; - } - - if (lsPresent === false) { - // LS is not present, need to download now in order to function - // Install directly to production path and return normal execution - return installTerraformLS(lsPath.installPath(), release, extensionVersion, vscodeVersion, reporter); - } - - // We know there is an LS Present at this point, find out version if possible - const installedVersion = await getLsVersion(lsPath.binPath()); - if (installedVersion === undefined) { - console.log(`Currently installed Terraform language server is version '${installedVersion}`); - // ls is present but too old to tell us the version, so need to update now - return installTerraformLS(lsPath.installPath(), release, extensionVersion, vscodeVersion, reporter); - } - - // We know there is an LS present and know the version, so decide whether to update or not - console.log(`Currently installed Terraform language server is version '${installedVersion}`); - reporter.sendTelemetryEvent('foundLsInstalled', { terraformLsVersion: installedVersion }); - - // Already at the latest or specified version, no update needed - // return to normal execution flow - if (semver.eq(release.version, installedVersion, { includePrerelease: true })) { - console.log(`Language server release is current: ${release.version}`); - return; - } - - // We used to prompt for decision here, but effectively downgrading or upgrading - // are the same operation so log decision and update - if (semver.gt(release.version, installedVersion, { includePrerelease: true })) { - // Upgrade - console.log(`A newer language server release is available: ${release.version}`); - } else if (semver.lt(release.version, installedVersion, { includePrerelease: true })) { - // Downgrade - console.log(`An older language server release is available: ${release.version}`); - } - - // Update indicated and user wants autoupdates, so update to latest or specified version - return installTerraformLS(lsPath.stgInstallPath(), release, extensionVersion, vscodeVersion, reporter); -} diff --git a/src/serverPath.ts b/src/serverPath.ts index 66e4039bf1..aeb5f1b87f 100644 --- a/src/serverPath.ts +++ b/src/serverPath.ts @@ -13,11 +13,7 @@ export class ServerPath { } public installPath(): string { - return path.join(this.context.globalStorageUri.fsPath, INSTALL_FOLDER_NAME); - } - - public stgInstallPath(): string { - return path.join(this.context.globalStorageUri.fsPath, 'stg'); + return path.join(this.context.extensionPath, INSTALL_FOLDER_NAME); } // legacyBinPath represents old location where LS was installed. @@ -39,14 +35,6 @@ export class ServerPath { return path.resolve(this.installPath(), this.binName()); } - public stgBinPath(): string { - if (this.customBinPath) { - return this.customBinPath; - } - - return path.resolve(this.stgInstallPath(), this.binName()); - } - public binName(): string { if (this.customBinPath) { return path.basename(this.customBinPath); diff --git a/src/test/unit/detector.test.ts b/src/test/unit/detector.test.ts index d689a99bbe..15449f4232 100644 --- a/src/test/unit/detector.test.ts +++ b/src/test/unit/detector.test.ts @@ -1,109 +1,9 @@ import { exec as execOrg } from '../../utils'; -import { getRelease as getReleaseOrg } from '@hashicorp/js-releases'; -import { getLsVersion, isValidVersionString, getRequiredVersionRelease } from '../../installer/detector'; +import { getLsVersion } from '../../installer/detector'; jest.mock('../../utils'); -jest.mock('@hashicorp/js-releases'); const exec = jest.mocked(execOrg); -const getRelease = jest.mocked(getReleaseOrg); - -describe('terraform release detector', () => { - test('returns valid release', async () => { - const name = 'terraform-ls'; - const shasums = 'terraform-ls_0.24.0_SHA256SUMS'; - const shasumsSignature = 'terraform-ls_0.24.0_SHA256SUMS.72D7468F.sig'; - const version = '0.24.0'; - const buildInfo = { - arch: 'amd64', - filename: 'terraform-ls_0.24.0_windows_amd64.zip', - name: 'terraform-ls', - os: 'windows', - url: 'https://releases.hashicorp.com/terraform-ls/0.24.0/terraform-ls_0.24.0_windows_amd64.zip', - version: '0.24.0', - }; - - getRelease.mockImplementationOnce(async () => { - return { - builds: [buildInfo], - name: name, - shasums: shasums, - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: shasumsSignature, - version: version, - getBuild: jest.fn(), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - }); - - const expected = { - builds: [buildInfo], - name: name, - shasums: shasums, - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: shasumsSignature, - version: version, - }; - - const result = await getRequiredVersionRelease('0.24.0', '2.16.0', '1.66.0'); - - expect(result).toMatchObject(expected); - }); - - test('returns latest if invalid version', async () => { - const name = 'terraform-ls'; - const shasums = 'terraform-ls_0.24.0_SHA256SUMS'; - const shasumsSignature = 'terraform-ls_0.24.0_SHA256SUMS.72D7468F.sig'; - const version = '0.24.0'; - const buildInfo = { - arch: 'amd64', - filename: 'terraform-ls_0.24.0_windows_amd64.zip', - name: 'terraform-ls', - os: 'windows', - url: 'https://releases.hashicorp.com/terraform-ls/0.24.0/terraform-ls_0.24.0_windows_amd64.zip', - version: '0.24.0', - }; - - getRelease - .mockImplementationOnce(() => { - throw new Error('invalid version'); - }) - .mockImplementationOnce(async () => { - return { - builds: [buildInfo], - name: name, - shasums: shasums, - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: shasumsSignature, - version: version, - getBuild: jest.fn(), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - }); - - const expected = { - builds: [buildInfo], - name: name, - shasums: shasums, - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: shasumsSignature, - version: version, - }; - - const result = await getRequiredVersionRelease('10000.24.0', '2.16.0', '1.66.0'); - - expect(result).toMatchObject(expected); - expect(getRelease).toBeCalledTimes(2); - }); -}); describe('terraform detector', () => { test('returns valid version with valid path', async () => { @@ -122,25 +22,3 @@ describe('terraform detector', () => { expect(result).toBe(undefined); }); }); - -describe('version detector', () => { - test('detect valid version', async () => { - const result = isValidVersionString('1.2.3'); - expect(result).toBeTruthy(); - }); - - test('detect invalid version', async () => { - const result = isValidVersionString('1f'); - expect(result).toBeFalsy(); - }); - - test('detect valid semver version', async () => { - const result = isValidVersionString('1.2.3-alpha'); - expect(result).toBeTruthy(); - }); - - test('detect invalid semver version', async () => { - const result = isValidVersionString('1.23-alpha'); - expect(result).toBeFalsy(); - }); -}); diff --git a/src/test/unit/installer.test.ts b/src/test/unit/installer.test.ts deleted file mode 100644 index 44e4f4ab0f..0000000000 --- a/src/test/unit/installer.test.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { pathExists as pathExistsOrig } from '../../installer/detector'; -import { installTerraformLS } from '../../installer/installer'; -import { reporter } from './mocks/reporter'; -import * as path from 'path'; -import * as vscode from 'vscode'; -import { Release } from '@hashicorp/js-releases'; - -const pathExists = jest.mocked(pathExistsOrig); -const withProgress = jest.mocked(vscode.window.withProgress); - -jest.mock('../../installer/detector'); -describe('terraform-ls installer', () => { - describe('should install', () => { - test('when valid version is passed', async () => { - const expectedBuild = { - url: 'https://releases.hashicorp.com/terraform-ls/0.24.0/terraform-ls_0.24.0_windows_amd64.zip', - filename: 'terraform-ls_0.24.0_windows_amd64.zip', - }; - - const expectedRelease: Release = { - name: 'terraform-ls', - version: '0.24.0', - getBuild: jest.fn(() => expectedBuild), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - - pathExists.mockImplementationOnce(async () => true); - - const report = jest.fn(); - const token = { - isCancellationRequested: false, - onCancellationRequested: jest.fn(), - }; - withProgress.mockImplementationOnce(async (_, task) => { - task({ report }, token); - }); - - const expectedPath = path.resolve('installPath', `terraform-ls_v0.24.0.zip`); - await installTerraformLS('installPath', expectedRelease, '2.16.0', '1.60.0', reporter); - - expect(expectedRelease.getBuild).toBeCalledTimes(1); - expect(expectedRelease.getBuild).toBeCalledTimes(1); - expect(withProgress).toBeCalledTimes(1); - expect(withProgress).toHaveBeenCalledWith( - { - cancellable: false, - location: vscode.ProgressLocation.Window, - title: 'Installing terraform-ls', - }, - expect.any(Function), - ); - - expect(expectedRelease.download).toBeCalledTimes(1); - expect(expectedRelease.download).toHaveBeenCalledWith(expectedBuild.url, expectedPath, expect.any(String)); - expect(expectedRelease.verify).toBeCalledTimes(1); - expect(expectedRelease.verify).toHaveBeenCalledWith(expectedPath, expectedBuild.filename); - expect(expectedRelease.unpack).toBeCalledTimes(1); - expect(expectedRelease.unpack).toHaveBeenCalledWith('installPath', expectedPath); - expect(vscode.workspace.fs.delete).toBeCalledTimes(1); - expect(report).toHaveBeenCalledTimes(4); - }); - }); -}); diff --git a/src/test/unit/updater.test.ts b/src/test/unit/updater.test.ts deleted file mode 100644 index f8fce1129d..0000000000 --- a/src/test/unit/updater.test.ts +++ /dev/null @@ -1,275 +0,0 @@ -import * as vscode from 'vscode'; -import { updateOrInstall } from '../../installer/updater'; -import { reporter } from './mocks/reporter'; -import { installTerraformLS } from '../../installer/installer'; -import { - getRequiredVersionRelease as getRequiredVersionReleaseOrig, - isValidVersionString as isValidVersionStringOrig, - pathExists as pathExistsOrig, - getLsVersion as getLsVersionOrig, -} from '../../installer/detector'; -import { ServerPath } from '../../serverPath'; -import { lsPathMock } from './mocks/serverPath'; - -jest.mock('../../installer/detector'); -jest.mock('../../installer/installer'); - -const getConfiguration = jest.mocked(vscode.workspace.getConfiguration); -const pathExists = jest.mocked(pathExistsOrig); -const isValidVersionString = jest.mocked(isValidVersionStringOrig); -const getRequiredVersionRelease = jest.mocked(getRequiredVersionReleaseOrig); -const getLsVersion = jest.mocked(getLsVersionOrig); -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -const lsPath: ServerPath & typeof lsPathMock = lsPathMock; - -describe('terraform-ls updater', () => { - describe('should install', () => { - test('on fresh install', async () => { - getConfiguration.mockImplementationOnce(() => ({ - get: jest.fn(() => { - // config('extensions').get('autoUpdate', true); - return true; - }), - has: jest.fn(), - inspect: jest.fn(), - update: jest.fn(), - })); - - pathExists - .mockImplementationOnce(async () => false) // stg not present - .mockImplementationOnce(async () => false); // prod not present - - isValidVersionString.mockImplementationOnce(() => true); - - getRequiredVersionRelease.mockImplementationOnce(async () => { - return { - name: 'foo', - shasums: '', - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: '', - version: '', - builds: [], - getBuild: jest.fn(), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - }); - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - expect(pathExists).toBeCalledTimes(2); - expect(installTerraformLS).toBeCalledTimes(1); - expect(vscode.workspace.getConfiguration).toBeCalledTimes(1); - expect(lsPath.stgBinPath).toBeCalledTimes(1); - expect(lsPath.installPath).toBeCalledTimes(1); - }); - - test('ls version not found', async () => { - getConfiguration.mockImplementationOnce(() => ({ - get: jest.fn(() => { - // config('extensions').get('autoUpdate', true); - return true; - }), - has: jest.fn(), - inspect: jest.fn(), - then: jest.fn(), - update: jest.fn(), - })); - pathExists - .mockImplementationOnce(async () => false) // stg not present - .mockImplementationOnce(async () => true); // prod present - - isValidVersionString.mockImplementationOnce(() => true); - - getRequiredVersionRelease.mockImplementationOnce(async () => { - return { - name: 'terraform-ls', - version: '0.24.0', - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: '', - builds: [], - getBuild: jest.fn(), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - }); - - getLsVersion.mockImplementationOnce(async () => undefined); - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - expect(pathExists).toBeCalledTimes(2); - expect(installTerraformLS).toBeCalledTimes(1); - }); - - test('with out of date ls', async () => { - getConfiguration.mockImplementationOnce(() => ({ - get: jest.fn(() => { - // config('extensions').get('autoUpdate', true); - return true; - }), - has: jest.fn(), - inspect: jest.fn(), - then: jest.fn(), - update: jest.fn(), - })); - pathExists - .mockImplementationOnce(async () => false) // stg not present - .mockImplementationOnce(async () => true); // prod present - - isValidVersionString.mockImplementationOnce(() => { - return true; - }); - - getRequiredVersionRelease.mockImplementationOnce(async () => { - return { - name: 'terraform-ls', - version: '0.24.0', - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: '', - builds: [], - getBuild: jest.fn(), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - }); - - getLsVersion.mockImplementationOnce(async () => '0.23.0'); - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - expect(pathExists).toBeCalledTimes(2); - expect(installTerraformLS).toBeCalledTimes(1); - }); - }); - - describe('should not install', () => { - test('instead move staging to prod', async () => { - // this mimics the stging path being present, which should trigger a rename - pathExists.mockImplementationOnce(async () => true); - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - // expect stg to be renamed to prod - expect(vscode.workspace.fs.rename).toBeCalledTimes(1); - - expect(vscode.workspace.getConfiguration).toBeCalledTimes(0); - }); - - test('ls present and autoupdate is false', async () => { - getConfiguration.mockImplementationOnce(() => ({ - get: jest.fn(() => { - // config('extensions').get('autoUpdate', true); - return false; - }), - has: jest.fn(), - inspect: jest.fn(), - then: jest.fn(), - update: jest.fn(), - })); - - lsPath.installPath.mockImplementationOnce(() => 'installPath'); - lsPath.stgBinPath.mockImplementationOnce(() => 'stgbinpath'); - - isValidVersionString.mockImplementationOnce(() => { - return true; - }); - pathExists - .mockImplementationOnce(async () => false) // stg - .mockImplementationOnce(async () => true); // prod - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - expect(pathExists).toBeCalledTimes(2); - expect(vscode.workspace.getConfiguration).toBeCalledTimes(1); - expect(vscode.workspace.fs.rename).toBeCalledTimes(0); - expect(getRequiredVersionRelease).toBeCalledTimes(0); - }); - - test('invlaid terraform-ls verison', async () => { - getConfiguration.mockImplementationOnce(() => ({ - get: jest.fn(() => { - // config('extensions').get('autoUpdate', true); - return true; - }), - has: jest.fn(), - inspect: jest.fn(), - then: jest.fn(), - update: jest.fn(), - })); - - lsPath.installPath.mockImplementationOnce(() => 'installPath'); - lsPath.stgBinPath.mockImplementationOnce(() => 'stgbinpath'); - - isValidVersionString.mockImplementationOnce(() => { - return true; - }); - pathExists - .mockImplementationOnce(async () => false) // stg - .mockImplementationOnce(async () => false); // prod - - getRequiredVersionRelease.mockImplementationOnce(() => { - throw new Error('wahtever'); - }); - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - expect(pathExists).toBeCalledTimes(2); - expect(getRequiredVersionRelease).toBeCalledTimes(1); - expect(reporter.sendTelemetryException).toBeCalledTimes(1); - expect(vscode.workspace.getConfiguration).toBeCalledTimes(1); - expect(vscode.workspace.fs.rename).toBeCalledTimes(0); - }); - - test('with current ls version', async () => { - getConfiguration.mockImplementationOnce(() => ({ - get: jest.fn(() => { - // config('extensions').get('autoUpdate', true); - return true; - }), - has: jest.fn(), - inspect: jest.fn(), - then: jest.fn(), - update: jest.fn(), - })); - pathExists - .mockImplementationOnce(async () => false) // stg not present - .mockImplementationOnce(async () => true); // prod present - - isValidVersionString.mockImplementationOnce(() => true); - - getRequiredVersionRelease.mockImplementationOnce(async () => { - return { - name: 'terraform-ls', - version: '0.24.0', - // eslint-disable-next-line @typescript-eslint/naming-convention - shasums_signature: '', - builds: [], - getBuild: jest.fn(), - download: jest.fn(), - verify: jest.fn(), - unpack: jest.fn(), - calculateFileSha256Sum: jest.fn(), - downloadSha256Sum: jest.fn(), - }; - }); - - getLsVersion.mockImplementationOnce(async () => '0.24.0'); - - await updateOrInstall('0.24.0', '2.16.0', '1.66.0', lsPath, reporter); - - expect(pathExists).toBeCalledTimes(2); - expect(installTerraformLS).toBeCalledTimes(0); - }); - }); -});