diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 27a03425..00000000
--- a/.eslintignore
+++ /dev/null
@@ -1,2 +0,0 @@
-.eslintrc.js
-jest.config.js
\ No newline at end of file
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index e43e0646..00000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,43 +0,0 @@
-module.exports = {
- env: {
- browser: true,
- es2021: true
- },
- extends: [
- 'standard-with-typescript',
- 'plugin:deprecation/recommended'
- ],
- overrides: [
- {
- env: {
- node: true
- },
- files: [
- '*.ts'
- ],
- parserOptions: {
- sourceType: 'script'
- }
- }
- ],
- parserOptions: {
- ecmaVersion: 'latest',
- sourceType: 'module'
- },
- plugins: ['header'],
- rules: {
- "header/header": [2, "block", [
- " --------------------------------------------------------------------------------------------",
- {"pattern": " \\* Copyright \\(c\\) .*\\. All rights reserved\\.", "template": " * Copyright (c) 2023 Savoir-faire Linux. All rights reserved."},
- " * Licensed under the MIT License. See License.txt in the project root for license information.",
- " * ------------------------------------------------------------------------------------------ ",
- ], 2]
- },
- ignorePatterns: [
- 'out',
- 'poky',
- '.vscode-test',
- 'client/server',
- '__mocks__/vscode.ts'
- ],
-}
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..b239e844
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,46 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Desktop (please complete the following information):**
+ - OS: [e.g. Ubuntu 24.04]
+ - VS Code version [e.g. 1.92.2]
+ - Extension version [e.g. 2.7.0]
+ - Yocto Version [e.g. scarthgap]
+ - Other affected software version when applicable (CMake, SSH, kas, ...)
+
+**Debug logs**
+Please provide the list of installed VSCode extensions. You can generate it with the following shell command:
+```bash
+code --list-extensions --show-versions
+```
+You may also attach this extension's debug logs:
+ 1. Change the VSCode setting `bitbake.loggingLevel` to "debug"
+ 2. Restart VSCode
+ 3. Reproduce your problem
+ 4. Go to View->Output
+ 5. Copy the contents of the drop down menu items "BitBake" and "Bitbake Language Server"
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..11fc491e
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Add any other context or screenshots about the feature request here.
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index d3b5629f..09a78357 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -140,6 +140,8 @@ jobs:
client/package-lock.json
- run: npm install
- run: npm run fetch:docs
+ - run: npm run fetch:wasm
+ - run: npm run fetch:spdx-licenses
- run: cd server && npm pack
- name: Archive server package
uses: actions/upload-artifact@v4
@@ -156,6 +158,9 @@ jobs:
steps:
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
+ with:
+ node-version: '20.x'
+ registry-url: 'https://registry.npmjs.org'
- uses: actions/download-artifact@v4
- name: Publish to npm
run: npm publish $(find . -iname language-server-bitbake-*.tgz)
diff --git a/.github/workflows/update-ref.yml b/.github/workflows/update-ref.yml
index fff97bd1..5ef07b25 100644
--- a/.github/workflows/update-ref.yml
+++ b/.github/workflows/update-ref.yml
@@ -1,7 +1,7 @@
name: Update references for commits, tags, etc
on:
- workflow_dispatch:
+ workflow_dispatch:
schedule:
- cron: '0 0 1 * *' # Run on the first day of every month
@@ -20,12 +20,15 @@ jobs:
BASE_BRANCH: staging
FILE_PATHS: |
integration-tests/src/utils/version.ts
+ scripts/fetch-poky.sh
scripts/fetch-docs.sh
+ integration-tests/src/runTest.ts
+ scripts/fetch-spdx-licenses.sh
node-version: 20
steps:
- name: Checkout Repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
with:
ref: ${{ env.BASE_BRANCH }}
@@ -33,16 +36,15 @@ jobs:
run: bash scripts/update-ref.sh
- name: Verify file changes
- uses: tj-actions/verify-changed-files@v17
+ uses: tj-actions/verify-changed-files@v20
id: verify-changed-files
with:
files: ${{ env.FILE_PATHS }}
- name: Create pull request
if: steps.verify-changed-files.outputs.files_changed == 'true'
- uses: peter-evans/create-pull-request@v5
+ uses: peter-evans/create-pull-request@v6
with:
- add-paths: ${{ env.FILE_PATHS }}
title: Auto update references for commits, tags, etc
commit-message: Auto update references for commits, tags, etc
branch: update-ref
diff --git a/.github/workflows/update-tree-sitter-wasm-file.yml b/.github/workflows/update-tree-sitter-parser-info-file.yml
similarity index 71%
rename from .github/workflows/update-tree-sitter-wasm-file.yml
rename to .github/workflows/update-tree-sitter-parser-info-file.yml
index a8b4beef..61f3352c 100644
--- a/.github/workflows/update-tree-sitter-wasm-file.yml
+++ b/.github/workflows/update-tree-sitter-parser-info-file.yml
@@ -1,7 +1,7 @@
# Inspired by bash-language-server under MIT license
# Reference: https://github.com/bash-lsp/bash-language-server/blob/8c42218c77a9451b308839f9a754abde901323d5/.github/workflows/upgrade-tree-sitter.yml
-name: Update Tree Sitter WASM File
+name: Update Tree Sitter Parser Info File
on:
workflow_dispatch:
@@ -9,7 +9,7 @@ on:
- cron: '0 12 * * 2'
jobs:
- update-tree-sitter-wasm:
+ update-tree-sitter-parser-info-file:
runs-on: ubuntu-latest
@@ -45,15 +45,13 @@ jobs:
- name: Install Dependencies
run: npm install
- - name: Update tree-sitter wasm
- run: bash scripts/update-${{ matrix.tree-sitter-name }}-wasm.sh
+ - name: Update tree-sitter parser info file
+ run: bash scripts/update-${{ matrix.tree-sitter-name }}.sh
- name: Verify file changes
uses: tj-actions/verify-changed-files@v20
id: verify-changed-files
with:
- # The script generates a new wasm file and replaces the existing one. Git will treat it as a different file even it is generated with the same commit and CLI
- # Hence, we only compare the .info file. It should be enough to tell the difference
files: |
server/${{ matrix.tree-sitter-name }}.info
@@ -63,9 +61,8 @@ jobs:
with:
add-paths: |
server/${{ matrix.tree-sitter-name }}.info
- server/${{ matrix.tree-sitter-name }}.wasm
- title: Auto update ${{ matrix.tree-sitter-name }} wasm file
- commit-message: Auto update ${{ matrix.tree-sitter-name }} wasm file and parser info
- branch: update-${{ matrix.tree-sitter-name }}-wasm-file
+ title: Auto update ${{ matrix.tree-sitter-name }} parser info file
+ commit-message: Auto update ${{ matrix.tree-sitter-name }} parser info
+ branch: update-${{ matrix.tree-sitter-name }}-parser-info-file
base: ${{ env.BASE_BRANCH }}
token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index 3df032d6..43796ff6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@ debug.log
# node
node_modules/
# Compiled files
-client/server/
client/out/
out/
*.js.map
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 6808821e..1c0ad9bf 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -14,5 +14,6 @@
"source.fixAll.eslint": "explicit"
},
"jest.jestCommandLine": "node_modules/.bin/jest",
- "jest.monitorLongRun": 300000
+ "jest.monitorLongRun": 300000,
+ "eslint.nodePath": "${workspaceFolder}/node_modules",
}
diff --git a/.vscodeignore b/.vscodeignore
index 0de5d16c..a8ceb80e 100644
--- a/.vscodeignore
+++ b/.vscodeignore
@@ -16,5 +16,6 @@ server/parser.info
**/.gitignore
**/.eslint*
**/jest.config.js
+**/eslint.config.mjs
**/*.vsix
-**/*.tgz
\ No newline at end of file
+**/*.tgz
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dcb994aa..901457d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,30 @@
+# 2.8.0 - 2025.01.06
+
+ - Renamed command "Pick configuration" to "Change active buildConfiguration"
+ - Automatically re-scan when changing buildConfiguration
+ - Cache per-buildConfiguration scan results
+ - Make the recipes view appear as "loading" while a scan is ongoing
+ - Add "Change active buildConfiguration" to the main contextual menus
+ - Update dependencies and make according changes
+ - Verify Open VSX publisher for "The Yocto Project"
+ - Rate-limit loading bars in the debug logs
+ - Add support for the new `devtool modify --debug-build` option
+ - Add the "bitbake.disableDevtoolDebugBuild" setting to disable this new default behavior
+ - Fix an issue with the highlighting of the word "python"
+ - Improve compatibility and documentation around kas-container's ssh-agent option
+
+# 2.7.0 - 2024.09.13
+
+ - Add bitbake environment scan for global variables
+ - Add skipped recipes to the tree view with skip reason
+ - Add support for latest Yocto devtool status output
+ - Add sanity check for the working directory
+ - Fix a bug where buildConfigurations specific settings were not applied
+ - Update task_deps parser for latest Yocto output
+ - Bump dependencies
+ - Fix NPM publishing
+ - Auto-update SPDX references
+
# 2.6.0 - 2024.06.19
- Support renaming of BitBake variables in Python and Shell functions
diff --git a/README-DEVELOPER.md b/README-DEVELOPER.md
index ef0feb4b..781ffa24 100644
--- a/README-DEVELOPER.md
+++ b/README-DEVELOPER.md
@@ -93,7 +93,7 @@ See [the individual integration tests README](integration-tests/README.md).
## Tree-sitter
This extension uses [tree-sitter-bitbake](https://github.com/tree-sitter-grammars/tree-sitter-bitbake) and [tree-sitter-bash](https://github.com/tree-sitter/tree-sitter-bash) to parse the BitBake documents. They are installed with `npm run fetch:wasm`. The versions of tree-sitter-bitbake and tree-sitter-bash are documented in [server/tree-sitter-bitbake.info](server/tree-sitter-bitbake.info) and [server/tree-sitter-bash.info](server/tree-sitter-bash.info) respectively, along with the versions of the tree-sitter-cli that have to be used.
-To update the .info files with the latest versions of tree-sitter-bitbake and tree-sitter-bash, it is recommended to use the scripts [scripts/update-tree-sitter-bitbake-wasm.sh](scripts/update-tree-sitter-bitbake-wasm.sh) and [scripts/update-tree-sitter-bash-wasm.sh](scripts/update-tree-sitter-bash-wasm.sh). The GitHub workflow [update-tree-sitter-wasm-file.yml](.github/workflows/update-tree-sitter-wasm-file.yml) is already responsible for doing it automatically.
+To update the .info files with the latest versions of tree-sitter-bitbake and tree-sitter-bash, it is recommended to use the scripts [scripts/update-tree-sitter-bitbake.sh](scripts/update-tree-sitter-bitbake.sh) and [scripts/update-tree-sitter-bash.sh](scripts/update-tree-sitter-bash.sh). The GitHub workflow [update-tree-sitter-parser-info-file.yml](.github/workflows/update-tree-sitter-parser-info-file.yml) is already responsible for doing it automatically.
After updating the .info files, it is required to call `npm run fetch:wasm` in order to rebuild the Wasm files.
diff --git a/client/images/yocto-file-icon.svg b/client/images/yocto-file-icon.svg
index f243ad6a..a6adddfa 100644
--- a/client/images/yocto-file-icon.svg
+++ b/client/images/yocto-file-icon.svg
@@ -5,7 +5,7 @@
version="1.1"
id="svg8"
sodipodi:docname="yocto-file-icon.svg"
- inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
@@ -22,10 +22,10 @@
inkscape:pagecheckerboard="true"
showgrid="false"
inkscape:zoom="11.703258"
- inkscape:cx="27.043751"
- inkscape:cy="28.667231"
+ inkscape:cx="23.241391"
+ inkscape:cy="25.334826"
inkscape:window-width="1920"
- inkscape:window-height="1016"
+ inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
@@ -33,21 +33,12 @@
fit-margin-top="10"
fit-margin-left="10"
fit-margin-right="10"
- fit-margin-bottom="10" />
-
-
-
-
+ fit-margin-bottom="10"
+ inkscape:showpageshadow="2"
+ inkscape:deskcolor="#d1d1d1" />
+
diff --git a/client/package-lock.json b/client/package-lock.json
index 0f7f273f..6a51bda8 100644
--- a/client/package-lock.json
+++ b/client/package-lock.json
@@ -14,14 +14,16 @@
"dependencies": {
"find": "^0.3.0",
"node-pty": "^1.0.0",
+ "semver": "^7.6.3",
"vscode-languageclient": "^9.0.1"
},
"devDependencies": {
- "@types/find": "^0.2.2",
- "@types/vscode": "^1.90.0"
+ "@types/find": "^0.2.4",
+ "@types/semver": "^7.5.8",
+ "@types/vscode": "^1.96.0"
},
"engines": {
- "vscode": "^1.75.0"
+ "vscode": "^1.92.0"
}
},
"../lib": {
@@ -59,10 +61,16 @@
"integrity": "sha512-8cw1q8jruVOJoojgx8CimvFC4SP+sevnKOifRJTKXsngeWi/md1womzXRBv/LWNCoDEh4U51zc3r8HUAH2QyEg==",
"dev": true
},
+ "node_modules/@types/semver": {
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true
+ },
"node_modules/@types/vscode": {
- "version": "1.90.0",
- "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.90.0.tgz",
- "integrity": "sha512-oT+ZJL7qHS9Z8bs0+WKf/kQ27qWYR3trsXpq46YDjFqBsMLG4ygGGjPaJ2tyrH0wJzjOEmDyg9PDJBBhWg9pkQ==",
+ "version": "1.96.0",
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.96.0.tgz",
+ "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==",
"dev": true
},
"node_modules/balanced-match": {
@@ -84,16 +92,6 @@
"traverse-chain": "~0.1.0"
}
},
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "license": "ISC",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/minimatch": {
"version": "5.1.6",
"license": "ISC",
@@ -119,11 +117,9 @@
}
},
"node_modules/semver": {
- "version": "7.5.4",
- "license": "ISC",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"bin": {
"semver": "bin/semver.js"
},
@@ -175,10 +171,6 @@
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
"integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "license": "ISC"
- },
"src/lib": {
"name": "vscode-bitbake-lib",
"version": "2.5.0",
diff --git a/client/package.json b/client/package.json
index ebdd1293..fc2c934e 100644
--- a/client/package.json
+++ b/client/package.json
@@ -22,16 +22,18 @@
"url": "https://github.com/yoctoproject/vscode-bitbake.git"
},
"engines": {
- "vscode": "^1.75.0"
+ "vscode": "^1.92.0"
},
"dependencies": {
"find": "^0.3.0",
"node-pty": "^1.0.0",
+ "semver": "^7.6.3",
"vscode-languageclient": "^9.0.1"
},
"devDependencies": {
- "@types/find": "^0.2.2",
- "@types/vscode": "^1.90.0"
+ "@types/find": "^0.2.4",
+ "@types/semver": "^7.5.8",
+ "@types/vscode": "^1.96.0"
},
"workspaces": [
"src/lib"
diff --git a/client/src/__tests__/unit-tests/driver/BitbakeESDK.test.ts b/client/src/__tests__/unit-tests/driver/BitbakeESDK.test.ts
index 149399ea..0c55402e 100644
--- a/client/src/__tests__/unit-tests/driver/BitbakeESDK.test.ts
+++ b/client/src/__tests__/unit-tests/driver/BitbakeESDK.test.ts
@@ -7,7 +7,9 @@ import { copyBitbakeSettings, generateCPPProperties, generateTasksDefinitions }
import { type BitbakeSettings } from '../../../lib/src/BitbakeSettings'
import * as JSONFile from '../../../utils/JSONFile'
-import * as LanguageClient from '../../../language/languageClient'
+import * as BitBakeLanguageClient from '../../../language/languageClient'
+import { LanguageClient } from 'vscode-languageclient/node'
+import { BitBakeProjectScanner } from '../../../driver/BitBakeProjectScanner'
describe('Bitbake ESDK Test Suite', () => {
const workspace = {
@@ -93,7 +95,6 @@ describe('Bitbake ESDK Test Suite', () => {
{
name: 'should not be overwritten',
browse: {
- // eslint-disable-next-line no-template-curly-in-string
path: ['${workspaceFolder}/**']
}
}
@@ -103,11 +104,11 @@ describe('Bitbake ESDK Test Suite', () => {
loadJsonMock.mockReturnValueOnce(originalConfig)
const saveJsonMock = jest.spyOn(JSONFile, 'saveJsonFile').mockImplementation(() => {})
- const bitBakeProjectScannerMock = { resolveContainerPath: jest.fn().mockImplementation((arg) => arg) } as any
- const clientMock = jest.fn() as any
- const getVariableValueMock = jest.spyOn(LanguageClient, 'getVariableValue')
+ const bitBakeProjectScannerMock = { resolveContainerPath: jest.fn().mockImplementation((arg) => arg) } as unknown as BitBakeProjectScanner
+ const clientMock = jest.fn() as unknown as LanguageClient
+ const getVariableValueMock = jest.spyOn(BitBakeLanguageClient, 'getVariableValue')
getVariableValueMock.mockImplementation(
- async (client, variable, recipe) => {
+ async (client, variable) => {
if (variable === 'STAGING_BINDIR_TOOLCHAIN') {
return '/opt'
}
diff --git a/client/src/__tests__/unit-tests/driver/bitbake-driver.test.ts b/client/src/__tests__/unit-tests/driver/bitbake-driver.test.ts
index eaf7c21d..0fec9fa4 100644
--- a/client/src/__tests__/unit-tests/driver/bitbake-driver.test.ts
+++ b/client/src/__tests__/unit-tests/driver/bitbake-driver.test.ts
@@ -65,7 +65,6 @@ describe('BitbakeDriver Tests', () => {
})
it('should produce a valid crops docker run script', () => {
- /* eslint-disable no-template-curly-in-string */
const driver = new BitbakeDriver()
driver.loadSettings({
commandWrapper: 'docker run --rm -it -v ${workspaceFolder}:/workdir crops/poky --workdir=/workdir /bin/bash -c',
@@ -111,7 +110,6 @@ describe('BitbakeDriver Tests', () => {
})
it('should compose bitbake command for scanning recipe environment', () => {
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
const bitbakeTaskDefinition = {
recipes: ['recipe1'],
options: {
diff --git a/client/src/__tests__/unit-tests/driver/eSDKMode.test.ts b/client/src/__tests__/unit-tests/driver/eSDKMode.test.ts
index 4785909e..e99d585e 100644
--- a/client/src/__tests__/unit-tests/driver/eSDKMode.test.ts
+++ b/client/src/__tests__/unit-tests/driver/eSDKMode.test.ts
@@ -5,11 +5,12 @@
import { BitBakeProjectScanner } from '../../../driver/BitBakeProjectScanner'
import { BitbakeDriver } from '../../../driver/BitbakeDriver'
-import { type BitbakeSettings } from '../../../lib/src/BitbakeSettings'
import * as BitbakeTerminal from '../../../ui/BitbakeTerminal'
import * as ProcessUtils from '../../../utils/ProcessUtils'
import { bitbakeESDKMode, setBitbakeESDKMode } from '../../../driver/BitbakeESDK'
import { clientNotificationManager } from '../../../ui/ClientNotificationManager'
+import { SpawnSyncReturns } from 'child_process'
+import { IPty } from 'node-pty'
// Yocto's eSDKs contain devtool but not bitbake. These tests ensure we can still provide devtool functionalities without bitbake.
describe('Devtool eSDK Mode Test Suite', () => {
@@ -23,10 +24,10 @@ describe('Devtool eSDK Mode Test Suite', () => {
const bitBakeProjectScanner = new BitBakeProjectScanner(bitbakeDriver)
setBitbakeESDKMode(true)
- const scanAvailableLayersSpy = jest.spyOn(bitBakeProjectScanner as any, 'scanAvailableLayers').mockImplementation(async () => {})
- const scanForRecipesSpy = jest.spyOn(bitBakeProjectScanner as any, 'scanForRecipes').mockImplementation(async () => {})
- const parseAllRecipesSpy = jest.spyOn(bitBakeProjectScanner as any, 'parseAllRecipes').mockImplementation(async () => {})
- const scanDevtoolWorkspaces = jest.spyOn(bitBakeProjectScanner as any, 'scanDevtoolWorkspaces').mockImplementation(async () => {})
+ const scanAvailableLayersSpy = jest.spyOn(bitBakeProjectScanner, 'scanAvailableLayers').mockImplementation(async () => {})
+ const scanForRecipesSpy = jest.spyOn(bitBakeProjectScanner, 'scanForRecipes').mockImplementation(async () => {})
+ const parseAllRecipesSpy = jest.spyOn(bitBakeProjectScanner, 'parseAllRecipes').mockImplementation(async () => {})
+ const scanDevtoolWorkspaces = jest.spyOn(bitBakeProjectScanner, 'scanDevtoolWorkspaces').mockImplementation(async () => {})
await bitBakeProjectScanner.rescanProject()
@@ -38,22 +39,22 @@ describe('Devtool eSDK Mode Test Suite', () => {
it('can detect eSDK mode', async () => {
const bitbakeDriver = new BitbakeDriver()
- const bitbakeSettings: BitbakeSettings = {
+ const bitbakeSettings: Record = {
pathToBitbakeFolder: __dirname,
- workingDirectory: '/path/to/workspace',
+ workingDirectory: __dirname,
commandWrapper: '',
pathToEnvScript: 'fakeEnvScript',
pathToBuildFolder: 'nonexistent'
}
- bitbakeDriver.loadSettings(bitbakeSettings, '/path/to/workspace')
- const bitbakeTerminalSpy = jest.spyOn(BitbakeTerminal, 'runBitbakeTerminalCustomCommand').mockImplementation(async () => undefined as any)
+ bitbakeDriver.loadSettings(bitbakeSettings, __dirname)
+ const bitbakeTerminalSpy = jest.spyOn(BitbakeTerminal, 'runBitbakeTerminalCustomCommand').mockImplementation(async () => (undefined as unknown as Promise))
const bitbakeExecutionSpy = jest.spyOn(ProcessUtils, 'finishProcessExecution')
clientNotificationManager.showBitbakeSettingsError = jest.fn()
bitbakeExecutionSpy.mockReturnValueOnce(Promise.resolve({
status: 1,
stdout: '/tmp/devtool\r\nbitbake not found'
- } as any))
+ } as unknown as Promise>))
let sane = await bitbakeDriver.checkBitbakeSettingsSanity()
expect(sane).toStrictEqual(true)
expect(bitbakeTerminalSpy).toHaveBeenCalledWith(expect.anything(), expect.stringContaining('which'), expect.anything(), expect.anything())
@@ -62,7 +63,7 @@ describe('Devtool eSDK Mode Test Suite', () => {
bitbakeExecutionSpy.mockReturnValueOnce(Promise.resolve({
status: 0,
stdout: '/tmp/devtool\r\n/tmp/bitbake'
- } as any))
+ } as unknown as Promise>))
sane = await bitbakeDriver.checkBitbakeSettingsSanity()
expect(sane).toStrictEqual(true)
expect(bitbakeESDKMode).toStrictEqual(false)
@@ -70,7 +71,7 @@ describe('Devtool eSDK Mode Test Suite', () => {
bitbakeExecutionSpy.mockReturnValueOnce(Promise.resolve({
status: 1,
stdout: 'error'
- } as any))
+ } as unknown as Promise>))
sane = await bitbakeDriver.checkBitbakeSettingsSanity()
expect(sane).toStrictEqual(false)
})
diff --git a/client/src/__tests__/unit-tests/driver/scanner.test.ts b/client/src/__tests__/unit-tests/driver/scanner.test.ts
index e0027fc2..8872973d 100644
--- a/client/src/__tests__/unit-tests/driver/scanner.test.ts
+++ b/client/src/__tests__/unit-tests/driver/scanner.test.ts
@@ -9,12 +9,11 @@ import { BitBakeProjectScanner } from '../../../driver/BitBakeProjectScanner'
import { BitbakeDriver } from '../../../driver/BitbakeDriver'
import { BITBAKE_TIMEOUT } from '../../../utils/ProcessUtils'
import { mockVscodeEvents } from '../../utils/vscodeMock'
-import { importRecipe, removeRecipe } from '../../utils/bitbake'
+import { importRecipe, removeRecipe, integrationBitbakeFolder } from '../../utils/bitbake'
import { logger } from '../../../lib/src/utils/OutputLogger'
let bitBakeProjectScanner: BitBakeProjectScanner
-const pathToBitbakeFolder = path.join(__dirname, '../../../../../integration-tests/project-folder/sources/poky/bitbake')
const pathToBuildFolder = path.join(__dirname, '../../../../../integration-tests/project-folder/build')
const pathToEnvScript = path.join(__dirname, '../../../../../integration-tests/project-folder/sources/poky/oe-init-build-env')
const workspaceFolder = path.join(__dirname, '../../../../../integration-tests/project-folder')
@@ -26,7 +25,7 @@ describe('BitBakeProjectScanner', () => {
const bitbakeDriver: BitbakeDriver = new BitbakeDriver()
bitbakeDriver.loadSettings(
{
- pathToBitbakeFolder,
+ pathToBitbakeFolder: integrationBitbakeFolder,
pathToBuildFolder,
pathToEnvScript,
workingDirectory: workspaceFolder,
@@ -74,8 +73,13 @@ describe('BitBakeProjectScanner', () => {
jest.clearAllMocks()
}, BITBAKE_TIMEOUT)
+ it('can get the bitbake version', async () => {
+ const version = bitBakeProjectScanner.activeScanResult._bitbakeVersion
+ expect(version).toMatch(/^[\d.]+$/);
+ })
+
it('can get a list of layers', async () => {
- const layers = bitBakeProjectScanner.scanResult._layers
+ const layers = bitBakeProjectScanner.activeScanResult._layers
// poky provides the "core", "yocto" and "yoctobsp" layers
expect(layers.length).toBeGreaterThan(2)
expect(layers).toEqual(
@@ -90,7 +94,7 @@ describe('BitBakeProjectScanner', () => {
})
it('can get a list of recipes', async () => {
- const recipes = bitBakeProjectScanner.scanResult._recipes
+ const recipes = bitBakeProjectScanner.activeScanResult._recipes
expect(recipes.length).toBeGreaterThan(100)
expect(recipes).toEqual(
expect.arrayContaining([
@@ -103,8 +107,21 @@ describe('BitBakeProjectScanner', () => {
)
})
+ it('can detected skipped recipes', async () => {
+ const recipes = bitBakeProjectScanner.activeScanResult._recipes
+ // systemd is skipped in the poky distribution, because systemV is used instead
+ const systemdRecipe = recipes.find((recipe) => recipe.name === 'systemd')
+ expect(systemdRecipe).toEqual(
+ expect.objectContaining(
+ {
+ skipped: expect.stringContaining('skipped:')
+ }
+ )
+ )
+ })
+
it('can get recipes appends', async () => {
- const recipes = bitBakeProjectScanner.scanResult._recipes
+ const recipes = bitBakeProjectScanner.activeScanResult._recipes
const busyboxRecipe = recipes.find((recipe) => recipe.name === 'busybox')
expect(busyboxRecipe).toEqual(
expect.objectContaining(
@@ -120,7 +137,7 @@ describe('BitBakeProjectScanner', () => {
})
it('can get recipes paths', async () => {
- const recipes = bitBakeProjectScanner.scanResult._recipes
+ const recipes = bitBakeProjectScanner.activeScanResult._recipes
const busyboxRecipe = recipes.find((recipe) => recipe.name === 'busybox')
expect(busyboxRecipe).toEqual(
expect.objectContaining({
@@ -133,7 +150,7 @@ describe('BitBakeProjectScanner', () => {
it('can get tricky recipes paths', async () => {
// These recipes change their PN and require the recipesWithoutPaths code
- const recipes = bitBakeProjectScanner.scanResult._recipes
+ const recipes = bitBakeProjectScanner.activeScanResult._recipes
const gccSourceRecipe = recipes.find((recipe) => recipe.name.includes('gcc-source-'))
expect(gccSourceRecipe).toEqual(
expect.objectContaining({
@@ -161,7 +178,7 @@ describe('BitBakeProjectScanner', () => {
})
it('respects PREFERRED_VERSION', async () => {
- const recipes = bitBakeProjectScanner.scanResult._recipes
+ const recipes = bitBakeProjectScanner.activeScanResult._recipes
const fixtureVersionRecipe = recipes.find((recipe) => recipe.name === 'fixture-version')
expect(fixtureVersionRecipe).toEqual(
expect.objectContaining({
@@ -174,7 +191,7 @@ describe('BitBakeProjectScanner', () => {
})
it('can get a list of classes', async () => {
- const classes = bitBakeProjectScanner.scanResult._classes
+ const classes = bitBakeProjectScanner.activeScanResult._classes
expect(classes.length).toBeGreaterThan(50)
expect(classes).toEqual(
expect.arrayContaining([
@@ -188,7 +205,7 @@ describe('BitBakeProjectScanner', () => {
})
it('can get a list of overrides', async () => {
- const overrides = bitBakeProjectScanner.scanResult._overrides
+ const overrides = bitBakeProjectScanner.activeScanResult._overrides
expect(overrides.length).toBeGreaterThan(5)
expect(overrides).toEqual(
expect.arrayContaining([
@@ -198,7 +215,7 @@ describe('BitBakeProjectScanner', () => {
})
it('can get a list of conf files', async () => {
- const confFiles = bitBakeProjectScanner.scanResult._confFiles
+ const confFiles = bitBakeProjectScanner.activeScanResult._confFiles
expect(confFiles.length).toBeGreaterThan(0)
expect(confFiles).toEqual(
expect.arrayContaining(
@@ -216,7 +233,7 @@ describe('BitBakeProjectScanner', () => {
})
it('can get a list of devtool workspaces', async () => {
- const devtoolWorkspaces = bitBakeProjectScanner.scanResult._workspaces
+ const devtoolWorkspaces = bitBakeProjectScanner.activeScanResult._workspaces
expect(devtoolWorkspaces.length).toBeGreaterThan(0)
expect(devtoolWorkspaces).toEqual(
expect.arrayContaining([
diff --git a/client/src/__tests__/unit-tests/ui/bitbake-commands.test.ts b/client/src/__tests__/unit-tests/ui/bitbake-commands.test.ts
index 21e41d69..9e93a3ad 100644
--- a/client/src/__tests__/unit-tests/ui/bitbake-commands.test.ts
+++ b/client/src/__tests__/unit-tests/ui/bitbake-commands.test.ts
@@ -4,28 +4,33 @@
* ------------------------------------------------------------------------------------------ */
import * as vscode from 'vscode'
+import type childProcess from 'child_process'
import { BitbakeWorkspace } from '../../../ui/BitbakeWorkspace'
import { BitBakeProjectScanner } from '../../../driver/BitBakeProjectScanner'
import { BitbakeDriver } from '../../../driver/BitbakeDriver'
-import { registerDevtoolCommands } from '../../../ui/BitbakeCommands'
+import { addDevtoolDebugBuild, registerDevtoolCommands } from '../../../ui/BitbakeCommands'
import { clientNotificationManager } from '../../../ui/ClientNotificationManager'
import * as BitbakeTerminal from '../../../ui/BitbakeTerminal'
import * as ProcessUtils from '../../../utils/ProcessUtils'
+import { LanguageClient } from 'vscode-languageclient/node'
+import { IPty } from 'node-pty'
+import { BitbakeScanResult } from '../../../lib/src/types/BitbakeScanResult'
+import { BitbakeSettings } from '../../../lib/src/BitbakeSettings'
jest.mock('vscode')
-function mockExtensionContext (bitBakeProjectScanner: BitBakeProjectScanner): any {
+function mockExtensionContext (bitBakeProjectScanner: BitBakeProjectScanner): (...args: unknown[]) => unknown {
const bitbakeWorkspace = new BitbakeWorkspace()
const contextMock: vscode.ExtensionContext = {
subscriptions: {
push: jest.fn()
}
- } as any
- const clientMock = jest.fn() as any
+ } as unknown as vscode.ExtensionContext
+ const clientMock = jest.fn() as unknown as LanguageClient
- let ideSDKCommand: any
+ let ideSDKCommand = () => {}
vscode.commands.registerCommand = jest.fn().mockImplementation(
- (command: string, callback: (...args: any[]) => any, thisArg?: any): void => {
+ (command: string, callback: (...args: unknown[]) => unknown): void => {
if (command === 'bitbake.devtool-ide-sdk') {
ideSDKCommand = callback
}
@@ -55,10 +60,11 @@ describe('Devtool ide-sdk command', () => {
pathToBitbakeFolder: '',
sdkImage: 'core-image-minimal'
}
+ jest.spyOn(bitBakeProjectScanner, 'activeScanResult', 'get').mockReturnValue({'_bitbakeVersion': '1.0.0'} as BitbakeScanResult)
const ideSDKCommand = mockExtensionContext(bitBakeProjectScanner)
- jest.spyOn(BitbakeTerminal, 'runBitbakeTerminalCustomCommand').mockReturnValue(undefined as any)
- jest.spyOn(ProcessUtils, 'finishProcessExecution').mockReturnValue({ status: 1 } as any)
+ jest.spyOn(BitbakeTerminal, 'runBitbakeTerminalCustomCommand').mockReturnValue(undefined as unknown as Promise)
+ jest.spyOn(ProcessUtils, 'finishProcessExecution').mockReturnValue({ status: 1 } as unknown as Promise>)
clientNotificationManager.showSDKUnavailableError = jest.fn()
await ideSDKCommand('busybox')
@@ -72,13 +78,21 @@ describe('Devtool ide-sdk command', () => {
sdkImage: 'core-image-minimal',
sshTarget: 'root@192.168.0.3'
}
+ jest.spyOn(bitBakeProjectScanner, 'activeScanResult', 'get').mockReturnValue({'_bitbakeVersion': '3.0.0'} as BitbakeScanResult)
const ideSDKCommand = mockExtensionContext(bitBakeProjectScanner)
- const commandSpy = jest.spyOn(BitbakeTerminal, 'runBitbakeTerminalCustomCommand').mockReturnValue(undefined as any)
- jest.spyOn(ProcessUtils, 'finishProcessExecution').mockReturnValue({ status: 0 } as any)
+ const commandSpy = jest.spyOn(BitbakeTerminal, 'runBitbakeTerminalCustomCommand').mockReturnValue(undefined as unknown as Promise)
+ jest.spyOn(ProcessUtils, 'finishProcessExecution').mockReturnValue({ status: 0 } as unknown as Promise>)
- jest.spyOn(vscode.window, 'showInformationMessage').mockReturnValue({ then: jest.fn() } as any)
+ jest.spyOn(vscode.window, 'showInformationMessage').mockReturnValue({ then: jest.fn() } as unknown as Thenable)
await ideSDKCommand('busybox')
expect(commandSpy).toHaveBeenCalledWith(expect.anything(), 'devtool ide-sdk -i code busybox core-image-minimal -t root@192.168.0.3', expect.anything())
})
+
+ it('should properly detect devtool modify options', async () => {
+ // Test addDevtoolDebugBuild
+ expect(await addDevtoolDebugBuild('', {_bitbakeVersion: '3.0.0'} as BitbakeScanResult, {disableDevtoolDebugBuild: false} as BitbakeSettings, undefined as unknown as BitbakeDriver)).toBe(' --debug-build')
+ expect(await addDevtoolDebugBuild('', {_bitbakeVersion: '3.0.0'} as BitbakeScanResult, {disableDevtoolDebugBuild: true} as BitbakeSettings, undefined as unknown as BitbakeDriver)).toBe('')
+ expect(await addDevtoolDebugBuild('', {_bitbakeVersion: '1.0.0'} as BitbakeScanResult, {disableDevtoolDebugBuild: false} as BitbakeSettings, undefined as unknown as BitbakeDriver)).toBe('')
+ })
})
diff --git a/client/src/__tests__/unit-tests/ui/bitbake-recipes-view.test.ts b/client/src/__tests__/unit-tests/ui/bitbake-recipes-view.test.ts
index 74ed5a34..cb4d1594 100644
--- a/client/src/__tests__/unit-tests/ui/bitbake-recipes-view.test.ts
+++ b/client/src/__tests__/unit-tests/ui/bitbake-recipes-view.test.ts
@@ -23,11 +23,11 @@ describe('BitbakeDriver Recipes View', () => {
const bitBakeProjectScanner = new BitBakeProjectScanner(new BitbakeDriver())
void bitbakeWorkspace.addActiveRecipe('base-files') // The promise is the memento which is under mock
- const contextMock: vscode.ExtensionContext = {
+ const contextMock = {
subscriptions: {
push: jest.fn()
}
- } as any
+ } as unknown as vscode.ExtensionContext
const scanResult: BitbakeScanResult = {
_recipes: [
@@ -48,16 +48,16 @@ describe('BitbakeDriver Recipes View', () => {
ext: '.bbappend',
name: 'base-files'
}
- ]
+ ],
+ skipped: 'skipped: because reasons'
}
],
_includes: [],
_layers: [],
_classes: [],
_confFiles: [],
- _overrides: [],
- _workspaces: []
- }
+ _overrides: []
+ } as unknown as BitbakeScanResult
vscode.window.registerTreeDataProvider = jest.fn().mockImplementation(
async (viewId: string, treeDataProvider: vscode.TreeDataProvider): Promise => {
@@ -66,6 +66,7 @@ describe('BitbakeDriver Recipes View', () => {
expect(rootTreeItem?.length).toStrictEqual(2)
const recipeItem = (rootTreeItem as BitbakeRecipeTreeItem[])[0]
expect(recipeItem.label).toStrictEqual('base-files')
+ expect(recipeItem.description).toEqual('skipped: because reasons')
const filesItems = await treeDataProvider.getChildren(recipeItem)
expect(filesItems).toBeDefined()
@@ -75,7 +76,7 @@ describe('BitbakeDriver Recipes View', () => {
mockVscodeEvents()
const bitbakeRecipesView = new BitbakeRecipesView(bitbakeWorkspace, bitBakeProjectScanner)
- bitbakeRecipesView.registerView(contextMock)
bitBakeProjectScanner.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, scanResult)
+ bitbakeRecipesView.registerView(contextMock)
})
})
diff --git a/client/src/__tests__/unit-tests/ui/bitbake-terminal-links.test.ts b/client/src/__tests__/unit-tests/ui/bitbake-terminal-links.test.ts
index 962f08d2..bdfd8211 100644
--- a/client/src/__tests__/unit-tests/ui/bitbake-terminal-links.test.ts
+++ b/client/src/__tests__/unit-tests/ui/bitbake-terminal-links.test.ts
@@ -8,7 +8,7 @@ import { BitbakeTerminalLinkProvider } from '../../../ui/BitbakeTerminalLinkProv
import { type BitBakeProjectScanner } from '../../../driver/BitBakeProjectScanner'
describe('BitbakeTerminalLinkProvider', () => {
- const bitBakeProjectScanner: BitBakeProjectScanner = jest.fn() as any
+ const bitBakeProjectScanner = jest.fn() as unknown as BitBakeProjectScanner
const linkProvider: BitbakeTerminalLinkProvider = new BitbakeTerminalLinkProvider(bitBakeProjectScanner)
function mockScanner (): void {
@@ -34,18 +34,16 @@ describe('BitbakeTerminalLinkProvider', () => {
})
it('should return an empty array if container paths resolution is not needed', async () => {
- const context: vscode.TerminalLinkContext = { line: 'some line without absolute links ./abcd;(123)' } as any
- const token: vscode.CancellationToken = undefined as any
+ const context = { line: 'some line without absolute links ./abcd;(123)' } as unknown as vscode.TerminalLinkContext
- const result = await linkProvider.provideTerminalLinks(context, token)
+ const result = await linkProvider.provideTerminalLinks(context)
expect(result).toEqual([])
})
it('should return an array of TerminalLinks for container paths', async () => {
- const context: vscode.TerminalLinkContext = { line: 'some line "/path/to/file:123" with a link' } as any
- const token: vscode.CancellationToken = undefined as any
- const result = await linkProvider.provideTerminalLinks(context, token)
+ const context = { line: 'some line "/path/to/file:123" with a link' } as unknown as vscode.TerminalLinkContext
+ const result = await linkProvider.provideTerminalLinks(context)
expect(result).toHaveLength(1)
expect(result[0].startIndex).toBe(11)
expect(result[0].length).toBe(13)
diff --git a/client/src/__tests__/unit-tests/ui/devtool-workspaces-view.test.ts b/client/src/__tests__/unit-tests/ui/devtool-workspaces-view.test.ts
index ac576c6d..bea3cff3 100644
--- a/client/src/__tests__/unit-tests/ui/devtool-workspaces-view.test.ts
+++ b/client/src/__tests__/unit-tests/ui/devtool-workspaces-view.test.ts
@@ -18,11 +18,11 @@ describe('Devtool Worskapces View', () => {
})
it('should list devtool workspaces', (done) => {
- const contextMock: vscode.ExtensionContext = {
+ const contextMock = {
subscriptions: {
push: jest.fn()
}
- } as any
+ } as unknown as vscode.ExtensionContext
const scanResult: BitbakeScanResult = {
_recipes: [{
@@ -35,18 +35,13 @@ describe('Devtool Worskapces View', () => {
name: 'dropbear'
}
}],
- _includes: [],
- _layers: [],
- _classes: [],
- _overrides: [],
- _confFiles: [],
_workspaces: [
{
name: 'dropbear',
path: '/build/workspace/dropbear'
}
- ]
- }
+ ],
+ } as BitbakeScanResult
const bitBakeProjectScanner = new BitBakeProjectScanner(new BitbakeDriver())
diff --git a/client/src/__tests__/utils/bitbake.ts b/client/src/__tests__/utils/bitbake.ts
index ff6aa743..98b772a7 100644
--- a/client/src/__tests__/utils/bitbake.ts
+++ b/client/src/__tests__/utils/bitbake.ts
@@ -6,6 +6,8 @@
import path from 'path'
import fs from 'fs'
+export const integrationBitbakeFolder = path.join(__dirname, '../../../../integration-tests/project-folder/sources/poky/bitbake')
+
/// Copy a recipe into poky
export async function importRecipe (recipePath: string, pokyPath: string): Promise {
const pokyDestinationPath = path.resolve(pokyPath, 'meta/recipes-core/base-files', path.basename(recipePath))
diff --git a/client/src/driver/BitBakeProjectScanner.ts b/client/src/driver/BitBakeProjectScanner.ts
index 6b83620f..36c3635f 100644
--- a/client/src/driver/BitBakeProjectScanner.ts
+++ b/client/src/driver/BitBakeProjectScanner.ts
@@ -10,24 +10,22 @@ import * as vscode from 'vscode'
import { logger } from '../lib/src/utils/OutputLogger'
-import type {
- BitbakeScanResult,
- DevtoolWorkspaceInfo,
- ElementInfo,
- LayerInfo,
- PathInfo
+import {
+ SCAN_RESULT_VERSION,
+ type BitbakeScanResult,
+ type DevtoolWorkspaceInfo,
+ type ElementInfo,
+ type LayerInfo,
} from '../lib/src/types/BitbakeScanResult'
import { type BitbakeDriver } from './BitbakeDriver'
-import { type LanguageClient } from 'vscode-languageclient/node'
import fs from 'fs'
import { runBitbakeTerminalCustomCommand } from '../ui/BitbakeTerminal'
import { bitbakeESDKMode } from './BitbakeESDK'
import { finishProcessExecution } from '../utils/ProcessUtils'
import { extractRecipeName, extractRecipeVersion } from '../lib/src/utils/files'
-import { NotificationMethod } from '../lib/src/types/notifications'
-interface ScannStatus {
+interface ScanStatus {
scanIsRunning: boolean
scanIsPending: boolean
}
@@ -47,10 +45,9 @@ export class BitBakeProjectScanner {
private readonly _confFileExtension: string = 'conf'
onChange: EventEmitter = new EventEmitter()
- private _bitbakeScanResult: BitbakeScanResult = { _classes: [], _includes: [], _layers: [], _overrides: [], _recipes: [], _workspaces: [], _confFiles: [] }
- private static readonly _scanResultVersion: number = 1
+ /// The scan results stored per activeBuildConfiguration
+ private _bitbakeScanResults: { [key: string]: BitbakeScanResult } = {}
private readonly _bitbakeDriver: BitbakeDriver
- private _languageClient: LanguageClient | undefined
/// These attributes map bind mounts of the workDir to the host system if a docker container commandWrapper is used (-v).
private containerMountPoint: string | undefined
@@ -60,29 +57,52 @@ export class BitBakeProjectScanner {
this._bitbakeDriver = bitbakeDriver
}
- setClient (languageClient: LanguageClient): void {
- this._languageClient = languageClient
- }
-
- private readonly _scanStatus: ScannStatus = {
+ private _scanStatus: ScanStatus = {
scanIsRunning: false,
scanIsPending: false
}
- get scanResult (): BitbakeScanResult {
- return this._bitbakeScanResult
+ get activeScanResult (): BitbakeScanResult {
+ const activeBuildConfiguration = this._bitbakeDriver.activeBuildConfiguration
+ if (this._bitbakeScanResults[activeBuildConfiguration] === undefined) {
+ this._bitbakeScanResults[activeBuildConfiguration] = {
+ _classes: [],
+ _includes: [],
+ _layers: [],
+ _overrides: [],
+ _recipes: [],
+ _workspaces: [],
+ _confFiles: [],
+ _bitbakeVersion: ''
+ }
+ }
+ return this._bitbakeScanResults[activeBuildConfiguration]
}
- set scanResult (scanResult: BitbakeScanResult) {
- this._bitbakeScanResult = scanResult
+ get bitbakeDriver (): BitbakeDriver {
+ return this._bitbakeDriver
}
- get scanResultVersion (): number {
- return BitBakeProjectScanner._scanResultVersion
+ public saveCacheResult(memento: vscode.Memento): Thenable {
+ const ret = memento.update('bitbake.ScanResults', this._bitbakeScanResults).then(() => {
+ logger.debug('BitBake scan result saved to workspace state')
+ })
+ void memento.update('bitbake.ScanResultVersion', SCAN_RESULT_VERSION).then(() => {
+ logger.debug('BitBake scan result version saved to workspace state')
+ })
+ return ret
}
- get bitbakeDriver (): BitbakeDriver {
- return this._bitbakeDriver
+ public restoreCacheResult(memento: vscode.Memento) : void {
+ const scanResult = memento.get('bitbake.ScanResults') as { [key: string]: BitbakeScanResult }
+ const scanResultVersion = memento.get('bitbake.ScanResultVersion') as number
+ if (scanResult !== undefined && scanResultVersion === SCAN_RESULT_VERSION) {
+ this._bitbakeScanResults = scanResult
+ logger.debug('BitBake scan result restored from workspace state')
+ // No need to emit onChange, because this is called during the initialization, when nothing is listening
+ } else {
+ logger.debug('No valid BitBake scan result found in workspace state: ' + scanResultVersion + '!=' + SCAN_RESULT_VERSION)
+ }
}
public needsContainerPathsResolution (): boolean {
@@ -93,7 +113,7 @@ export class BitBakeProjectScanner {
async rescanDevtoolWorkspaces (): Promise {
logger.info('request rescanDevtoolWorkspaces')
await this.scanDevtoolWorkspaces()
- this.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, this._bitbakeScanResult)
+ this.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, this.activeScanResult)
}
async rescanProject (): Promise {
@@ -106,6 +126,7 @@ export class BitBakeProjectScanner {
try {
if (!bitbakeESDKMode) { // Has been set by sanity checking
+ this.scanBitbakeVersion()
await this.scanAvailableLayers()
this.scanForClasses()
this.scanForIncludeFiles()
@@ -120,11 +141,10 @@ export class BitBakeProjectScanner {
logger.info('scan ready')
this.printScanStatistic()
- void this._languageClient?.sendNotification(NotificationMethod.ScanComplete, this._bitbakeScanResult)
- this.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, this._bitbakeScanResult)
+ this.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, this.activeScanResult)
} catch (error) {
- logger.error(`scanning of project is aborted: ${error as any}`)
- this.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, this._bitbakeScanResult)
+ logger.error(`scanning of project is aborted: ${error}`)
+ this.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, this.activeScanResult)
}
this._scanStatus.scanIsRunning = false
@@ -140,7 +160,7 @@ export class BitBakeProjectScanner {
}
private async getContainerParentInodes (filepath: string): Promise {
- const stdout = await this.executeBitBakeCommand(`f=${filepath}; while [[ $f != / ]]; do stat -c %i $f; f=$(realpath $(dirname "$f")); done;`)
+ const stdout = await this.executeBitBakeCommand(`f=${filepath}; while [[ $f != / ]]; do stat -c %i $f; f=$(realpath $(dirname "$f")); done;`, 20000)
const regex = /^\d+$/gm
const matches = stdout.match(regex)
return (matches != null) ? matches.map((match) => parseInt(match)) : [NaN]
@@ -183,29 +203,44 @@ export class BitBakeProjectScanner {
private printScanStatistic (): void {
logger.info('Scan results:')
logger.info('******************************************************************')
- logger.info(`Layer: ${this._bitbakeScanResult._layers.length}`)
- logger.info(`Recipes: ${this._bitbakeScanResult._recipes.length}`)
- logger.info(`Inc-Files: ${this._bitbakeScanResult._includes.length}`)
- logger.info(`bbclass: ${this._bitbakeScanResult._classes.length}`)
- logger.info(`conf Files: ${this._bitbakeScanResult._confFiles.length}`)
- logger.info(`overrides: ${this._bitbakeScanResult._overrides.length}`)
- logger.info(`Devtool-workspaces: ${this._bitbakeScanResult._workspaces.length}`)
+ logger.info(`Layer: ${this.activeScanResult._layers.length}`)
+ logger.info(`Recipes: ${this.activeScanResult._recipes.length}`)
+ logger.info(`Inc-Files: ${this.activeScanResult._includes.length}`)
+ logger.info(`bbclass: ${this.activeScanResult._classes.length}`)
+ logger.info(`conf Files: ${this.activeScanResult._confFiles.length}`)
+ logger.info(`overrides: ${this.activeScanResult._overrides.length}`)
+ logger.info(`Devtool-workspaces: ${this.activeScanResult._workspaces.length}`)
}
private scanForClasses (): void {
- this._bitbakeScanResult._classes = this.searchFiles(this._classFileExtension)
+ this.activeScanResult._classes = this.searchFiles(this._classFileExtension)
}
private scanForIncludeFiles (): void {
- this._bitbakeScanResult._includes = this.searchFiles(this._includeFileExtension)
+ this.activeScanResult._includes = this.searchFiles(this._includeFileExtension)
}
private scanForConfFiles (): void {
- this._bitbakeScanResult._confFiles = this.searchFiles(this._confFileExtension)
+ this.activeScanResult._confFiles = this.searchFiles(this._confFileExtension)
+ }
+
+ private scanBitbakeVersion(): void {
+ const bitbakeScriptPath = this.bitbakeDriver.bitbakeSettings.pathToBitbakeFolder + '/bin/bitbake'
+ const bitbakeScriptContent = fs.readFileSync(bitbakeScriptPath, 'utf8')
+
+ const versionRegex = /__version__ = "(\d+\.\d+\.\d+)"/
+ const match = bitbakeScriptContent.match(versionRegex)
+ if (match === null) {
+ logger.error('Failed to find bitbake version')
+ throw new Error('Failed to find bitbake version in ' + bitbakeScriptPath)
+ }
+ logger.info('Bitbake version: ' + match[1])
+
+ this.activeScanResult._bitbakeVersion = match[1]
}
- private async scanAvailableLayers (): Promise {
- this._bitbakeScanResult._layers = new Array < LayerInfo >()
+ public async scanAvailableLayers (): Promise {
+ this.activeScanResult._layers = new Array < LayerInfo >()
this.containerMountPoint = undefined
const output = await this.executeBitBakeCommand('bitbake-layers show-layers')
@@ -227,7 +262,7 @@ export class BitBakeProjectScanner {
}
if ((layerElement.name !== undefined) && (layerElement.path !== undefined) && (layerElement.priority !== undefined)) {
- this._bitbakeScanResult._layers.push(layerElement as LayerInfo)
+ this.activeScanResult._layers.push(layerElement as LayerInfo)
}
}
}
@@ -238,9 +273,9 @@ export class BitBakeProjectScanner {
}
if (this.containerMountPoint === undefined && !hostToContainer) {
// Should only be called through scanAvailableLayers()
- const hostWorkdir = this.bitbakeDriver?.bitbakeSettings.workingDirectory
- if (hostWorkdir === undefined) {
- throw new Error('hostWorkdir is undefined')
+ const hostWorkdir = this.bitbakeDriver?.getBuildConfig('workingDirectory')
+ if (typeof hostWorkdir !== 'string') {
+ throw new Error('hostWorkdir is not a string')
}
await this.scanContainerMountPoint(inputPath, hostWorkdir)
}
@@ -292,11 +327,11 @@ You should adjust your docker volumes to use the same URIs as those present on y
private searchFiles (pattern: string): ElementInfo[] {
const elements: ElementInfo[] = new Array < ElementInfo >()
- for (const layer of this._bitbakeScanResult._layers) {
+ for (const layer of this.activeScanResult._layers) {
try {
const files = find.fileSync(new RegExp(`.${pattern}$`), layer.path)
for (const file of files) {
- const pathObj: PathInfo = path.parse(file)
+ const pathObj: path.ParsedPath = path.parse(file)
const element: ElementInfo = {
name: pathObj.name,
@@ -317,7 +352,7 @@ You should adjust your docker volumes to use the same URIs as those present on y
}
async scanForRecipes (): Promise {
- this._bitbakeScanResult._recipes = new Array < ElementInfo >()
+ this.activeScanResult._recipes = new Array < ElementInfo >()
const output = await this.executeBitBakeCommand('bitbake-layers show-recipes')
const splittedOutput = output.split(/\r?\n/g)
@@ -337,15 +372,18 @@ You should adjust your docker volumes to use the same URIs as those present on y
* Example:
* zstd:
meta 1.5.5
+ virt-viewer:
+ meta-virtualization 11.0 (skipped: one of 'wayland x11' needs to be in DISTRO_FEATURES)
The ones that are followed by (skipped) are not included.
*/
- const recipeRegex = /(?.+):\r?\n((?:\s+(?\S+)\s+(?\S+)(?:\s+\(skipped\))?\r?\n)+)/g
+ const recipeRegex = /(?.+):\r?\n((?:\s+(?\S+)\s+(?\S+)(?\s+\(skipped[^\r\n]*\))?\r?\n)+)/g
for (const match of outputRecipeSection.matchAll(recipeRegex)) {
const name = match.groups?.name
const layerName = match.groups?.layer
const version = match.groups?.version
+ const skipped = match.groups?.skipped
if (name === undefined) {
logger.error('[scanForRecipes] recipeName is undefined')
@@ -367,7 +405,7 @@ You should adjust your docker volumes to use the same URIs as those present on y
Here 'meta' is used to refer to the layer instead of 'core'. So in such case we need to compare
the basename of the path found in 'show-layers' with the layer name found in this function.
*/
- const layerInfo = this._bitbakeScanResult._layers.find((layer) => {
+ const layerInfo = this.activeScanResult._layers.find((layer) => {
return layer.name === layerName || path.parse(layer.path).name === layerName
})
@@ -375,10 +413,11 @@ You should adjust your docker volumes to use the same URIs as those present on y
name,
extraInfo,
layerInfo,
- version
+ version,
+ skipped
}
- this._bitbakeScanResult._recipes.push(element)
+ this.activeScanResult._recipes.push(element)
}
await this.scanForRecipesPath()
@@ -387,16 +426,16 @@ You should adjust your docker volumes to use the same URIs as those present on y
async scanOverrides (): Promise {
const output = await this.executeBitBakeCommand('bitbake-getvar OVERRIDES')
const outerReg = /\nOVERRIDES="(.*)"\r?\n/
- this._bitbakeScanResult._overrides = output.match(outerReg)?.[1].split(':') ?? []
+ this.activeScanResult._overrides = output.match(outerReg)?.[1].split(':') ?? []
}
- private async scanDevtoolWorkspaces (): Promise {
- this._bitbakeScanResult._workspaces = new Array < DevtoolWorkspaceInfo >()
+ public async scanDevtoolWorkspaces (): Promise {
+ this.activeScanResult._workspaces = new Array < DevtoolWorkspaceInfo >()
const output = await this.executeBitBakeCommand('devtool status')
- const regex = /^([^\s]+):\s([^\s]+)$/gm
+ const regex = /^([^\s]+):\s([^\s]+)(?:\s\([^\s]+\))?$/gm
let match
while ((match = regex.exec(output)) !== null) {
- this._bitbakeScanResult._workspaces.push({ name: match[1], path: match[2] })
+ this.activeScanResult._workspaces.push({ name: match[1], path: match[2] })
}
}
@@ -408,25 +447,35 @@ You should adjust your docker volumes to use the same URIs as those present on y
const output = await this.executeBitBakeCommand('bitbake-layers show-recipes -f')
const lines = output.split(/\r?\n/g)
// Example output (indentation or skipped means not used):
+ // We don't want to report the indented recipes, which are superseeded
+ // However skipped recipes are still in context, even though not buildable.
+ // Their skipped reason is already captured in ElementInfo.skipped
/* === Available recipes: ===
* /home/deribaucourt/Workspace/yocto-vscode/yocto/yocto-build/sources/poky/meta/recipes-core/busybox/busybox_1.36.2.bb
* /home/deribaucourt/Workspace/yocto-vscode/yocto/yocto-build/sources/poky/meta/recipes-core/busybox/busybox_1.36.1.bb
* /home/deribaucourt/Workspace/yocto-vscode/yocto/yocto-build/sources/poky/meta/recipes-core/busybox/busybox_1.36.3.bb
* /home/deribaucourt/Workspace/yocto-vscode/yocto/yocto-build/sources/poky/meta-selftest/recipes-test/images/wic-image-minimal.bb (skipped: ...)
*/
- const regex = /^([\w/._-]+\.bb)$/
- const matches = lines.filter((line) => regex.test(line))
- if (matches === null) { return }
+ const regex = /^(?[\w/._-]+\.bb)(?:\s+\(skipped[^\r\n]*\))?$/
+ const filenames = []
+ for (const line of lines) {
+ const match = line.match(regex)
+ const filename = match?.groups?.filename
+ if (filename !== null && filename !== undefined) {
+ filenames.push(filename)
+ }
+ }
+ if (filenames.length === 0) { return }
// Sort by decreasing length to avoid partial matches
- matches.sort((a, b) => b.length - a.length)
- this._bitbakeScanResult._recipes.sort((a, b) => b.name.length - a.name.length)
- await this.assignRecipesPaths(matches, this._bitbakeScanResult._recipes, (a: string, b: string) => a === b)
+ filenames.sort((a, b) => b.length - a.length)
+ this.activeScanResult._recipes.sort((a, b) => b.name.length - a.name.length)
+ await this.assignRecipesPaths(filenames, this.activeScanResult._recipes, (a: string, b: string) => a === b)
// Some recipes change their PN like gcc-source -> gcc-source-13.2
// We allow the recipe to be found by just including part of the name
- const recipesWithoutPaths = this._bitbakeScanResult._recipes.filter((recipe) => recipe.path === undefined)
- await this.assignRecipesPaths(matches, recipesWithoutPaths, (a: string, b: string) => a.includes(b))
+ const recipesWithoutPaths = this.activeScanResult._recipes.filter((recipe) => recipe.path === undefined)
+ await this.assignRecipesPaths(filenames, recipesWithoutPaths, (a: string, b: string) => a.includes(b))
}
private async assignRecipesPaths (filePaths: string[], recipesArray: ElementInfo[], nameMatchFunc: (a: string, b: string) => boolean): Promise {
@@ -462,7 +511,7 @@ You should adjust your docker volumes to use the same URIs as those present on y
const recipeName: string = fullRecipeNameAsArray[0].split('.')[0]
const recipeVersion: string | undefined = fullRecipeNameAsArray[1]?.split('.bb')[0]
- const recipe: ElementInfo | undefined = this._bitbakeScanResult._recipes.find((obj: ElementInfo): boolean => {
+ const recipe: ElementInfo | undefined = this.activeScanResult._recipes.find((obj: ElementInfo): boolean => {
return obj.name === recipeName
})
@@ -471,7 +520,7 @@ You should adjust your docker volumes to use the same URIs as those present on y
for (const matchInner of match[0].matchAll(innerReg)) {
if (recipe.appends === undefined) {
- recipe.appends = new Array < PathInfo >()
+ recipe.appends = new Array < path.ParsedPath >()
}
if (bbappendVersionMatches(recipeVersion, recipe.version)) {
const resolvedPath = await this.resolveContainerPath(matchInner[0])
@@ -484,12 +533,12 @@ You should adjust your docker volumes to use the same URIs as those present on y
}
}
- private async executeBitBakeCommand (command: string): Promise {
+ private async executeBitBakeCommand (command: string, timeout?: number): Promise {
if (this._bitbakeDriver === undefined) {
throw new Error('Bitbake driver is not set')
}
const result = await finishProcessExecution(runBitbakeTerminalCustomCommand(this._bitbakeDriver, command, 'BitBake: Scan Project', true),
- async () => { await this.bitbakeDriver.killBitbake() })
+ async () => { await this.bitbakeDriver.killBitbake() }, timeout)
if (result.status !== 0) {
logger.error(`Failed to execute bitbake command: ${command}`)
throw new Error(`Failed to execute bitbake command: ${command}\r\n${result.stderr.toString()}`)
diff --git a/client/src/driver/BitbakeDriver.ts b/client/src/driver/BitbakeDriver.ts
index a9a7f9fc..416c21c2 100644
--- a/client/src/driver/BitbakeDriver.ts
+++ b/client/src/driver/BitbakeDriver.ts
@@ -24,7 +24,7 @@ export class BitbakeDriver {
bitbakeProcessCommand: string | undefined
onBitbakeProcessChange: EventEmitter = new EventEmitter()
- loadSettings (settings: any, workspaceFolder: string = '.'): void {
+ loadSettings (settings: Record, workspaceFolder: string = '.'): void {
this.bitbakeSettings = loadBitbakeSettings(settings, workspaceFolder)
logger.debug('BitbakeDriver settings updated: ' + JSON.stringify(this.bitbakeSettings))
}
@@ -40,22 +40,21 @@ export class BitbakeDriver {
})
}
- private getBuildConfig (property: keyof BitbakeBuildConfigSettings): any {
+ getBuildConfig (property: keyof BitbakeBuildConfigSettings): string | NodeJS.Dict | boolean | undefined {
return getBuildSetting(this.bitbakeSettings, this.activeBuildConfiguration, property)
}
/// Execute a command in the bitbake environment
async spawnBitbakeProcess (command: string): Promise {
- const { shell, script } = this.prepareCommand(command)
- const cwd = this.getBuildConfig('workingDirectory')
+ const { shell, shellEnv, script, workingDirectory } = this.prepareCommand(command)
await this.waitForBitbakeToFinish()
- logger.debug(`Executing Bitbake command with ${shell} in ${cwd}: ${script}`)
+ logger.debug(`Executing Bitbake command with ${shell} in ${workingDirectory}: ${script}`)
const child = pty.spawn(
shell,
['-c', script],
{
- cwd,
- env: { ...process.env, ...this.getBuildConfig('shellEnv') }
+ cwd: workingDirectory,
+ env: shellEnv
}
)
this.bitbakeProcess = child
@@ -66,7 +65,7 @@ export class BitbakeDriver {
})
const disposables = [
child.onData((data) => {
- logger.debug(data.toString())
+ logger.debug_ratelimit(data.toString())
}),
child.onExit(() => {
this.bitbakeProcess = undefined
@@ -79,11 +78,17 @@ export class BitbakeDriver {
prepareCommand (command: string): {
shell: string
+ shellEnv: NodeJS.Dict
script: string
+ workingDirectory: string | undefined
} {
const shell = process.env.SHELL ?? '/bin/sh'
+ const tempShellEnv = this.getBuildConfig('shellEnv')
+ const shellEnv = {...process.env, ...(typeof tempShellEnv === 'object' ? tempShellEnv : {}) }
const script = this.composeBitbakeScript(command)
- return { shell, script }
+ const tempWorkingDirectory = this.getBuildConfig('workingDirectory')
+ const workingDirectory = typeof tempWorkingDirectory === 'string' ? tempWorkingDirectory : '.'
+ return { shell, shellEnv, script, workingDirectory }
}
composeBitbakeScript (command: string): string {
@@ -125,6 +130,13 @@ export class BitbakeDriver {
return false
}
+ const workingDirectory = this.getBuildConfig('workingDirectory')
+ if (typeof workingDirectory === 'string' && !fs.existsSync(workingDirectory)) {
+ // If it is not defined, then we will use the workspace folder which is always valid
+ clientNotificationManager.showBitbakeSettingsError('Working directory does not exist.')
+ return false
+ }
+
// We could test for devtool and bitbake to know if we are in an eSDK or not
const command = 'which devtool bitbake || true'
const process = runBitbakeTerminalCustomCommand(this, command, 'Bitbake: Sanity test', true)
diff --git a/client/src/driver/BitbakeESDK.ts b/client/src/driver/BitbakeESDK.ts
index 0a4450c5..c42c08c4 100644
--- a/client/src/driver/BitbakeESDK.ts
+++ b/client/src/driver/BitbakeESDK.ts
@@ -76,11 +76,13 @@ export function generateTasksDefinitions (workspace: DevtoolWorkspaceInfo, bitba
dependsOn: [`BitBake Build ${recipeName}`]
})
}
- const tasks = vscodeTasks.tasks
- if (tasks === undefined) {
- vscodeTasks.tasks = newTasks
- } else {
- mergeJsonArray(tasks, newTasks)
+ if (typeof vscodeTasks === 'object' && vscodeTasks !== null && 'tasks' in vscodeTasks) {
+ const tasks = vscodeTasks.tasks
+ if (tasks === undefined || tasks === null) {
+ vscodeTasks.tasks = newTasks
+ } else if (Array.isArray(tasks)) {
+ mergeJsonArray(tasks, newTasks)
+ }
}
saveJsonFile(vscodeTasksPath, vscodeTasks)
logger.info(`Generated ${vscodeTasksPath} for ${recipeName}`)
@@ -102,11 +104,14 @@ export async function generateCPPProperties (workspace: DevtoolWorkspaceInfo, bi
compilerArgs: CXX?.split(/\s+/).slice(1).concat(CXXFLAGS?.split(/\s+/) ?? [])
}
- const configurations = vscodeCppProperties.configurations
- if (configurations === undefined) {
- vscodeCppProperties.configurations = [configuration]
- } else {
- mergeJsonArray(configurations, [configuration])
+ if (typeof vscodeCppProperties === 'object' && vscodeCppProperties !== null && 'configurations' in vscodeCppProperties) {
+ const configurations = vscodeCppProperties.configurations
+ if (configurations === undefined) {
+ vscodeCppProperties.configurations = [configuration]
+ } else if(Array.isArray(configurations)) {
+ mergeJsonArray(configurations, [configuration])
+ }
}
+
saveJsonFile(vscodeCppPropertiesPath, vscodeCppProperties)
}
diff --git a/client/src/driver/BitbakeEnvScanner.ts b/client/src/driver/BitbakeEnvScanner.ts
new file mode 100644
index 00000000..e9a6810b
--- /dev/null
+++ b/client/src/driver/BitbakeEnvScanner.ts
@@ -0,0 +1,115 @@
+/* --------------------------------------------------------------------------------------------
+ * Copyright (c) 2023 Savoir-faire Linux. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ * ------------------------------------------------------------------------------------------ */
+
+import * as vscode from 'vscode'
+import { type LanguageClient } from 'vscode-languageclient/node'
+import { logger } from '../lib/src/utils/OutputLogger'
+import { runBitbakeTask } from '../ui/BitbakeCommands'
+import { type BitbakeCustomExecution, type BitbakeTaskProvider } from '../ui/BitbakeTaskProvider'
+import { RequestMethod, type RequestParams } from '../lib/src/types/requests'
+
+export class BitbakeEnvScanner implements vscode.Disposable {
+ static readonly recipeEnvScanTaskName = 'Bitbake: Scan recipe env'
+ static readonly globalEnvScanTaskName = 'Bitbake: Scan global env'
+ private _languageClient: LanguageClient | undefined
+ private _pendingTask: vscode.Task | null = null
+
+ readonly envScanComplete = new vscode.EventEmitter()
+
+ dispose (): void {
+ this.envScanComplete.dispose()
+ }
+
+ async scanGlobalEnv (taskProvider: BitbakeTaskProvider): Promise {
+ const taskDefinition: vscode.TaskDefinition = { type: 'bitbake', options: { parseOnly: true, env: true } }
+ await this.scan(taskProvider, BitbakeEnvScanner.globalEnvScanTaskName, taskDefinition)
+ }
+
+ /**
+ *
+ * @param chosenRecipe The recipe to scan
+ * @param taskProvider The task provider, see more in BitbakeTaskProvider
+ * @param uri The URI of the chosen recipe
+ * @returns
+ */
+ async scanRecipeEnv (chosenRecipe: string, taskProvider: BitbakeTaskProvider, uri: unknown): Promise {
+ if (chosenRecipe === '') {
+ logger.debug('[BitbakeEnvScanner] No recipe chosen for scan')
+ return
+ }
+
+ await this.scan(taskProvider, BitbakeEnvScanner.recipeEnvScanTaskName, { type: 'bitbake', recipes: [chosenRecipe], uri, options: { parseOnly: true, env: true } })
+ }
+
+ private async scan (taskProvider: BitbakeTaskProvider, taskName: string, taskDefinition: vscode.TaskDefinition): Promise {
+ const scanEnvTask = new vscode.Task(
+ taskDefinition,
+ vscode.TaskScope.Workspace,
+ taskName,
+ 'bitbake'
+ )
+
+ const runningTasks = vscode.tasks.taskExecutions
+ if (runningTasks.some((execution) => execution.task.name === BitbakeEnvScanner.recipeEnvScanTaskName || execution.task.name === BitbakeEnvScanner.globalEnvScanTaskName)) {
+ logger.debug('[BitbakeEnvScanner] An environment scan is already running, adding this one to the pending tasks')
+ this._pendingTask = scanEnvTask
+ return
+ }
+
+ await runBitbakeTask(scanEnvTask, taskProvider)
+ // Wait for the task and server side to have done the processing
+ await new Promise((resolve) => {
+ const disposable = this.envScanComplete.event((definition) => {
+ if (definition === scanEnvTask.definition) {
+ disposable.dispose()
+ resolve()
+ }
+ })
+ })
+ }
+
+ subscribeToTaskEnd (context: vscode.ExtensionContext, taskProvider: BitbakeTaskProvider): void {
+ context.subscriptions.push(vscode.tasks.onDidEndTask(async (e) => {
+ if (this._languageClient === undefined) {
+ logger.error('[onDidEndTask] Language client not set, unable to forward environment to the server')
+ return
+ }
+
+ const executionEngine = e.execution.task.execution as BitbakeCustomExecution
+ if (executionEngine === undefined) {
+ logger.error('[onDidEndTask] Execution engine not set, unable to forward environment to the server')
+ return
+ }
+
+ const scanResults = executionEngine.pty?.outputDataString ?? ''
+ if (e.execution.task.name === BitbakeEnvScanner.recipeEnvScanTaskName) {
+ const uri = e.execution.task.definition.uri
+ const chosenRecipe = e.execution.task.definition.recipes[0]
+
+ logger.debug('[onDidEndTask] Sending recipe environment to the server')
+ const requestParam: RequestParams['ProcessRecipeScanResults'] = { scanResults, uri, chosenRecipe }
+ await this._languageClient.sendRequest(RequestMethod.ProcessRecipeScanResults, requestParam)
+ } else if (e.execution.task.name === BitbakeEnvScanner.globalEnvScanTaskName) {
+ logger.debug('[onDidEndTask] Sending global environment to the server')
+ const requestParam: RequestParams['ProcessGlobalEnvScanResults'] = { scanResults }
+ await this._languageClient.sendRequest(RequestMethod.ProcessGlobalEnvScanResults, requestParam)
+ }
+ this.envScanComplete.fire(e.execution.task.definition)
+
+ if (this._pendingTask !== null) {
+ logger.debug(`[onDidEndTask] Running the pending scan task. url: ${this._pendingTask.definition.uri}`)
+ await runBitbakeTask(this._pendingTask, taskProvider)
+ this._pendingTask = null
+ }
+ }))
+ }
+
+ setLanguageClient (client: LanguageClient): void {
+ this._languageClient = client
+ }
+}
+
+const bitbakeEnvScanner = new BitbakeEnvScanner()
+export default bitbakeEnvScanner
diff --git a/client/src/driver/BitbakeRecipeScanner.ts b/client/src/driver/BitbakeRecipeScanner.ts
deleted file mode 100644
index ded7ab6f..00000000
--- a/client/src/driver/BitbakeRecipeScanner.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-/* --------------------------------------------------------------------------------------------
- * Copyright (c) 2023 Savoir-faire Linux. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- * ------------------------------------------------------------------------------------------ */
-
-import * as vscode from 'vscode'
-import { type LanguageClient } from 'vscode-languageclient/node'
-import { logger } from '../lib/src/utils/OutputLogger'
-import { runBitbakeTask } from '../ui/BitbakeCommands'
-import { type BitbakeCustomExecution, type BitbakeTaskProvider } from '../ui/BitbakeTaskProvider'
-import { RequestMethod, type RequestParams } from '../lib/src/types/requests'
-
-export class BitbakeRecipeScanner implements vscode.Disposable {
- static readonly taskName = 'Bitbake: Scan recipe env'
-
- private _languageClient: LanguageClient | undefined
- private _pendingRecipeScanTasks: vscode.Task | null = null
-
- readonly serverRecipeScanComplete = new vscode.EventEmitter()
-
- dispose (): void {
- this.serverRecipeScanComplete.dispose()
- }
-
- /**
- *
- * @param chosenRecipe The recipe to scan
- * @param taskProvider The task provider, see more in BitbakeTaskProvider
- * @param uri The URI of the chosen recipe
- * @param triggeredByCommandPalette If the scan was triggered by the command palette
- * @returns
- */
- async scan (chosenRecipe: string, taskProvider: BitbakeTaskProvider, uri: any): Promise {
- if (chosenRecipe === '') {
- logger.debug('[BitbakeRecipeScanner] No recipe chosen for scan')
- return
- }
-
- const taskName = BitbakeRecipeScanner.taskName
- const scanRecipeEnvTask = new vscode.Task(
- { type: 'bitbake', recipes: [chosenRecipe], uri, options: { parseOnly: true, env: true } },
- vscode.TaskScope.Workspace,
- taskName,
- 'bitbake'
- )
-
- const runningTasks = vscode.tasks.taskExecutions
- if (runningTasks.some((execution) => execution.task.name === taskName)) {
- logger.debug('[BitbakeRecipeScanner] Recipe scan is already running, pushing to pending tasks')
- this._pendingRecipeScanTasks = scanRecipeEnvTask
- return
- }
-
- await runBitbakeTask(scanRecipeEnvTask, taskProvider)
- // Wait for the task and server side to have done the processing
- await new Promise((resolve) => {
- const disposable = this.serverRecipeScanComplete.event((definition) => {
- if (definition === scanRecipeEnvTask.definition) {
- disposable.dispose()
- resolve()
- }
- })
- })
- }
-
- subscribeToTaskEnd (context: vscode.ExtensionContext, taskProvider: BitbakeTaskProvider): void {
- context.subscriptions.push(vscode.tasks.onDidEndTask(async (e) => {
- if (e.execution.task.name === 'Bitbake: Scan recipe env') {
- const uri = e.execution.task.definition.uri
- const chosenRecipe = e.execution.task.definition.recipes[0]
-
- const executionEngine = e.execution.task.execution as BitbakeCustomExecution
- if (executionEngine !== undefined) {
- const scanResults = executionEngine.pty?.outputDataString ?? ''
- if (this._languageClient === undefined) {
- logger.error('[onDidEndTask] Language client not set, unable to forward recipe environment to the server')
- } else {
- logger.debug('[onDidEndTask] Sending recipe environment to the server')
- const requestParam: RequestParams['ProcessRecipeScanResults'] = { scanResults, uri, chosenRecipe }
- await this._languageClient.sendRequest(RequestMethod.ProcessRecipeScanResults, requestParam)
- this.serverRecipeScanComplete.fire(e.execution.task.definition)
- }
- }
-
- if (this._pendingRecipeScanTasks !== null) {
- logger.debug(`[onDidEndTask] Running the pending recipe scan task. url: ${this._pendingRecipeScanTasks.definition.uri}`)
- await runBitbakeTask(this._pendingRecipeScanTasks, taskProvider)
- this._pendingRecipeScanTasks = null
- }
- }
- }))
- }
-
- setLanguageClient (client: LanguageClient): void {
- this._languageClient = client
- }
-}
-
-const bitbakeRecipeScanner = new BitbakeRecipeScanner()
-export default bitbakeRecipeScanner
diff --git a/client/src/extension.ts b/client/src/extension.ts
index 0a0f96b7..32be5f3d 100644
--- a/client/src/extension.ts
+++ b/client/src/extension.ts
@@ -19,7 +19,7 @@ import { BitBakeProjectScanner } from './driver/BitBakeProjectScanner'
import { BitbakeDocumentLinkProvider } from './documentLinkProvider'
import { DevtoolWorkspacesView } from './ui/DevtoolWorkspacesView'
import path from 'path'
-import bitbakeRecipeScanner from './driver/BitbakeRecipeScanner'
+import bitbakeEnvScanner from './driver/BitbakeEnvScanner'
import { BitbakeTerminalProfileProvider } from './ui/BitbakeTerminalProfile'
import { BitbakeTerminalLinkProvider } from './ui/BitbakeTerminalLinkProvider'
import { extractRecipeName } from './lib/src/utils/files'
@@ -34,7 +34,6 @@ const bitbakeDriver: BitbakeDriver = new BitbakeDriver()
let bitbakeTaskProvider: BitbakeTaskProvider
let taskProvider: vscode.Disposable
const bitbakeWorkspace: BitbakeWorkspace = new BitbakeWorkspace()
-// eslint-disable-next-line @typescript-eslint/no-unused-vars
let bitbakeRecipesView: BitbakeRecipesView | undefined
let devtoolWorkspacesView: DevtoolWorkspacesView | undefined
let terminalProvider: BitbakeTerminalProfileProvider | undefined
@@ -51,7 +50,7 @@ function loadLoggerSettings (): void {
function loadEmbeddedLanguageDocsManagerSettings (): void {
const isDisabled = vscode.workspace.getConfiguration('bitbake').get('disableEmbeddedLanguagesFiles')
- logger.info(`Disable embedded language features ${isDisabled as any}`)
+ logger.info(`Disable embedded language features ${isDisabled}`)
if (typeof isDisabled === 'boolean') {
embeddedLanguageDocsManager.isDisabled = isDisabled
}
@@ -100,7 +99,7 @@ async function installExtensions (extensionId: string): Promise {
location: vscode.ProgressLocation.Notification,
title: `Installing ${extensionId}...`,
cancellable: false
- }, async (progress, token) => {
+ }, async (progress) => {
try {
await vscode.commands.executeCommand('workbench.extensions.installExtension', extensionId).then(() => {
progress.report({ message: `${extensionId} has been installed` })
@@ -135,19 +134,25 @@ export async function activate (context: vscode.ExtensionContext): Promise
logger.debug('Loaded bitbake workspace settings: ' + JSON.stringify(vscode.workspace.getConfiguration('bitbake')))
bitbakeDriver.loadSettings(vscode.workspace.getConfiguration('bitbake'), vscode.workspace.workspaceFolders?.[0].uri.fsPath)
const bitBakeProjectScanner: BitBakeProjectScanner = new BitBakeProjectScanner(bitbakeDriver)
+ await bitBakeProjectScanner.restoreCacheResult(context.workspaceState)
+ bitBakeProjectScanner.onChange.on(BitBakeProjectScanner.EventType.SCAN_COMPLETE, async () => {
+ bitBakeProjectScanner.saveCacheResult(context.workspaceState)
+ })
updatePythonPath()
bitbakeWorkspace.loadBitbakeWorkspace(context.workspaceState)
bitbakeTaskProvider = new BitbakeTaskProvider(bitbakeDriver)
client = await activateLanguageServer(context, bitBakeProjectScanner)
- bitBakeProjectScanner.setClient(client)
+ bitBakeProjectScanner.onChange.on(BitBakeProjectScanner.EventType.SCAN_COMPLETE, (scanResult: BitbakeScanResult) => {
+ void client.sendNotification(NotificationMethod.ScanComplete, scanResult)
+ })
taskProvider = vscode.tasks.registerTaskProvider('bitbake', bitbakeTaskProvider)
- context.subscriptions.push(bitbakeRecipeScanner)
- bitbakeRecipeScanner.setLanguageClient(client)
- bitbakeRecipeScanner.subscribeToTaskEnd(context, bitbakeTaskProvider)
+ context.subscriptions.push(bitbakeEnvScanner)
+ bitbakeEnvScanner.setLanguageClient(client)
+ bitbakeEnvScanner.subscribeToTaskEnd(context, bitbakeTaskProvider)
context.subscriptions.push(
- bitbakeRecipeScanner.serverRecipeScanComplete.event(reviewDiagnostics)
+ bitbakeEnvScanner.envScanComplete.event(reviewDiagnostics)
)
clientNotificationManager.setMemento(context.workspaceState)
@@ -161,6 +166,10 @@ export async function activate (context: vscode.ExtensionContext): Promise
const bitbakeConfigPicker = new BitbakeConfigPicker(bitbakeDriver.bitbakeSettings, context)
context.subscriptions.push(bitbakeConfigPicker.statusBarItem)
bitbakeDriver.activeBuildConfiguration = bitbakeConfigPicker.activeBuildConfiguration
+ bitbakeConfigPicker.onActiveConfigChanged.event((config) => {
+ bitbakeRecipesView?.setTitleConfig(config)
+ })
+ bitbakeRecipesView?.setTitleConfig(bitbakeDriver.activeBuildConfiguration)
terminalProvider = new BitbakeTerminalProfileProvider(bitbakeDriver)
vscode.window.registerTerminalProfileProvider('bitbake.terminal', terminalProvider)
const terminalLinkProvider = new BitbakeTerminalLinkProvider(bitBakeProjectScanner)
@@ -187,10 +196,11 @@ export async function activate (context: vscode.ExtensionContext): Promise
await clientNotificationManager.resetNeverShowAgain('bitbake/bitbakeSettingsError')
logger.debug('Bitbake settings changed')
updatePythonPath()
- if (!scanContainsData(bitBakeProjectScanner.scanResult)) {
+ if (!scanContainsData(bitBakeProjectScanner.activeScanResult)) {
void vscode.commands.executeCommand('bitbake.rescan-project')
} else {
void vscode.commands.executeCommand('bitbake.parse-recipes')
+ bitBakeProjectScanner.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, bitBakeProjectScanner.activeScanResult)
}
}
if (event.affectsConfiguration('bitbake.loggingLevel')) {
@@ -210,7 +220,11 @@ export async function activate (context: vscode.ExtensionContext): Promise
}))
context.subscriptions.push(bitbakeConfigPicker.onActiveConfigChanged.event((config) => {
bitbakeDriver.activeBuildConfiguration = config
- // Re-scaning here would be very cumbersome, the user should do it manually if desired
+ if (!scanContainsData(bitBakeProjectScanner.activeScanResult)) {
+ void vscode.commands.executeCommand('bitbake.rescan-project')
+ } else {
+ bitBakeProjectScanner.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, bitBakeProjectScanner.activeScanResult)
+ }
}))
context.subscriptions.push(
@@ -239,20 +253,27 @@ export async function activate (context: vscode.ExtensionContext): Promise
if (parseOnSave !== true) {
return
}
- const exts = ['.bb', '.bbappend', '.inc']
+ const recipeExts = ['.bb', '.bbappend', '.inc']
+ const extsForGlobalEnvScan = ['.conf', '.bbclass']
const { fsPath } = document.uri
- if (exts.includes(path.extname(fsPath))) {
- const foundRecipe = bitBakeProjectScanner.scanResult._recipes.find((recipe) => recipe.name === extractRecipeName(fsPath))
+ if (recipeExts.includes(path.extname(fsPath))) {
+ const foundRecipe = bitBakeProjectScanner.activeScanResult._recipes.find((recipe) => recipe.name === extractRecipeName(fsPath))
if (foundRecipe !== undefined) {
logger.debug(`[onDidSave] Running 'bitbake -e' against the saved recipe: ${foundRecipe.name}`)
- // Note that it pends only one scan at a time. See client/src/driver/BitbakeRecipeScanner.ts.
+ // Note that it pends only one scan at a time. See more details in the command implementation.
// Saving more than 2 files at the same time could cause the server to miss some of the scans.
await vscode.commands.executeCommand('bitbake.scan-recipe-env', document.uri)
return
}
}
- // saving other files or no recipe is resolved
+
+ if (extsForGlobalEnvScan.includes(path.extname(fsPath))) {
+ logger.debug('[onDidSave] Running global environment scan')
+ await vscode.commands.executeCommand('bitbake.scan-global-env')
+ return
+ }
+
await vscode.commands.executeCommand('bitbake.parse-recipes')
})
)
@@ -260,34 +281,14 @@ export async function activate (context: vscode.ExtensionContext): Promise
registerBitbakeCommands(context, bitbakeWorkspace, bitbakeTaskProvider, bitBakeProjectScanner, terminalProvider, client)
registerDevtoolCommands(context, bitbakeWorkspace, bitBakeProjectScanner, client)
- logger.info('Congratulations, your extension "BitBake" is now active!')
-
- // Update the scan result stored in the global state
- bitBakeProjectScanner.onChange.on(BitBakeProjectScanner.EventType.SCAN_COMPLETE, (scanResult: BitbakeScanResult) => {
- void context.workspaceState.update('bitbake.ScanResult', scanResult).then(() => {
- logger.debug('BitBake scan result saved to workspace state')
- })
- void context.workspaceState.update('bitbake.ScanResultVersion', bitBakeProjectScanner.scanResultVersion).then(() => {
- logger.debug('BitBake scan result version saved to workspace state')
- })
- })
-
- const lastBitbakeScanResult: BitbakeScanResult | undefined = context.workspaceState.get('bitbake.ScanResult')
- const lastBitbakeScanResultVersion: number | undefined = context.workspaceState.get('bitbake.ScanResultVersion')
-
- const needToScan = lastBitbakeScanResult === undefined ||
- lastBitbakeScanResultVersion === undefined ||
- lastBitbakeScanResultVersion !== bitBakeProjectScanner.scanResultVersion
-
- if (needToScan) {
- logger.debug('No valid scan result found, scanning the project')
- void vscode.commands.executeCommand('bitbake.rescan-project')
+ // In case we restored a scan from the cache, tell all listeners about it
+ // FIXME it would be better if all UI participants directly read the cache at initialization than refreshing them here
+ if (scanContainsData(bitBakeProjectScanner.activeScanResult)) {
+ bitBakeProjectScanner.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, bitBakeProjectScanner.activeScanResult)
} else {
- logger.debug('Loading previous scan result')
- bitBakeProjectScanner.scanResult = lastBitbakeScanResult
- bitBakeProjectScanner.onChange.emit(BitBakeProjectScanner.EventType.SCAN_COMPLETE, bitBakeProjectScanner.scanResult)
- void client.sendNotification(NotificationMethod.ScanComplete, bitBakeProjectScanner.scanResult)
+ void vscode.commands.executeCommand('bitbake.rescan-project')
}
+ logger.info('Congratulations, your extension "BitBake" is now active!')
}
export function deactivate (): Thenable | undefined {
diff --git a/client/src/language/EmbeddedLanguageDocsManager.ts b/client/src/language/EmbeddedLanguageDocsManager.ts
index 0d406d11..fb5d729a 100644
--- a/client/src/language/EmbeddedLanguageDocsManager.ts
+++ b/client/src/language/EmbeddedLanguageDocsManager.ts
@@ -168,7 +168,7 @@ export default class EmbeddedLanguageDocsManager {
await workspace.fs.writeFile(uri, Buffer.from(embeddedLanguageDoc.content))
await workspace.openTextDocument(uri)
} catch (err) {
- logger.error(`Failed to create embedded document: ${err as any}`)
+ logger.error(`Failed to create embedded document: ${err}`)
}
this.registerEmbeddedLanguageDocInfos(embeddedLanguageDoc, uri)
}
diff --git a/client/src/language/codeActionProvider.ts b/client/src/language/codeActionProvider.ts
index 86d78d38..055a596c 100644
--- a/client/src/language/codeActionProvider.ts
+++ b/client/src/language/codeActionProvider.ts
@@ -13,7 +13,7 @@ import { type EmbeddedLanguageType } from '../lib/src/types/embedded-languages'
import { getIndentationOnLine } from './utils/textDocumentUtils'
export class BitbakeCodeActionProvider implements vscode.CodeActionProvider {
- async provideCodeActions (document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise {
+ async provideCodeActions (document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext): Promise {
const diagnostics = context.diagnostics
const actions = await Promise.all(
diagnostics.map(async (diagnostic) => await buildActionFromDiagnostic(document, diagnostic))
diff --git a/client/src/language/diagnosticsSupport.ts b/client/src/language/diagnosticsSupport.ts
index a235c15b..d2b5c833 100644
--- a/client/src/language/diagnosticsSupport.ts
+++ b/client/src/language/diagnosticsSupport.ts
@@ -97,7 +97,7 @@ export const updateDiagnostics = async (uri: vscode.Uri): Promise => {
export const reviewDiagnostics = async (): Promise => {
logger.debug('[reviewDiagnostics]')
const allDiagnostics = vscode.languages.getDiagnostics()
- await Promise.all(allDiagnostics.map(async ([uri, _diagnostics]): Promise => {
+ await Promise.all(allDiagnostics.map(async ([uri]): Promise => {
// uri might be for an "original document", an "embedded language document", and even something else.
// updateDiagnostics ignores the uris that are not for an "embedded language documents"
await updateDiagnostics(uri)
@@ -176,7 +176,8 @@ const checkIsIgnoredDiagnosticOnAnonymousFunctionFirstLine = async (
): Promise => {
if (
diagnostic.source?.includes('Pylance') === true &&
- (diagnostic as any).hasDiagnosticCode === false && // This weird diagnostic has no code but such a property
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ (diagnostic as any)?.hasDiagnosticCode === false && // This weird diagnostic has no code but such a property
diagnostic.message === '"__anonymous" is not accessed') {
return true
}
diff --git a/client/src/language/middlewareDefinition.ts b/client/src/language/middlewareDefinition.ts
index 18749e75..dbf38fa1 100644
--- a/client/src/language/middlewareDefinition.ts
+++ b/client/src/language/middlewareDefinition.ts
@@ -24,7 +24,7 @@ export const middlewareProvideDefinition: DefinitionMiddleware['provideDefinitio
return
}
const embeddedLanguageDocInfos = embeddedLanguageDocsManager.getEmbeddedLanguageDocInfos(document.uri, embeddedLanguageType)
- logger.debug(`[middlewareProvideDefinition] embeddedLanguageDoc ${embeddedLanguageDocInfos?.uri as any}`)
+ logger.debug(`[middlewareProvideDefinition] embeddedLanguageDoc ${embeddedLanguageDocInfos?.uri}`)
if (embeddedLanguageDocInfos === undefined || embeddedLanguageDocInfos === null) {
return
}
diff --git a/client/src/language/middlewareRename.ts b/client/src/language/middlewareRename.ts
index c4fb7ed6..5d022e19 100644
--- a/client/src/language/middlewareRename.ts
+++ b/client/src/language/middlewareRename.ts
@@ -73,6 +73,7 @@ export const middlewarePrepareRename: RenameMiddleware['prepareRename'] = async
let nextResult: Awaited> | undefined
try {
nextResult = await next(document, position, token)
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (error) {
// pass
}
diff --git a/client/src/lib/src/BitbakeSettings.ts b/client/src/lib/src/BitbakeSettings.ts
index b8a97042..a0b9e962 100644
--- a/client/src/lib/src/BitbakeSettings.ts
+++ b/client/src/lib/src/BitbakeSettings.ts
@@ -12,6 +12,7 @@ export interface BitbakeBuildConfigSettings {
sshTarget?: string
sdkImage?: string
name?: string
+ disableDevtoolDebugBuild?: boolean
}
/// Defines the context of a bitbake workspace with all information to call bitbake
@@ -20,13 +21,13 @@ export interface BitbakeSettings extends BitbakeBuildConfigSettings {
buildConfigurations?: BitbakeBuildConfigSettings[]
}
-export function loadBitbakeSettings (settings: any, workspaceFolder: string): BitbakeSettings {
+export function loadBitbakeSettings (settings: Record, workspaceFolder: string): BitbakeSettings {
// The default values are defined in package.json
// Change the working directory to properly handle relative paths in the language client
try {
process.chdir(workspaceFolder)
- } catch (err: any) {
- console.error('chdir: $settings.{err}')
+ } catch (err) {
+ console.error(`chdir: $settings.${err}`)
}
const variables = {
@@ -35,24 +36,24 @@ export function loadBitbakeSettings (settings: any, workspaceFolder: string): Bi
}
const expandedSettings: BitbakeSettings = {
- ...expandBuildConfig(settings, variables, workspaceFolder),
+ ...expandBuildConfig(settings, variables),
pathToBitbakeFolder: expandSettingPath(settings.pathToBitbakeFolder, variables) ?? workspaceFolder,
- buildConfigurations: expandBuildConfigsSettings(settings.buildConfigurations, variables, workspaceFolder)
+ buildConfigurations: expandBuildConfigsSettings(settings.buildConfigurations, variables)
}
expandedSettings.workingDirectory = expandedSettings.workingDirectory ?? workspaceFolder
return expandedSettings
}
-export function expandSettingPath (configurationPath: string | undefined, variables: NodeJS.Dict): string | undefined {
- if (configurationPath === '' || configurationPath === undefined) {
+export function expandSettingPath (configurationPath: unknown, variables: NodeJS.Dict): string | undefined {
+ if (typeof configurationPath !== 'string' || configurationPath === '' || configurationPath === undefined) {
return undefined
}
return expandSettingString(configurationPath, variables) as string
}
-function expandSettingString (configurationPath: string | undefined, variables: NodeJS.Dict): string | undefined {
- if (configurationPath === '' || configurationPath === undefined) {
+function expandSettingString (configurationPath: unknown, variables: NodeJS.Dict): string | undefined {
+ if (typeof configurationPath !== 'string' || configurationPath === '' || configurationPath === undefined) {
return undefined
}
return sanitizeForShell(substituteVariables(configurationPath, variables)) as string
@@ -67,7 +68,7 @@ function substituteVariables (configuration: string, variables: NodeJS.Dict | undefined, variables: NodeJS.Dict): NodeJS.Dict | undefined {
+function expandStringDict (dict: unknown, variables: NodeJS.Dict): NodeJS.Dict | undefined {
return (dict != null) ? Object.fromEntries(Object.entries(dict).map(([key, value]) => [key, expandSettingString(value, variables) as string])) : undefined
}
@@ -79,18 +80,18 @@ export function sanitizeForShell (command: string | undefined): string | undefin
return command.replace(/[;`&|<>\\$(){}!#*?"']/g, '')
}
-function toStringDict (dict: object | undefined): NodeJS.Dict | undefined {
+function toStringDict (dict: unknown | undefined): NodeJS.Dict | undefined {
return dict as NodeJS.Dict | undefined
}
-function expandBuildConfigsSettings (buildConfigurations: any, variables: NodeJS.Dict, workspaceFolder: string): BitbakeBuildConfigSettings[] | undefined {
- if (buildConfigurations === undefined) {
+function expandBuildConfigsSettings (buildConfigurations: unknown, variables: NodeJS.Dict): BitbakeBuildConfigSettings[] | undefined {
+ if (buildConfigurations === undefined || !Array.isArray(buildConfigurations)) {
return undefined
}
- return buildConfigurations.map((settings: any) => expandBuildConfig(settings, variables, workspaceFolder))
+ return buildConfigurations.map((settings) => expandBuildConfig(settings, variables))
}
-function expandBuildConfig (settings: any, variables: NodeJS.Dict, workspaceFolder: string): BitbakeBuildConfigSettings {
+function expandBuildConfig (settings: Record, variables: NodeJS.Dict): BitbakeBuildConfigSettings {
return {
pathToBuildFolder: expandSettingPath(settings.pathToBuildFolder, variables),
pathToEnvScript: expandSettingPath(settings.pathToEnvScript, variables),
@@ -103,7 +104,7 @@ function expandBuildConfig (settings: any, variables: NodeJS.Dict, works
}
}
-export function getBuildSetting (settings: BitbakeSettings, buildConfiguration: string, property: keyof BitbakeBuildConfigSettings): any {
+export function getBuildSetting (settings: BitbakeSettings, buildConfiguration: string, property: keyof BitbakeBuildConfigSettings): string | NodeJS.Dict | boolean | undefined {
if (settings.buildConfigurations !== undefined) {
const buildConfig = settings.buildConfigurations.find(config => config.name === buildConfiguration)
if (buildConfig !== undefined) {
diff --git a/client/src/lib/src/__tests__/driver/bitbake-settings.test.ts b/client/src/lib/src/__tests__/driver/bitbake-settings.test.ts
index db5fd117..7f9648b0 100644
--- a/client/src/lib/src/__tests__/driver/bitbake-settings.test.ts
+++ b/client/src/lib/src/__tests__/driver/bitbake-settings.test.ts
@@ -14,7 +14,6 @@ describe('BitbakeSettings Tests', () => {
const settings = loadBitbakeSettings({
pathToBitbakeFolder: '',
pathToEnvScript: '',
- // eslint-disable-next-line no-template-curly-in-string
pathToBuildFolder: '${workspaceFolder}/build',
workingDirectory: '',
commandWrapper: ''
@@ -37,7 +36,6 @@ describe('BitbakeSettings Tests', () => {
const settings = loadBitbakeSettings({
pathToBitbakeFolder: '',
pathToEnvScript: '',
- // eslint-disable-next-line no-template-curly-in-string
pathToBuildFolder: '${env:HOME}/build',
workingDirectory: '',
commandWrapper: ''
@@ -46,7 +44,6 @@ describe('BitbakeSettings Tests', () => {
})
it('should resolve environment variable inside shellEnv', () => {
- /* eslint-disable no-template-curly-in-string */
const settings = loadBitbakeSettings({
pathToBitbakeFolder: '',
pathToEnvScript: '',
diff --git a/client/src/lib/src/__tests__/utils/output-logger.test.ts b/client/src/lib/src/__tests__/utils/output-logger.test.ts
index f23497d7..060673e9 100644
--- a/client/src/lib/src/__tests__/utils/output-logger.test.ts
+++ b/client/src/lib/src/__tests__/utils/output-logger.test.ts
@@ -4,15 +4,16 @@
* ------------------------------------------------------------------------------------------ */
import * as vscode from 'vscode'
-import { logger } from '../../utils/OutputLogger'
+import { logger, OutputChannel } from '../../utils/OutputLogger'
jest.mock('vscode')
-const mockChannel = (): jest.Mocked => {
+const mockChannel = (): jest.Mocked => {
const mockOutputChannel = {
appendLine: jest.fn(),
show: jest.fn(),
- clear: jest.fn()
+ clear: jest.fn(),
+ dispose: jest.fn()
}
vscode.window.createOutputChannel = jest.fn().mockImplementation(() => mockOutputChannel)
diff --git a/client/src/lib/src/types/BitbakeScanResult.ts b/client/src/lib/src/types/BitbakeScanResult.ts
index 51b36c89..e6ade4d2 100644
--- a/client/src/lib/src/types/BitbakeScanResult.ts
+++ b/client/src/lib/src/types/BitbakeScanResult.ts
@@ -4,22 +4,26 @@
* ------------------------------------------------------------------------------------------ */
import { type ParsedPath } from 'path'
+
+// Make sure to increment this number when the structure of the scan data changes
+// This will invalidate previous scan data saved for the workspace
+export const SCAN_RESULT_VERSION: number = 3
+
export interface LayerInfo {
name: string
path: string
priority: number
}
-export interface PathInfo extends ParsedPath {}
-
export interface ElementInfo {
name: string
extraInfo?: string
- path?: PathInfo
+ path?: ParsedPath
layerInfo?: LayerInfo
- appends?: PathInfo[]
- overlayes?: PathInfo[]
+ appends?: ParsedPath[]
+ overlayes?: ParsedPath[]
version?: string
+ skipped?: string
}
export interface DevtoolWorkspaceInfo {
@@ -35,6 +39,7 @@ export interface BitbakeScanResult {
_overrides: string[]
_confFiles: ElementInfo[]
_workspaces: DevtoolWorkspaceInfo[]
+ _bitbakeVersion: string
}
export function scanContainsData (scanResult: BitbakeScanResult): boolean {
@@ -45,6 +50,6 @@ export function scanContainsRecipes (scanResult: BitbakeScanResult): boolean {
return scanResult._layers.length > 0 || scanResult._recipes.length > 0
}
-export function pathInfoToString (pathInfo: PathInfo): string {
+export function pathInfoToString (pathInfo: ParsedPath): string {
return `${pathInfo.dir}/${pathInfo.base}`
}
diff --git a/client/src/lib/src/types/requests.ts b/client/src/lib/src/types/requests.ts
index 431aa27a..8c4188d3 100644
--- a/client/src/lib/src/types/requests.ts
+++ b/client/src/lib/src/types/requests.ts
@@ -10,6 +10,7 @@ export enum RequestType {
EmbeddedLanguageTypeOnPosition = 'EmbeddedLanguageTypeOnPosition',
getLinksInDocument = 'getLinksInDocument',
ProcessRecipeScanResults = 'ProcessRecipeScanResults',
+ ProcessGlobalEnvScanResults = 'ProcessGlobalEnvScanResults',
GetVar = 'getVar',
GetRecipeLocalFiles = 'getRecipeLocalFiles'
}
@@ -18,6 +19,7 @@ export const RequestMethod: Record = {
[RequestType.EmbeddedLanguageTypeOnPosition]: 'bitbake/requestEmbeddedLanguageDocInfos',
[RequestType.getLinksInDocument]: 'bitbake/getLinksInDocument',
[RequestType.ProcessRecipeScanResults]: 'bitbake/ProcessRecipeScanResults',
+ [RequestType.ProcessGlobalEnvScanResults]: 'bitbake/ProcessGlobalEnvScanResults',
[RequestType.GetVar]: 'bitbake/getVar',
[RequestType.GetRecipeLocalFiles]: 'bitbake/getRecipeLocalFiles'
}
@@ -25,7 +27,8 @@ export const RequestMethod: Record = {
export interface RequestParams {
[RequestType.EmbeddedLanguageTypeOnPosition]: { uriString: string, position: Position }
[RequestType.getLinksInDocument]: { documentUri: string }
- [RequestType.ProcessRecipeScanResults]: { scanResults: string, uri: any, chosenRecipe: string }
+ [RequestType.ProcessRecipeScanResults]: { scanResults: string, uri: unknown, chosenRecipe: string }
+ [RequestType.ProcessGlobalEnvScanResults]: { scanResults: string }
[RequestType.GetVar]: { variable: string, recipe: string }
[RequestType.GetRecipeLocalFiles]: { uri: string }
}
diff --git a/client/src/lib/src/utils/OutputLogger.ts b/client/src/lib/src/utils/OutputLogger.ts
index 1bc6462a..64bc6774 100644
--- a/client/src/lib/src/utils/OutputLogger.ts
+++ b/client/src/lib/src/utils/OutputLogger.ts
@@ -42,6 +42,38 @@ export class OutputLogger {
this.log(message, 'debug')
}
+ public debug_ratelimit (message: string): void {
+ if (!this.shouldLog(this.level)) {
+ // OPTIM Skip the regex check if the log level is not high enough
+ return
+ }
+
+ if (OutputLogger.rateLimitPatterns.test(message)) {
+ const now = Date.now()
+ if (now - this.rateLimitStart < OutputLogger.rateLimit) {
+ this.rateLimitCount++
+ return
+ }
+ this.rateLimitStart = now
+ if (this.rateLimitCount > 0) {
+ this.debug(`Rate limited ${this.rateLimitCount} messages`)
+ this.rateLimitCount = 0
+ }
+ }
+
+ this.debug(message)
+ }
+
+ /* Catches messages like:
+ * 0: busybox-1.37.0-r0 do_fetch - 6s (pid 280) 7% |######### | 28.7M/s
+ * Parsing recipes: 10% |################ | ETA: 0:00:19
+ * No currently running tasks (0 of 3) 0% | |
+ */
+ private static readonly rateLimitPatterns = /% \|/
+ private static readonly rateLimit = 1000
+ private rateLimitStart = 0
+ private rateLimitCount = 0
+
public warn (message: string): void {
this.log(message, 'warning')
}
diff --git a/client/src/ui/BitbakeCommands.ts b/client/src/ui/BitbakeCommands.ts
index d8dc6877..ef06c134 100644
--- a/client/src/ui/BitbakeCommands.ts
+++ b/client/src/ui/BitbakeCommands.ts
@@ -7,6 +7,7 @@
import * as vscode from 'vscode'
import fs from 'fs'
+import semver from 'semver';
import { logger } from '../lib/src/utils/OutputLogger'
import { type BitbakeWorkspace } from './BitbakeWorkspace'
@@ -16,14 +17,14 @@ import { type BitBakeProjectScanner } from '../driver/BitBakeProjectScanner'
import { extractRecipeName } from '../lib/src/utils/files'
import { runBitbakeTerminal, runBitbakeTerminalCustomCommand } from './BitbakeTerminal'
import { type BitbakeDriver } from '../driver/BitbakeDriver'
-import { sanitizeForShell } from '../lib/src/BitbakeSettings'
+import { BitbakeSettings, sanitizeForShell } from '../lib/src/BitbakeSettings'
import { type BitbakeTaskDefinition, type BitbakeTaskProvider } from './BitbakeTaskProvider'
-import { type DevtoolWorkspaceInfo, type LayerInfo } from '../lib/src/types/BitbakeScanResult'
+import { BitbakeScanResult, type DevtoolWorkspaceInfo, type LayerInfo } from '../lib/src/types/BitbakeScanResult'
import { DevtoolWorkspaceTreeItem } from './DevtoolWorkspacesView'
import * as child_process from 'child_process'
import { clientNotificationManager } from './ClientNotificationManager'
import { bitbakeESDKMode, configureDevtoolSDKFallback, generateCPPProperties } from '../driver/BitbakeESDK'
-import bitbakeRecipeScanner from '../driver/BitbakeRecipeScanner'
+import bitbakeEnvScanner from '../driver/BitbakeEnvScanner'
import { type BitbakeTerminalProfileProvider, openBitbakeTerminalProfile } from './BitbakeTerminalProfile'
import { mergeArraysDistinctly } from '../lib/src/utils/arrays'
import { finishProcessExecution } from '../utils/ProcessUtils'
@@ -39,6 +40,7 @@ export function registerBitbakeCommands (context: vscode.ExtensionContext, bitba
vscode.commands.registerCommand('bitbake.build-recipe', async (uri) => { await buildRecipeCommand(bitbakeWorkspace, bitBakeProjectScanner, uri) }),
vscode.commands.registerCommand('bitbake.clean-recipe', async (uri) => { await cleanRecipeCommand(bitbakeWorkspace, bitBakeProjectScanner, uri) }),
vscode.commands.registerCommand('bitbake.scan-recipe-env', async (uri) => { await scanRecipeCommand(bitbakeWorkspace, bitbakeTaskProvider, bitBakeProjectScanner, uri) }),
+ vscode.commands.registerCommand('bitbake.scan-global-env', async () => { await scanEnvironmentCommand(bitbakeTaskProvider) }),
vscode.commands.registerCommand('bitbake.run-task', async (uri, task) => { await runTaskCommand(bitbakeWorkspace, bitBakeProjectScanner, client, uri, task) }),
vscode.commands.registerCommand('bitbake.drop-recipe', async (uri) => { await dropRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri) }),
vscode.commands.registerCommand('bitbake.drop-all-recipes', async () => { await dropAllRecipes(bitbakeWorkspace) }),
@@ -70,7 +72,7 @@ export function registerBitbakeCommands (context: vscode.ExtensionContext, bitba
)
}
-async function clearAllWorkspaceState (context: vscode.ExtensionContext, key?: string): Promise {
+async function clearAllWorkspaceState (context: vscode.ExtensionContext): Promise {
for (const key of context.workspaceState.keys()) {
await context.workspaceState.update(key, undefined).then(
() => { logger.log(`Cleared state for key: ${key}`) },
@@ -122,13 +124,12 @@ async function parseAllrecipes (bitbakeWorkspace: BitbakeWorkspace, taskProvider
await runBitbakeTask(parseAllRecipesTask, taskProvider)
}
-async function buildRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function buildRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: build-recipe: ${chosenRecipe}`)
await runBitbakeTerminal(
bitBakeProjectScanner.bitbakeDriver,
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
{
recipes: [chosenRecipe]
} as BitbakeTaskDefinition,
@@ -136,13 +137,12 @@ async function buildRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakePr
}
}
-async function cleanRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function cleanRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: clean-recipe: ${chosenRecipe}`)
await runBitbakeTerminal(
bitBakeProjectScanner.bitbakeDriver,
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
{
recipes: [chosenRecipe],
task: 'clean'
@@ -151,7 +151,24 @@ async function cleanRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakePr
}
}
-async function scanRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, taskProvider: BitbakeTaskProvider, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function scanEnvironmentCommand (taskProvider: BitbakeTaskProvider): Promise {
+ logger.debug('Executing command: scan-global-env')
+
+ if (!bitbakeSanity && !(await taskProvider.bitbakeDriver?.checkBitbakeSettingsSanity())) {
+ logger.warn('bitbake settings are not sane, Abort scan')
+ return
+ }
+
+ bitbakeSanity = true
+
+ if (bitbakeESDKMode) {
+ return
+ }
+
+ await bitbakeEnvScanner.scanGlobalEnv(taskProvider)
+}
+
+async function scanRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, taskProvider: BitbakeTaskProvider, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri, false)
if (chosenRecipe === undefined) {
@@ -172,10 +189,10 @@ async function scanRecipeCommand (bitbakeWorkspace: BitbakeWorkspace, taskProvid
return
}
- await bitbakeRecipeScanner.scan(chosenRecipe, taskProvider, uri)
+ await bitbakeEnvScanner.scanRecipeEnv(chosenRecipe, taskProvider, uri)
}
-async function runTaskCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, client: LanguageClient, uri?: any, task?: any): Promise {
+async function runTaskCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, client: LanguageClient, uri?: unknown, task?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
let chosenTask: string | undefined
@@ -187,7 +204,6 @@ async function runTaskCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjec
if (chosenTask !== undefined) {
logger.debug(`Command: run-task: ${chosenRecipe}, ${chosenTask}`)
await runBitbakeTerminal(bitBakeProjectScanner.bitbakeDriver,
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
{
recipes: [chosenRecipe],
task: chosenTask
@@ -249,7 +265,10 @@ async function selectTask (client: LanguageClient, recipe: string): Promise {
+async function selectRecipe (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown, canAdd: boolean = true): Promise {
let chosenRecipe: string | undefined
// A string is provided when the command is called programmatically in tests with an argument
if (typeof uri === 'string') {
@@ -286,7 +305,7 @@ async function selectRecipe (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectS
}
// No recipe is provided when calling the command through the command pallette
if (chosenRecipe === undefined) {
- const devtoolWorkspacesNames = bitBakeProjectScanner.scanResult._workspaces.map((workspace) => workspace.name)
+ const devtoolWorkspacesNames = bitBakeProjectScanner.activeScanResult._workspaces.map((workspace) => workspace.name)
const quickPickItems = mergeArraysDistinctly(
(name) => name,
bitbakeWorkspace.activeRecipes,
@@ -311,7 +330,7 @@ async function addActiveRecipe (bitbakeWorkspace: BitbakeWorkspace, bitBakeProje
return recipe
}
- const recipeNames = bitBakeProjectScanner.scanResult._recipes.map((recipe) => recipe.name)
+ const recipeNames = bitBakeProjectScanner.activeScanResult._recipes.map((recipe) => recipe.name)
let chosenRecipe: string | undefined
if (recipeNames.length !== 0) {
chosenRecipe = await vscode.window.showQuickPick(recipeNames, { placeHolder: 'Select recipe to add' })
@@ -360,11 +379,20 @@ async function rescanProject (bitBakeProjectScanner: BitBakeProjectScanner): Pro
await bitBakeProjectScanner.rescanProject()
}
-async function devtoolModifyCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+// Exported for testing
+export async function addDevtoolDebugBuild(command: string, scanResult: BitbakeScanResult, settings: BitbakeSettings, bitbakeDriver: BitbakeDriver): Promise {
+ if (await checkDevtoolDebugBuildAvailable(scanResult, bitbakeDriver) && !settings.disableDevtoolDebugBuild) {
+ command += ' --debug-build'
+ }
+ return command
+}
+
+async function devtoolModifyCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: devtool-modify: ${chosenRecipe}`)
- const command = `devtool modify ${chosenRecipe}`
+ let command = `devtool modify ${chosenRecipe}`
+ command = await addDevtoolDebugBuild(command, bitBakeProjectScanner.activeScanResult, bitBakeProjectScanner.bitbakeDriver.bitbakeSettings, bitBakeProjectScanner.bitbakeDriver)
const process = await runBitbakeTerminalCustomCommand(bitBakeProjectScanner.bitbakeDriver, command, `Bitbake: Devtool Modify: ${chosenRecipe}`)
process.onExit((event) => {
if (event.exitCode === 0) {
@@ -379,11 +407,11 @@ async function devtoolModifyCommand (bitbakeWorkspace: BitbakeWorkspace, bitBake
}
}
-async function devtoolSDKFallbackCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, languageClient: LanguageClient, uri?: any): Promise {
+async function devtoolSDKFallbackCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, languageClient: LanguageClient, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: devtool-sdk-fallback: ${chosenRecipe}`)
- const workspace = bitBakeProjectScanner.scanResult._workspaces.find((workspace) => workspace.name === chosenRecipe)
+ const workspace = bitBakeProjectScanner.activeScanResult._workspaces.find((workspace) => workspace.name === chosenRecipe)
if (workspace === undefined) throw new Error('Devtool Workspace not found')
const resolvedWorkspace: DevtoolWorkspaceInfo = {
name: workspace.name,
@@ -405,7 +433,7 @@ function showSDKConfigurationDone (recipe: string): void {
})
}
-async function devtoolIdeSDKCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function devtoolIdeSDKCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
const bitbakeDriver = bitBakeProjectScanner.bitbakeDriver
if (chosenRecipe !== undefined) {
@@ -414,7 +442,7 @@ async function devtoolIdeSDKCommand (bitbakeWorkspace: BitbakeWorkspace, bitBake
clientNotificationManager.showSDKConfigurationError()
return
}
- if (!await checkIdeSdkAvailable(bitbakeDriver)) {
+ if (!await checkIdeSdkAvailable(bitBakeProjectScanner.activeScanResult, bitBakeProjectScanner.bitbakeDriver)) {
clientNotificationManager.showSDKUnavailableError(chosenRecipe)
return
}
@@ -425,20 +453,37 @@ async function devtoolIdeSDKCommand (bitbakeWorkspace: BitbakeWorkspace, bitBake
}
}
-async function checkIdeSdkAvailable (bitbakeDriver: BitbakeDriver): Promise {
- const command = "devtool --help | grep 'ide-sdk'"
- const process = runBitbakeTerminalCustomCommand(bitbakeDriver, command, 'Bitbake: Devtool ide-sdk: check')
- const res = await finishProcessExecution(process)
- return res.status === 0
+async function checkIdeSdkAvailable (scanResult: BitbakeScanResult, bitbakeDriver: BitbakeDriver): Promise {
+ if(!bitbakeESDKMode) {
+ // devtool ide-sdk appeared in Yocto version Scarthgap
+ return bitbakeVersionAbove(scanResult, '2.8.0')
+ } else {
+ const command = "devtool --help | grep 'ide-sdk'"
+ const process = runBitbakeTerminalCustomCommand(bitbakeDriver, command, 'Bitbake: Devtool ide-sdk: check')
+ const res = await finishProcessExecution(process)
+ return res.status === 0
+ }
+}
+
+async function checkDevtoolDebugBuildAvailable (scanResult: BitbakeScanResult, bitbakeDriver: BitbakeDriver): Promise {
+ if(!bitbakeESDKMode) {
+ // devtool debug-build appeared in Yocto version Walnascard
+ return bitbakeVersionAbove(scanResult, '2.12.0')
+ } else {
+ const command = "devtool modify --help | grep '\\-\\-debug-build'"
+ const process = runBitbakeTerminalCustomCommand(bitbakeDriver, command, 'Bitbake: Devtool debug-build: check')
+ const res = await finishProcessExecution(process)
+ return res.status === 0
+ }
}
function checkIdeSdkConfiguration (bitbakeDriver: BitbakeDriver): boolean {
- const sdkImage = bitbakeDriver.bitbakeSettings.sdkImage
+ const sdkImage = bitbakeDriver.getBuildConfig('sdkImage')
return sdkImage !== undefined && sdkImage !== ''
}
async function pickLayer (extraOption: string, bitBakeProjectScanner: BitBakeProjectScanner): Promise {
- const layers = bitBakeProjectScanner.scanResult._layers
+ const layers = bitBakeProjectScanner.activeScanResult._layers
const chosenLayer = await vscode.window.showQuickPick([...layers.map(layer => layer.name), extraOption], { placeHolder: 'Choose target BitBake layer' })
if (chosenLayer === undefined) { return }
@@ -449,7 +494,7 @@ async function pickLayer (extraOption: string, bitBakeProjectScanner: BitBakePro
}
}
-async function devtoolUpdateCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function devtoolUpdateCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const originalRecipeChoice = 'Update the original recipe'
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe === undefined) { return }
@@ -489,7 +534,7 @@ async function openDevtoolUpdateBBAppend (res: child_process.SpawnSyncReturns {
+async function devtoolResetCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: devtool-reset: ${chosenRecipe}`)
@@ -505,17 +550,17 @@ async function devtoolResetCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeP
}
}
-async function devtoolOpenWorkspaceCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function devtoolOpenWorkspaceCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe === undefined) { return }
if (bitBakeProjectScanner.bitbakeDriver === undefined) { throw new Error('bitbakeDriver is undefined') }
- if (bitBakeProjectScanner.scanResult._workspaces.find((workspace) => workspace.name === chosenRecipe) === undefined) {
+ if (bitBakeProjectScanner.activeScanResult._workspaces.find((workspace) => workspace.name === chosenRecipe) === undefined) {
await devtoolModifyCommand(bitbakeWorkspace, bitBakeProjectScanner, chosenRecipe)
}
logger.debug(`Command: devtool-open-workspace: ${chosenRecipe}`)
- let workspacePath = bitBakeProjectScanner.scanResult._workspaces.find((workspace) => workspace.name === chosenRecipe)?.path
+ let workspacePath = bitBakeProjectScanner.activeScanResult._workspaces.find((workspace) => workspace.name === chosenRecipe)?.path
workspacePath = await bitBakeProjectScanner.resolveContainerPath(workspacePath)
if (workspacePath === undefined) {
logger.error('Devtool workspace not found')
@@ -524,7 +569,7 @@ async function devtoolOpenWorkspaceCommand (bitbakeWorkspace: BitbakeWorkspace,
await vscode.commands.executeCommand('vscode.openFolder', vscode.Uri.file(workspacePath), { forceNewWindow: true })
}
-async function openRecipeWorkdirCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, client: LanguageClient, uri?: any): Promise {
+async function openRecipeWorkdirCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, client: LanguageClient, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe === undefined) { return }
@@ -547,7 +592,7 @@ async function openRecipeWorkdirCommand (bitbakeWorkspace: BitbakeWorkspace, bit
export let isTaskexpStarted = false
-export async function examineDependenciesTaskexp (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+export async function examineDependenciesTaskexp (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
if (isTaskexpStarted) {
void vscode.window.showInformationMessage('taskexp is already started')
return
@@ -557,7 +602,6 @@ export async function examineDependenciesTaskexp (bitbakeWorkspace: BitbakeWorks
logger.debug(`Command: examine-dependency-taskexp: ${chosenRecipe}`)
isTaskexpStarted = true
const process = await runBitbakeTerminal(bitBakeProjectScanner.bitbakeDriver,
- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
{
specialCommand: `bitbake -g ${chosenRecipe} -u taskexp`
} as BitbakeTaskDefinition,
@@ -571,7 +615,7 @@ export async function examineDependenciesTaskexp (bitbakeWorkspace: BitbakeWorks
}
}
-async function openBitbakeDevshell (terminalProvider: BitbakeTerminalProfileProvider, bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function openBitbakeDevshell (terminalProvider: BitbakeTerminalProfileProvider, bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe === undefined) return
console.log(`Command: recipe-devshell: ${chosenRecipe}`)
@@ -583,7 +627,7 @@ async function openBitbakeDevshell (terminalProvider: BitbakeTerminalProfileProv
return terminal
}
-async function devtoolBuildCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function devtoolBuildCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: devtool-build: ${chosenRecipe}`)
@@ -597,12 +641,12 @@ async function devtoolBuildCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeP
}
}
-async function devtoolDeployCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function devtoolDeployCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
const bitbakeDriver = bitBakeProjectScanner.bitbakeDriver
if (chosenRecipe !== undefined) {
logger.debug(`Command: devtool-deploy: ${chosenRecipe}`)
- const sshTarget = bitbakeDriver.bitbakeSettings.sshTarget
+ const sshTarget = bitbakeDriver.getBuildConfig('sshTarget')
if (sshTarget === undefined || sshTarget === '') {
clientNotificationManager.showSDKConfigurationError()
return
@@ -617,7 +661,7 @@ async function devtoolDeployCommand (bitbakeWorkspace: BitbakeWorkspace, bitBake
}
}
-async function devtoolCleanCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: any): Promise {
+async function devtoolCleanCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeProjectScanner: BitBakeProjectScanner, uri?: unknown): Promise {
const chosenRecipe = await selectRecipe(bitbakeWorkspace, bitBakeProjectScanner, uri)
if (chosenRecipe !== undefined) {
logger.debug(`Command: devtool-clean: ${chosenRecipe}`)
@@ -634,3 +678,7 @@ async function devtoolCleanCommand (bitbakeWorkspace: BitbakeWorkspace, bitBakeP
async function collapseActiveList (): Promise {
await vscode.commands.executeCommand('list.collapseAll')
}
+
+function bitbakeVersionAbove (scanResult: BitbakeScanResult, version: string): boolean {
+ return semver.gt(scanResult._bitbakeVersion, version);
+}
diff --git a/client/src/ui/BitbakeConfigPicker.ts b/client/src/ui/BitbakeConfigPicker.ts
index 571a349b..cfbbba46 100644
--- a/client/src/ui/BitbakeConfigPicker.ts
+++ b/client/src/ui/BitbakeConfigPicker.ts
@@ -6,6 +6,7 @@
import * as vscode from 'vscode'
import { type BitbakeSettings } from '../lib/src/BitbakeSettings'
import assert from 'assert'
+import { logger } from '../lib/src/utils/OutputLogger'
export class BitbakeConfigPicker {
readonly statusBarItem: vscode.StatusBarItem
@@ -22,6 +23,7 @@ export class BitbakeConfigPicker {
this._activeBuildConfiguration = value
this.onActiveConfigChanged.fire(value)
void this.memento?.update('BitbakeConfigPicker.activeBuildConfiguration', value)
+ logger.info(`BitBake buildConfiguration changed to ${value}`)
}
constructor (bitbakeSettings: BitbakeSettings, context: vscode.ExtensionContext) {
@@ -43,6 +45,9 @@ export class BitbakeConfigPicker {
assert(this.bitbakeSettings.buildConfigurations[0].name !== undefined) // Cannot happen with the definition in client/package.json
// No need to update the memento here, the same default choice will be selected next time
this.activeBuildConfiguration = this.bitbakeSettings.buildConfigurations[0].name
+ } else if (this.bitbakeSettings.buildConfigurations.length === 0) {
+ // We want to trigger a change event so that a re-scan is triggered
+ this.activeBuildConfiguration = 'No BitBake configuration'
}
this.statusBarItem.text = '$(list-selection) ' + this.activeBuildConfiguration
this.statusBarItem.show()
diff --git a/client/src/ui/BitbakeRecipesView.ts b/client/src/ui/BitbakeRecipesView.ts
index 4df62dd3..8a69b30b 100644
--- a/client/src/ui/BitbakeRecipesView.ts
+++ b/client/src/ui/BitbakeRecipesView.ts
@@ -5,35 +5,55 @@
import * as vscode from 'vscode'
import { BitbakeWorkspace } from './BitbakeWorkspace'
-import { type ElementInfo, type BitbakeScanResult, type PathInfo, scanContainsData, scanContainsRecipes } from '../lib/src/types/BitbakeScanResult'
+import { type ElementInfo, type BitbakeScanResult, scanContainsRecipes } from '../lib/src/types/BitbakeScanResult'
import path from 'path'
import { BitBakeProjectScanner } from '../driver/BitBakeProjectScanner'
-import { bitbakeESDKMode } from '../driver/BitbakeESDK'
export class BitbakeRecipesView {
private readonly bitbakeTreeProvider: BitbakeTreeDataProvider
+ private view: vscode.TreeView | undefined
constructor (bitbakeWorkspace: BitbakeWorkspace, bitbakeProjectScanner: BitBakeProjectScanner) {
this.bitbakeTreeProvider = new BitbakeTreeDataProvider(bitbakeWorkspace, bitbakeProjectScanner)
}
registerView (context: vscode.ExtensionContext): void {
- const view = vscode.window.createTreeView('bitbakeRecipes', { treeDataProvider: this.bitbakeTreeProvider, showCollapseAll: true })
- context.subscriptions.push(view)
+ this.view = vscode.window.createTreeView('bitbakeRecipes', { treeDataProvider: this.bitbakeTreeProvider, showCollapseAll: true })
+ context.subscriptions.push(this.view)
vscode.window.registerTreeDataProvider('bitbakeRecipes', this.bitbakeTreeProvider)
}
+
+ setTitleConfig(activeConfigName: string): void {
+ if (this.view) {
+ if (activeConfigName.includes("No BitBake configuration")) {
+ this.view.title = 'BitBake recipes';
+ } else {
+ this.view.title = 'BitBake recipes [' + activeConfigName + ']';
+ }
+ }
+ }
}
export class BitbakeRecipeTreeItem extends vscode.TreeItem {
- constructor (public readonly label: string, public readonly collapsibleState: vscode.TreeItemCollapsibleState) {
+ // Explicit that label will be string to the TypeScript compiler
+ public readonly label: string
+
+ constructor (public readonly recipe: ElementInfo | string, public readonly collapsibleState: vscode.TreeItemCollapsibleState) {
+ const label = typeof recipe === 'string' ? recipe : recipe.name
super(label, collapsibleState)
+ this.label = label
this.contextValue = 'bitbakeRecipeCtx'
this.iconPath = new vscode.ThemeIcon('library')
+ if (typeof recipe !== 'string' && recipe?.skipped !== undefined) {
+ this.tooltip = recipe.skipped
+ this.description = recipe.skipped
+ this.iconPath = new vscode.ThemeIcon('warning')
+ }
}
}
class BitbakeFileTreeItem extends BitbakeRecipeTreeItem {
- constructor (public readonly pathInfo: PathInfo, public readonly collapsibleState: vscode.TreeItemCollapsibleState) {
+ constructor (public readonly pathInfo: path.ParsedPath, public readonly collapsibleState: vscode.TreeItemCollapsibleState) {
const resolvedPath = path.resolve(pathInfo.dir + '/' + pathInfo.base)
super(pathInfo.base, collapsibleState)
this.contextValue = 'bitbakeFileCtx'
@@ -51,16 +71,27 @@ class BitbakeTreeDataProvider implements vscode.TreeDataProvider = new vscode.EventEmitter()
readonly onDidChangeTreeData: vscode.Event = this._onDidChangeTreeData.event
private readonly bitbakeProjectScanner: BitBakeProjectScanner
- private bitbakeScanResults: BitbakeScanResult | undefined
+ private bitbakeScanResults: BitbakeScanResult
+ private scanCompletePromise: Promise | undefined
+ private resolveScanCompletePromise: (() => void) | undefined
constructor (bitbakeWorkspace: BitbakeWorkspace, bitbakeProjectScanner: BitBakeProjectScanner) {
this.bitbakeWorkspace = bitbakeWorkspace
this.bitbakeProjectScanner = bitbakeProjectScanner
+ this.bitbakeScanResults = bitbakeProjectScanner.activeScanResult
- bitbakeWorkspace.onChange.on(BitbakeWorkspace.EventType.RECIPE_ADDED, (recipe: string) => {
+ bitbakeWorkspace.onChange.on(BitbakeWorkspace.EventType.RECIPE_ADDED, () => {
+ this._onDidChangeTreeData.fire(undefined)
+ })
+ bitbakeWorkspace.onChange.on(BitbakeWorkspace.EventType.RECIPE_DROPPED, () => {
this._onDidChangeTreeData.fire(undefined)
})
- bitbakeWorkspace.onChange.on(BitbakeWorkspace.EventType.RECIPE_DROPPED, (recipe: string) => {
+ bitbakeProjectScanner.onChange.on(BitBakeProjectScanner.EventType.START_SCAN, () => {
+ if (this.scanCompletePromise === undefined) {
+ this.scanCompletePromise = new Promise((resolve) => {
+ this.resolveScanCompletePromise = resolve
+ })
+ }
this._onDidChangeTreeData.fire(undefined)
})
bitbakeProjectScanner.onChange.on(BitBakeProjectScanner.EventType.SCAN_COMPLETE, (scanResults: BitbakeScanResult) => {
@@ -68,6 +99,10 @@ class BitbakeTreeDataProvider implements vscode.TreeDataProvider {
+ if (this.scanCompletePromise !== undefined) {
+ await this.scanCompletePromise
+ this.scanCompletePromise = undefined
+ }
if (element === undefined) {
const items = this.getBitbakeRecipes()
items.push(this.getAddRecipeItem())
return items
}
- if (bitbakeESDKMode) {
- return []
- }
- while (this.bitbakeScanResults === undefined) {
- await new Promise(resolve => setTimeout(resolve, 300))
- }
const fileItems: BitbakeRecipeTreeItem[] = []
this.bitbakeScanResults._recipes.forEach((recipe: ElementInfo) => {
if (recipe.name === element.label) {
if (recipe.path !== undefined) {
fileItems.push(new BitbakeFileTreeItem(recipe.path, vscode.TreeItemCollapsibleState.None))
}
- recipe.appends?.forEach((append: PathInfo) => {
+ recipe.appends?.forEach((append: path.ParsedPath) => {
fileItems.push(new BitbakeFileTreeItem(append, vscode.TreeItemCollapsibleState.None))
})
- recipe.overlayes?.forEach((append: PathInfo) => {
+ recipe.overlayes?.forEach((append: path.ParsedPath) => {
fileItems.push(new BitbakeFileTreeItem(append, vscode.TreeItemCollapsibleState.None))
})
}
@@ -110,7 +143,7 @@ class BitbakeTreeDataProvider implements vscode.TreeDataProvider()
+ if ((this.bitbakeScanResults?._recipes) != null) {
+ this.bitbakeScanResults._recipes.forEach((recipe: ElementInfo) => {
+ recipeInfoMap.set(recipe.name, recipe)
+ })
+ }
+
return this.bitbakeWorkspace.activeRecipes.map((recipe: string) => {
- return new BitbakeRecipeTreeItem(recipe, vscode.TreeItemCollapsibleState.Collapsed)
+ const recipeInfo = recipeInfoMap.get(recipe)
+ return new BitbakeRecipeTreeItem(recipeInfo ?? recipe, vscode.TreeItemCollapsibleState.Collapsed)
}).sort((a, b) => a.label.localeCompare(b.label))
}
diff --git a/client/src/ui/BitbakeStatusBar.ts b/client/src/ui/BitbakeStatusBar.ts
index c186e441..a79003ce 100644
--- a/client/src/ui/BitbakeStatusBar.ts
+++ b/client/src/ui/BitbakeStatusBar.ts
@@ -8,15 +8,15 @@ import * as vscode from 'vscode'
import { type BitbakeScanResult } from '../lib/src/types/BitbakeScanResult'
import { type BitbakeCustomExecution } from './BitbakeTaskProvider'
import { BitBakeProjectScanner } from '../driver/BitBakeProjectScanner'
-import { BitbakeRecipeScanner } from '../driver/BitbakeRecipeScanner'
+import { BitbakeEnvScanner } from '../driver/BitbakeEnvScanner'
export class BitbakeStatusBar {
- private bitbakeScanResults: BitbakeScanResult = { _layers: [], _classes: [], _includes: [], _recipes: [], _overrides: [], _workspaces: [], _confFiles: [] }
+ private bitbakeScanResults: BitbakeScanResult = { _layers: [], _classes: [], _includes: [], _recipes: [], _overrides: [], _workspaces: [], _confFiles: [], _bitbakeVersion: '' }
private readonly bitbakeProjectScanner: BitBakeProjectScanner
readonly statusBarItem: vscode.StatusBarItem
private scanInProgress = false
private parsingInProgress = false
- private recipeScanInProgress = false
+ private envScanInProgress = false
private commandInProgress: string | undefined
private scanExitCode = 0
@@ -54,8 +54,8 @@ export class BitbakeStatusBar {
if (taskName === 'Bitbake: Parse') {
this.parsingInProgress = true
- } else if (taskName === BitbakeRecipeScanner.taskName) {
- this.recipeScanInProgress = true
+ } else if (taskName === BitbakeEnvScanner.recipeEnvScanTaskName || taskName === BitbakeEnvScanner.globalEnvScanTaskName) {
+ this.envScanInProgress = true
}
this.updateStatusBar()
@@ -70,8 +70,8 @@ export class BitbakeStatusBar {
if (taskName === 'Bitbake: Parse') {
this.parsingInProgress = false
- } else if (taskName === BitbakeRecipeScanner.taskName) {
- this.recipeScanInProgress = false
+ } else if (taskName === BitbakeEnvScanner.recipeEnvScanTaskName || taskName === BitbakeEnvScanner.globalEnvScanTaskName) {
+ this.envScanInProgress = false
}
this.updateStatusBar()
@@ -79,7 +79,7 @@ export class BitbakeStatusBar {
}
updateStatusBar (): void {
- if (this.scanInProgress || this.parsingInProgress || this.recipeScanInProgress) {
+ if (this.scanInProgress || this.parsingInProgress || this.envScanInProgress) {
if (this.scanInProgress) {
this.statusBarItem.text = '$(loading~spin) BitBake: Scanning...'
this.statusBarItem.tooltip = 'BitBake: Scanning...'
diff --git a/client/src/ui/BitbakeTaskProvider.ts b/client/src/ui/BitbakeTaskProvider.ts
index d25dec5a..6d821ebf 100644
--- a/client/src/ui/BitbakeTaskProvider.ts
+++ b/client/src/ui/BitbakeTaskProvider.ts
@@ -31,12 +31,12 @@ export class BitbakeTaskProvider implements vscode.TaskProvider {
this.bitbakeDriver = bitbakeDriver
}
- provideTasks (token: vscode.CancellationToken): vscode.ProviderResult {
+ provideTasks (): vscode.ProviderResult {
return []
}
- resolveTask (task: vscode.Task, token: vscode.CancellationToken): vscode.ProviderResult | undefined {
- const bitbakeTaskDefinition: BitbakeTaskDefinition = task.definition as any
+ resolveTask (task: vscode.Task): vscode.ProviderResult | undefined {
+ const bitbakeTaskDefinition: BitbakeTaskDefinition = task.definition
const canResolveTask = (bitbakeTaskDefinition.recipes?.[0] !== undefined ||
bitbakeTaskDefinition.options?.parseOnly === true ||
@@ -52,7 +52,7 @@ export class BitbakeTaskProvider implements vscode.TaskProvider {
task.scope ?? vscode.TaskScope.Workspace,
task.name,
task.source ?? 'bitbake',
- new BitbakeCustomExecution(async (resolvedDefinition: vscode.TaskDefinition): Promise => {
+ new BitbakeCustomExecution(async (): Promise => {
const pty = new BitbakePseudoTerminal(this.bitbakeDriver);
(resolvedTask.execution as BitbakeCustomExecution).pty = pty
void pty.runProcess(
diff --git a/client/src/ui/BitbakeTerminalLinkProvider.ts b/client/src/ui/BitbakeTerminalLinkProvider.ts
index 402df0f9..dc5a0f77 100644
--- a/client/src/ui/BitbakeTerminalLinkProvider.ts
+++ b/client/src/ui/BitbakeTerminalLinkProvider.ts
@@ -14,7 +14,7 @@ export class BitbakeTerminalLinkProvider implements vscode.TerminalLinkProvider
this.bitBakeProjectScanner = bitBakeProjectScanner
}
- async provideTerminalLinks (context: vscode.TerminalLinkContext, token: vscode.CancellationToken): Promise {
+ async provideTerminalLinks (context: vscode.TerminalLinkContext): Promise {
const links: vscode.TerminalLink[] = []
// We only have additional links to provide if we need to resolve container paths
if (!this.bitBakeProjectScanner.needsContainerPathsResolution()) { return links }
diff --git a/client/src/ui/BitbakeTerminalProfile.ts b/client/src/ui/BitbakeTerminalProfile.ts
index 9757dcc5..cf2dea89 100644
--- a/client/src/ui/BitbakeTerminalProfile.ts
+++ b/client/src/ui/BitbakeTerminalProfile.ts
@@ -15,21 +15,22 @@ export class BitbakeTerminalProfileProvider implements vscode.TerminalProfilePro
this.bitbakeDriver = bitbakeDriver
}
- provideTerminalProfile (token?: vscode.CancellationToken): vscode.ProviderResult {
+ provideTerminalProfile (): vscode.ProviderResult {
// This does not take the lock of bitbakeDriver.bitbakeProcess
// which means pipe errors if using docker containers in parallel to commands.
// However it's also expected an interactive terminal can stay open on the side.
// We can't use BitbakeTerminal either because VSCode won't allow it to be interactive.
const command = this.bitbakeDriver.composeInteractiveCommand()
- const { shell, script } = this.bitbakeDriver.prepareCommand(command)
- logger.info(`Spawning Bitbake terminal with ${shell} -c ${script}`)
+ const { shell, shellEnv, script, workingDirectory } = this.bitbakeDriver.prepareCommand(command)
+ logger.info(`Spawning Bitbake terminal in ${workingDirectory} with ${shell} -c "${script}"`)
return {
options: {
name: script,
shellPath: shell,
shellArgs: ['-c', script],
- env: { ...process.env, ...this.bitbakeDriver.bitbakeSettings.shellEnv },
- cwd: this.bitbakeDriver.bitbakeSettings.workingDirectory,
+ env: shellEnv,
+ strictEnv: true,
+ cwd: workingDirectory,
iconPath: vscode.Uri.file(path.resolve(__dirname, '../../images/yocto-view-icon.svg'))
} satisfies vscode.TerminalOptions
}
diff --git a/client/src/ui/DevtoolWorkspacesView.ts b/client/src/ui/DevtoolWorkspacesView.ts
index 7f2f7621..039ca1b3 100644
--- a/client/src/ui/DevtoolWorkspacesView.ts
+++ b/client/src/ui/DevtoolWorkspacesView.ts
@@ -42,9 +42,6 @@ class DevtoolTreeDataProvider implements vscode.TreeDataProvider {
if (element === undefined) {
- while (this.bitbakeScanResults === undefined) {
- await new Promise(resolve => setTimeout(resolve, 300))
- }
const items = this.getDevtoolWorkspaces()
items.push(this.getAddWorkspaceItem())
return items
diff --git a/client/src/utils/JSONFile.ts b/client/src/utils/JSONFile.ts
index b8ceb5fd..40304dc0 100644
--- a/client/src/utils/JSONFile.ts
+++ b/client/src/utils/JSONFile.ts
@@ -4,45 +4,57 @@
* ------------------------------------------------------------------------------------------ */
import fs from 'fs'
+import { logger } from '../lib/src/utils/OutputLogger'
-export function loadJsonFile (path: string): any {
+export function loadJsonFile (path: string): unknown {
try {
if (!fs.existsSync(path)) {
return {}
}
return JSON.parse(fs.readFileSync(path, 'utf-8'))
- } catch (e: any) {
+ } catch (e) {
throw new Error(`Error while reading JSON file ${path}: ${e}`)
}
}
-export function saveJsonFile (path: string, json: any): void {
+export function saveJsonFile (path: string, json: unknown): void {
fs.writeFileSync(path, JSON.stringify(json, null, 2), 'utf-8')
}
-export function setJsonProperty (json: any, property: string, value: any): any {
- if (value === undefined) {
+export function setJsonProperty (json: unknown, property: string, value: unknown): unknown {
+ if (typeof json !== 'object' || json === null) {
+ logger.warn('[setJsonProperty] json is not an object')
+ return
+ }
+ const typedJson = json as Record
+ if (value === undefined && property in json) {
// We want to make sure undefined workspace properties are kept as undefined
// Warning: this will not work if the property is not a string
- json[property] = ''
+ typedJson[property] = ''
return json
}
- json[property] = value
+ typedJson[property] = value
return json
}
/// Merge tasks with the same label
-export function mergeJsonArray (tasks: any, newTasks: any): any {
+export function mergeJsonArray (tasks: unknown[], newTasks: unknown[]): unknown[] {
for (const newTask of newTasks) {
+ if (typeof newTask !== 'object' || newTask === null || !('label' in newTask)) {
+ tasks.push(newTask)
+ continue
+ }
let found = false
for (const task of tasks) {
+ if (typeof task !== 'object' || task === null || !('label' in task)) {
+ continue
+ }
if (task.label === newTask.label) {
found = true
Object.assign(task, newTask)
for (const key in task) {
if (!(key in newTask)) {
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
- delete task[key]
+ delete (task as Record)[key]
}
}
}
diff --git a/client/src/utils/ProcessUtils.ts b/client/src/utils/ProcessUtils.ts
index 4382a22a..b9919a35 100644
--- a/client/src/utils/ProcessUtils.ts
+++ b/client/src/utils/ProcessUtils.ts
@@ -16,15 +16,20 @@ function importFromVSCode (id: string): NodeRequire {
* Types still need to be imported normally at compile time
*/
try {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
return require(`${vscode.env.appRoot}/node_modules.asar/${id}`)
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (err) {
// ignore
}
try {
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
return require(`${vscode.env.appRoot}/node_modules/${id}`)
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (err) {
// ignore
}
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
return require(id)
}
diff --git a/client/syntaxes/bitbake.tmLanguage.json b/client/syntaxes/bitbake.tmLanguage.json
index 30031dc6..2c9e2094 100644
--- a/client/syntaxes/bitbake.tmLanguage.json
+++ b/client/syntaxes/bitbake.tmLanguage.json
@@ -61,7 +61,7 @@
"include": "#python-keywords"
},
{
- "match": "\\b(python|def)\\b(\\(?)",
+ "match": "(?<=^|^fakeroot +)\\b(python|def)\\b",
"captures": {
"1": {
"name": "storage.type.function.python.bb"
diff --git a/client/test/grammars/snaps/keywords.bb b/client/test/grammars/snaps/keywords.bb
index 85de8717..af358167 100644
--- a/client/test/grammars/snaps/keywords.bb
+++ b/client/test/grammars/snaps/keywords.bb
@@ -26,3 +26,10 @@ inherit_defer foo2
python(){}
+test() {
+ test python
+}
+
+def test() {
+ python = "test"
+}
diff --git a/client/test/grammars/test-cases/functions.bb b/client/test/grammars/test-cases/functions.bb
index 96b5842a..67022a32 100644
--- a/client/test/grammars/test-cases/functions.bb
+++ b/client/test/grammars/test-cases/functions.bb
@@ -25,8 +25,8 @@
> else:
> return "dependency"
->python () {
-#^^^^^^ source.bb storage.type.function.python.bb - entity.name.function.python.bb
+python () {
+#<------ source.bb storage.type.function.python.bb - entity.name.function.python.bb
> if d.getVar('SOMEVAR') == 'value':
# ^^^^^^ source.bb entity.name.function.python.bb
> d.setVar('ANOTHERVAR', 'value2')
diff --git a/client/test/grammars/test-cases/keywords.bb b/client/test/grammars/test-cases/keywords.bb
index 106fd0b5..5a5718e5 100644
--- a/client/test/grammars/test-cases/keywords.bb
+++ b/client/test/grammars/test-cases/keywords.bb
@@ -30,15 +30,25 @@
>INHERIT += "autotools pkgconfig"
#^^^^^^^ source.bb keyword.control.bb
->fakeroot python foo3() {}
-#^^^^^^^^ source.bb keyword.control.bb
-# ^^^^^^ source.bb storage.type.function.python.bb
+fakeroot python foo3() {}
+#<-------- source.bb keyword.control.bb
+# ^^^^^^ source.bb storage.type.function.python.bb
->python (){}
-#^^^^^^ source.bb storage.type.function.python.bb
+python (){}
+#<------ source.bb storage.type.function.python.bb
>inherit_defer foo2
#^^^^^^^^^^^^^ source.bb keyword.control.bb
->python(){}
-#^^^^^^ source.bb storage.type.function.python.bb
\ No newline at end of file
+python(){}
+#<------ source.bb storage.type.function.python.bb
+
+>test() {
+> test python
+# ^^^^^^ source.bb variable.other.names.bb
+>}
+
+>def test() {
+> python = "test"
+# ^^^^^^ source.bb variable.other.names.bb
+>}
\ No newline at end of file
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 00000000..872fb82a
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,45 @@
+import header from "eslint-plugin-header";
+import globals from "globals";
+import pluginJs from "@eslint/js";
+import tseslint from "typescript-eslint";
+
+
+export default [
+ {
+ ignores: [
+ "**/out",
+ "**/poky",
+ "**/.vscode-test",
+ "__mocks__/vscode.ts",
+ "**/jest.config.js",
+ "**/eslint.config.mjs",
+ "integration-tests/project-folder/**",
+ ],
+ },
+ {files: ["**/*.{js,mjs,cjs,ts}"]},
+ {
+ plugins: {
+ header,
+ },
+ languageOptions: { globals: globals.browser },
+ rules: {
+ "header/header": [
+ 2,
+ "block",
+ [
+ " --------------------------------------------------------------------------------------------",
+ {
+ pattern: " \\* Copyright \\(c\\) .*\\. All rights reserved\\.",
+ template:
+ " * Copyright (c) 2023 Savoir-faire Linux. All rights reserved.",
+ },
+ " * Licensed under the MIT License. See License.txt in the project root for license information.",
+ " * ------------------------------------------------------------------------------------------ ",
+ ],
+ 2,
+ ],
+ },
+ },
+ pluginJs.configs.recommended,
+ ...tseslint.configs.recommended,
+];
diff --git a/integration-tests/src/runTest.ts b/integration-tests/src/runTest.ts
index 848c34b3..b6a714c1 100644
--- a/integration-tests/src/runTest.ts
+++ b/integration-tests/src/runTest.ts
@@ -14,7 +14,7 @@ import { pythonVersion, bashVersion } from './utils/version'
async function main (): Promise {
try {
- const vscodeVersion = '1.89.1'
+ const vscodeVersion = '1.96.2'
const vscodeExecutablePath = await downloadAndUnzipVSCode(vscodeVersion)
const [cliPath, ...args] = resolveCliArgsFromVSCodeExecutablePath(vscodeExecutablePath)
diff --git a/integration-tests/src/tests/bitbake-commands.test.ts b/integration-tests/src/tests/bitbake-commands.test.ts
index af2a05aa..f6fb6322 100644
--- a/integration-tests/src/tests/bitbake-commands.test.ts
+++ b/integration-tests/src/tests/bitbake-commands.test.ts
@@ -27,7 +27,7 @@ suite('Bitbake Commands Test Suite', () => {
test('Bitbake can run a task', async () => {
await vscode.commands.executeCommand('bitbake.run-task', 'base-files', 'unpack')
await assertWillComeTrue(async () => {
- const files = await vscode.workspace.findFiles('build/tmp/work/*/base-files/*/issue')
+ const files = await vscode.workspace.findFiles('build/tmp/work/*/base-files/*/sources/issue')
return files.length === 1
})
}).timeout(BITBAKE_TIMEOUT)
diff --git a/integration-tests/src/tests/bitbake-parse.test.ts b/integration-tests/src/tests/bitbake-parse.test.ts
index 4b3f85cf..4bb899ef 100644
--- a/integration-tests/src/tests/bitbake-parse.test.ts
+++ b/integration-tests/src/tests/bitbake-parse.test.ts
@@ -27,7 +27,10 @@ suite('Bitbake Parsing Test Suite', () => {
suiteTeardown(async () => {
try {
await removeRecipe(errorRecipePath, pokyPath)
- } catch (e) {}
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ } catch (e) {
+ // pass
+ }
})
test('Bitbake can detect parsing errors', async () => {
diff --git a/integration-tests/src/tests/command-wrapper.test.ts b/integration-tests/src/tests/command-wrapper.test.ts
index d7de575d..fd278822 100644
--- a/integration-tests/src/tests/command-wrapper.test.ts
+++ b/integration-tests/src/tests/command-wrapper.test.ts
@@ -18,7 +18,6 @@ suite('Bitbake Command Wrapper', () => {
}
suiteSetup(async function (this: Mocha.Context) {
- /* eslint-disable no-template-curly-in-string */
this.timeout(1.5 * BITBAKE_TIMEOUT) // Some additional time for pulling the Docker image
await assertWorkspaceWillBeOpen()
workspaceURI = (vscode.workspace.workspaceFolders as vscode.WorkspaceFolder[])[0].uri
@@ -57,7 +56,7 @@ suite('Bitbake Command Wrapper', () => {
test('Bitbake can run a task inside a crops container', async () => {
await vscode.commands.executeCommand('bitbake.run-task', 'base-files', 'unpack')
await assertWillComeTrue(async () => {
- const files = await vscode.workspace.findFiles('build-crops/tmp/work/*/base-files/*/issue')
+ const files = await vscode.workspace.findFiles('build-crops/tmp/work/*/base-files/*/sources/issue')
return files.length === 1
})
}).timeout(BITBAKE_TIMEOUT)
diff --git a/integration-tests/src/tests/references.test.ts b/integration-tests/src/tests/references.test.ts
index f50fbf61..dc5ef72e 100644
--- a/integration-tests/src/tests/references.test.ts
+++ b/integration-tests/src/tests/references.test.ts
@@ -36,7 +36,7 @@ suite('Bitbake References Test Suite', () => {
)
return referencesResult.length === referenceRanges.length
}, 5000)
- referencesResult.forEach((reference, index) => {
+ referencesResult.forEach((reference) => {
assert.equal(reference.uri.fsPath.includes('workspaceStorage'), false)
assert.equal(reference.uri.fsPath === docUri.fsPath, true)
assert.equal(referenceRanges.some((range) => range.isEqual(reference.range)), true)
diff --git a/integration-tests/src/tests/rename.test.ts b/integration-tests/src/tests/rename.test.ts
index 2971fb1e..da5563e7 100644
--- a/integration-tests/src/tests/rename.test.ts
+++ b/integration-tests/src/tests/rename.test.ts
@@ -69,6 +69,7 @@ suite('Bitbake Rename Test Suite', () => {
docUri,
position
)
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (error) {
// pass
}
diff --git a/integration-tests/src/utils/version.ts b/integration-tests/src/utils/version.ts
index 0df53ea3..30abd56c 100644
--- a/integration-tests/src/utils/version.ts
+++ b/integration-tests/src/utils/version.ts
@@ -4,5 +4,5 @@
* ------------------------------------------------------------------------------------------ */
// Required extension versions
-export const bashVersion = '1.41.0'
-export const pythonVersion = '2024.6.0'
+export const bashVersion = '1.43.0'
+export const pythonVersion = '2024.22.1'
diff --git a/package-lock.json b/package-lock.json
index 5fec393e..5bb23828 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,8526 +1,7296 @@
{
- "name": "yocto-bitbake",
- "version": "2.6.0",
- "lockfileVersion": 3,
- "requires": true,
- "workspaces": [
- "lib"
- ],
- "packages": {
- "": {
- "name": "yocto-bitbake",
- "version": "2.6.0",
- "hasInstallScript": true,
- "license": "MIT",
- "devDependencies": {
- "@types/glob": "^8.1.0",
- "@types/jest": "^29.5.12",
- "@types/mocha": "^10.0.1",
- "@types/node": "^20.14.9",
- "@types/vscode": "^1.75.1",
- "@vscode/test-electron": "^2.4.0",
- "@vscode/vsce": "^2.3.5",
- "eslint": "^8.51.0",
- "eslint-config-standard-with-typescript": "^39.1.1",
- "eslint-plugin-deprecation": "^3.0.0",
- "eslint-plugin-header": "^3.1.1",
- "eslint-plugin-import": "^2.28.1",
- "eslint-plugin-jest": "^28.6.0",
- "eslint-plugin-n": "^16.2.0",
- "eslint-plugin-promise": "^6.1.1",
- "jest": "^29.7.0",
- "mocha": "^10.2.0",
- "ovsx": "^0.9.1",
- "ts-jest": "^29.1.5",
- "typescript": "^5.1.3",
- "vscode-tmgrammar-test": "^0.1.3"
- },
- "engines": {
- "vscode": "^1.75.0"
- }
- },
- "client": {
- "name": "bitbake",
- "version": "1.1.2",
- "extraneous": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "^20.6.2",
- "@types/vscode": "^1.75.1",
- "@vscode/vsce": "^2.3.5",
- "vscode-languageclient": "^8.1.0"
- },
- "devDependencies": {
- "typescript": "^5.2.2",
- "vscode-tmgrammar-test": "^0.1.2"
- },
- "engines": {
- "vscode": "^1.75.0"
- }
- },
- "client/src/lib": {
- "name": "vscode-bitbake-lib",
- "version": "2.4.0",
- "extraneous": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "lib": {
- "name": "vscode-bitbake-lib",
- "version": "1.1.2",
- "extraneous": true,
- "license": "MIT",
- "dependencies": {
- "axios": "^1.6.0"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/@aashutoshrathi/word-wrap": {
- "version": "1.2.6",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@azure/abort-controller": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
- "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@azure/abort-controller/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/core-auth": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz",
- "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==",
- "dev": true,
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-util": "^1.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-auth/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/core-client": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz",
- "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==",
- "dev": true,
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-auth": "^1.4.0",
- "@azure/core-rest-pipeline": "^1.9.1",
- "@azure/core-tracing": "^1.0.0",
- "@azure/core-util": "^1.6.1",
- "@azure/logger": "^1.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-client/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-client/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/core-rest-pipeline": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.1.tgz",
- "integrity": "sha512-ExPSbgjwCoht6kB7B4MeZoBAxcQSIl29r/bPeazZJx50ej4JJCByimLOrZoIsurISNyJQQHf30b3JfqC3Hb88A==",
- "dev": true,
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "@azure/core-auth": "^1.4.0",
- "@azure/core-tracing": "^1.0.1",
- "@azure/core-util": "^1.9.0",
- "@azure/logger": "^1.0.0",
- "http-proxy-agent": "^7.0.0",
- "https-proxy-agent": "^7.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-rest-pipeline/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/core-tracing": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz",
- "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-tracing/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/core-util": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz",
- "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==",
- "dev": true,
- "dependencies": {
- "@azure/abort-controller": "^2.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-util/node_modules/@azure/abort-controller": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz",
- "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/core-util/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/identity": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.3.0.tgz",
- "integrity": "sha512-LHZ58/RsIpIWa4hrrE2YuJ/vzG1Jv9f774RfTTAVDZDriubvJ0/S5u4pnw4akJDlS0TiJb6VMphmVUFsWmgodQ==",
- "dev": true,
- "dependencies": {
- "@azure/abort-controller": "^1.0.0",
- "@azure/core-auth": "^1.5.0",
- "@azure/core-client": "^1.9.2",
- "@azure/core-rest-pipeline": "^1.1.0",
- "@azure/core-tracing": "^1.0.0",
- "@azure/core-util": "^1.3.0",
- "@azure/logger": "^1.0.0",
- "@azure/msal-browser": "^3.11.1",
- "@azure/msal-node": "^2.9.2",
- "events": "^3.0.0",
- "jws": "^4.0.0",
- "open": "^8.0.0",
- "stoppable": "^1.1.0",
- "tslib": "^2.2.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/identity/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/logger": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.1.2.tgz",
- "integrity": "sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@azure/logger/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "dev": true
- },
- "node_modules/@azure/msal-browser": {
- "version": "3.18.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.18.0.tgz",
- "integrity": "sha512-jvK5bDUWbpOaJt2Io/rjcaOVcUzkqkrCme/WntdV1SMUc67AiTcEdKuY6G/nMQ7N5Cfsk9SfpugflQwDku53yg==",
- "dev": true,
- "dependencies": {
- "@azure/msal-common": "14.13.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@azure/msal-common": {
- "version": "14.13.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.13.0.tgz",
- "integrity": "sha512-b4M/tqRzJ4jGU91BiwCsLTqChveUEyFK3qY2wGfZ0zBswIBZjAxopx5CYt5wzZFKuN15HqRDYXQbztttuIC3nA==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@azure/msal-node": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.10.0.tgz",
- "integrity": "sha512-JxsSE0464a8IA/+q5EHKmchwNyUFJHtCH00tSXsLaOddwLjG6yVvTH6lGgPcWMhO7YWUXj/XVgVgeE9kZtsPUQ==",
- "dev": true,
- "dependencies": {
- "@azure/msal-common": "14.13.0",
- "jsonwebtoken": "^9.0.0",
- "uuid": "^8.3.0"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/chalk": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-convert": {
- "version": "1.9.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/code-frame/node_modules/color-name": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/code-frame/node_modules/has-flag": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/code-frame/node_modules/supports-color": {
- "version": "5.5.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.23.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.23.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.0",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/core/node_modules/json5": {
- "version": "2.2.3",
- "dev": true,
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/core/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.23.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.23.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.22.15",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.23.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.23.0",
- "dev": true,
- "license": "MIT",
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.22.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.22.15",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.23.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/globals": {
- "version": "11.12.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.23.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@bcoe/v8-coverage": {
- "version": "0.2.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.8.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
- "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^9.6.0",
- "globals": "^13.19.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/js": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
- "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.14",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
- "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
- "deprecated": "Use @eslint/config-array instead",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^2.0.2",
- "debug": "^4.3.1",
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
- "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
- "deprecated": "Use @eslint/object-schema instead",
- "dev": true
- },
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
- "version": "1.0.10",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "sprintf-js": "~1.0.2"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
- "version": "5.3.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
- "version": "3.14.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@jest/console": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
- "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/core": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
- "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/reporters": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.7.0",
- "jest-config": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-resolve-dependencies": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/environment": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
- "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
- "dev": true,
- "dependencies": {
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
- "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
- "dev": true,
- "dependencies": {
- "expect": "^29.7.0",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/expect-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
- "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
- "dev": true,
- "dependencies": {
- "jest-get-type": "^29.6.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/fake-timers": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
- "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@sinonjs/fake-timers": "^10.0.2",
- "@types/node": "*",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/globals": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
- "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/types": "^29.6.3",
- "jest-mock": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/reporters": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
- "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
- "dev": true,
- "dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^6.0.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "slash": "^3.0.0",
- "string-length": "^4.0.1",
- "strip-ansi": "^6.0.0",
- "v8-to-istanbul": "^9.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/@jest/schemas": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
- "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
- "dev": true,
- "dependencies": {
- "@sinclair/typebox": "^0.27.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/source-map": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
- "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.18",
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.9"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-result": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
- "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/test-sequencer": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
- "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
- "dev": true,
- "dependencies": {
- "@jest/test-result": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/transform": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
- "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/types": "^29.6.3",
- "@jridgewell/trace-mapping": "^0.3.18",
- "babel-plugin-istanbul": "^6.1.1",
- "chalk": "^4.0.0",
- "convert-source-map": "^2.0.0",
- "fast-json-stable-stringify": "^2.1.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "micromatch": "^4.0.4",
- "pirates": "^4.0.4",
- "slash": "^3.0.0",
- "write-file-atomic": "^4.0.2"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jest/types": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
- "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
- "dev": true,
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^17.0.8",
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.20",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@sinclair/typebox": {
- "version": "0.27.8",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sinonjs/commons": {
- "version": "3.0.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/@types/babel__core": {
- "version": "7.20.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "node_modules/@types/babel__generator": {
- "version": "7.6.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__template": {
- "version": "7.4.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "node_modules/@types/babel__traverse": {
- "version": "7.20.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.20.7"
- }
- },
- "node_modules/@types/glob": {
- "version": "8.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/minimatch": "^5.1.2",
- "@types/node": "*"
- }
- },
- "node_modules/@types/graceful-fs": {
- "version": "4.1.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "node_modules/@types/jest": {
- "version": "29.5.12",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz",
- "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==",
- "dev": true,
- "dependencies": {
- "expect": "^29.0.0",
- "pretty-format": "^29.0.0"
- }
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.13",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/minimatch": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/mocha": {
- "version": "10.0.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "20.14.9",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
- "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
- "dev": true,
- "dependencies": {
- "undici-types": "~5.26.4"
- }
- },
- "node_modules/@types/semver": {
- "version": "7.5.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/stack-utils": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/vscode": {
- "version": "1.83.1",
- "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.83.1.tgz",
- "integrity": "sha512-BHu51NaNKOtDf3BOonY3sKFFmZKEpRkzqkZVpSYxowLbs5JqjOQemYFob7Gs5rpxE5tiGhfpnMpcdF/oKrLg4w==",
- "dev": true
- },
- "node_modules/@types/yargs": {
- "version": "17.0.29",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
- },
- "node_modules/@types/yargs-parser": {
- "version": "21.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.7.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.7.5",
- "@typescript-eslint/type-utils": "6.7.5",
- "@typescript-eslint/utils": "6.7.5",
- "@typescript-eslint/visitor-keys": "6.7.5",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.4",
- "natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "6.7.5",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/scope-manager": "6.7.5",
- "@typescript-eslint/types": "6.7.5",
- "@typescript-eslint/typescript-estree": "6.7.5",
- "@typescript-eslint/visitor-keys": "6.7.5",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "6.7.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "6.7.5",
- "@typescript-eslint/visitor-keys": "6.7.5"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "6.7.5",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@typescript-eslint/typescript-estree": "6.7.5",
- "@typescript-eslint/utils": "6.7.5",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "6.7.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.7.5",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "6.7.5",
- "@typescript-eslint/visitor-keys": "6.7.5",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "6.7.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.7.5",
- "@typescript-eslint/types": "6.7.5",
- "@typescript-eslint/typescript-estree": "6.7.5",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.7.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "6.7.5",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
- "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
- },
- "node_modules/@vscode/test-electron": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.0.tgz",
- "integrity": "sha512-yojuDFEjohx6Jb+x949JRNtSn6Wk2FAh4MldLE3ck9cfvCqzwxF32QsNy1T9Oe4oT+ZfFcg0uPUCajJzOmPlTA==",
- "dev": true,
- "dependencies": {
- "http-proxy-agent": "^7.0.2",
- "https-proxy-agent": "^7.0.4",
- "jszip": "^3.10.1",
- "ora": "^7.0.1",
- "semver": "^7.6.2"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@vscode/vsce": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.29.0.tgz",
- "integrity": "sha512-63+aEO8SpjE6qKiIh2Cqy/P9zC7+USElGwpEdkyPp89xIBDBr5IqeNS3zkD3mp3wZqbvHIpJsCCNu74WQirYCg==",
- "dev": true,
- "dependencies": {
- "@azure/identity": "^4.1.0",
- "@vscode/vsce-sign": "^2.0.0",
- "azure-devops-node-api": "^12.5.0",
- "chalk": "^2.4.2",
- "cheerio": "^1.0.0-rc.9",
- "cockatiel": "^3.1.2",
- "commander": "^6.2.1",
- "form-data": "^4.0.0",
- "glob": "^7.0.6",
- "hosted-git-info": "^4.0.2",
- "jsonc-parser": "^3.2.0",
- "leven": "^3.1.0",
- "markdown-it": "^12.3.2",
- "mime": "^1.3.4",
- "minimatch": "^3.0.3",
- "parse-semver": "^1.1.1",
- "read": "^1.0.7",
- "semver": "^7.5.2",
- "tmp": "^0.2.1",
- "typed-rest-client": "^1.8.4",
- "url-join": "^4.0.1",
- "xml2js": "^0.5.0",
- "yauzl": "^2.3.1",
- "yazl": "^2.2.2"
- },
- "bin": {
- "vsce": "vsce"
- },
- "engines": {
- "node": ">= 16"
- },
- "optionalDependencies": {
- "keytar": "^7.7.0"
- }
- },
- "node_modules/@vscode/vsce-sign": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz",
- "integrity": "sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA==",
- "dev": true,
- "hasInstallScript": true,
- "optionalDependencies": {
- "@vscode/vsce-sign-alpine-arm64": "2.0.2",
- "@vscode/vsce-sign-alpine-x64": "2.0.2",
- "@vscode/vsce-sign-darwin-arm64": "2.0.2",
- "@vscode/vsce-sign-darwin-x64": "2.0.2",
- "@vscode/vsce-sign-linux-arm": "2.0.2",
- "@vscode/vsce-sign-linux-arm64": "2.0.2",
- "@vscode/vsce-sign-linux-x64": "2.0.2",
- "@vscode/vsce-sign-win32-arm64": "2.0.2",
- "@vscode/vsce-sign-win32-x64": "2.0.2"
- }
- },
- "node_modules/@vscode/vsce-sign-alpine-arm64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz",
- "integrity": "sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "alpine"
- ]
- },
- "node_modules/@vscode/vsce-sign-alpine-x64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz",
- "integrity": "sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "alpine"
- ]
- },
- "node_modules/@vscode/vsce-sign-darwin-arm64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz",
- "integrity": "sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@vscode/vsce-sign-darwin-x64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz",
- "integrity": "sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@vscode/vsce-sign-linux-arm": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz",
- "integrity": "sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@vscode/vsce-sign-linux-arm64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz",
- "integrity": "sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@vscode/vsce-sign-linux-x64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz",
- "integrity": "sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@vscode/vsce-sign-win32-arm64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz",
- "integrity": "sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@vscode/vsce-sign-win32-x64": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz",
- "integrity": "sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@vscode/vsce/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@vscode/vsce/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@vscode/vsce/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@vscode/vsce/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@vscode/vsce/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/@vscode/vsce/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@vscode/vsce/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/acorn": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz",
- "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
- "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/agent-base": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
- "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
- "dev": true,
- "dependencies": {
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.21.3",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "dev": true,
- "license": "Python-2.0"
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0",
- "get-intrinsic": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
- "is-shared-array-buffer": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
- "dev": true
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/azure-devops-node-api": {
- "version": "12.5.0",
- "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz",
- "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==",
- "dev": true,
- "dependencies": {
- "tunnel": "0.0.6",
- "typed-rest-client": "^1.8.4"
- }
- },
- "node_modules/babel-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
- "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
- "dev": true,
- "dependencies": {
- "@jest/transform": "^29.7.0",
- "@types/babel__core": "^7.1.14",
- "babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.6.3",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.8.0"
- }
- },
- "node_modules/babel-plugin-istanbul": {
- "version": "6.1.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^5.0.4",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
- "version": "5.2.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/babel-plugin-istanbul/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/babel-plugin-jest-hoist": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
- "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.1.14",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/babel-preset-current-node-syntax": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-top-level-await": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/babel-preset-jest": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
- "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
- "dev": true,
- "dependencies": {
- "babel-plugin-jest-hoist": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/bl/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/bottleneck": {
- "version": "2.19.5",
- "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz",
- "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/browserslist": {
- "version": "4.22.1",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.13"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/bs-logger": {
- "version": "0.2.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-json-stable-stringify": "2.x"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/bser": {
- "version": "2.1.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "node-int64": "^0.4.0"
- }
- },
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true,
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "node_modules/buffer-crc32": {
- "version": "0.2.13",
- "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
- "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
- "dev": true
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/builtins": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.0.0"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001551",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/char-regex": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/cheerio": {
- "version": "1.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
- "dev": true,
- "dependencies": {
- "cheerio-select": "^2.1.0",
- "dom-serializer": "^2.0.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "htmlparser2": "^8.0.1",
- "parse5": "^7.0.0",
- "parse5-htmlparser2-tree-adapter": "^7.0.0"
- },
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
- }
- },
- "node_modules/cheerio-select": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
- "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-select": "^5.1.0",
- "css-what": "^6.1.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar/node_modules/glob-parent": {
- "version": "5.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true,
- "optional": true
- },
- "node_modules/ci-info": {
- "version": "3.9.0",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cjs-module-lexer": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/cli-cursor": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
- "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
- "dev": true,
- "dependencies": {
- "restore-cursor": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
- "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/co": {
- "version": "4.6.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
- },
- "node_modules/cockatiel": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.3.tgz",
- "integrity": "sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==",
- "dev": true,
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/collect-v8-coverage": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "dev": true,
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/create-jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
- "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.9",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "prompts": "^2.0.1"
- },
- "bin": {
- "create-jest": "bin/create-jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/dedent": {
- "version": "1.5.1",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "babel-plugin-macros": "^3.1.0"
- },
- "peerDependenciesMeta": {
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
- "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-lazy-prop": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
- "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
- "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/diff": {
- "version": "5.0.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/diff-sequences": {
- "version": "29.6.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doctrine": {
- "version": "3.0.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/eastasianwidth": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.559",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/emittery": {
- "version": "0.13.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/emittery?sponsor=1"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.22.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.1",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has": "^1.0.3",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
- "is-callable": "^1.2.7",
- "is-negative-zero": "^2.0.2",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "is-string": "^1.0.7",
- "is-typed-array": "^1.1.12",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
- "string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.11"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
- "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has": "^1.0.3"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "8.57.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
- "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.57.0",
- "@humanwhocodes/config-array": "^0.11.14",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "@ungap/structured-clone": "^1.2.0",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.3.2",
- "doctrine": "^3.0.0",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "esquery": "^1.4.2",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^6.0.1",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "globals": "^13.19.0",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "is-path-inside": "^3.0.3",
- "js-yaml": "^4.1.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-config-standard": {
- "version": "17.1.0",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "eslint": "^8.0.1",
- "eslint-plugin-import": "^2.25.2",
- "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
- "eslint-plugin-promise": "^6.0.0"
- }
- },
- "node_modules/eslint-config-standard-with-typescript": {
- "version": "39.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/parser": "^6.4.0",
- "eslint-config-standard": "17.1.0"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^6.4.0",
- "eslint": "^8.0.1",
- "eslint-plugin-import": "^2.25.2",
- "eslint-plugin-n": "^15.0.0 || ^16.0.0 ",
- "eslint-plugin-promise": "^6.0.0",
- "typescript": "*"
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.8.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-deprecation": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-3.0.0.tgz",
- "integrity": "sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/utils": "^7.0.0",
- "ts-api-utils": "^1.3.0",
- "tslib": "^2.3.1"
- },
- "peerDependencies": {
- "eslint": "^8.0.0",
- "typescript": "^4.2.4 || ^5.0.0"
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.13.1.tgz",
- "integrity": "sha512-adbXNVEs6GmbzaCpymHQ0MB6E4TqoiVbC0iqG3uijR8ZYfpAXMGttouQzF4Oat3P2GxDVIrg7bMI/P65LiQZdg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.13.1",
- "@typescript-eslint/visitor-keys": "7.13.1"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/types": {
- "version": "7.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.13.1.tgz",
- "integrity": "sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.13.1.tgz",
- "integrity": "sha512-uxNr51CMV7npU1BxZzYjoVz9iyjckBduFBP0S5sLlh1tXYzHzgZ3BR9SVsNed+LmwKrmnqN3Kdl5t7eZ5TS1Yw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.13.1",
- "@typescript-eslint/visitor-keys": "7.13.1",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/utils": {
- "version": "7.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.13.1.tgz",
- "integrity": "sha512-h5MzFBD5a/Gh/fvNdp9pTfqJAbuQC4sCN2WzuXme71lqFJsZtLbjxfSk4r3p02WIArOF9N94pdsLiGutpDbrXQ==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.13.1",
- "@typescript-eslint/types": "7.13.1",
- "@typescript-eslint/typescript-estree": "7.13.1"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.13.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.13.1.tgz",
- "integrity": "sha512-k/Bfne7lrP7hcb7m9zSsgcBmo+8eicqqfNAJ7uUY+jkTFpKeH2FSkWpFRtimBxgkyvqfu9jTPRbYOvud6isdXA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "7.13.1",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/minimatch": {
- "version": "9.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz",
- "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/eslint-plugin-deprecation/node_modules/tslib": {
- "version": "2.6.2",
- "dev": true,
- "license": "0BSD"
- },
- "node_modules/eslint-plugin-es-x": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.1.2",
- "@eslint-community/regexpp": "^4.6.0"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ota-meshi"
- },
- "peerDependencies": {
- "eslint": ">=8"
- }
- },
- "node_modules/eslint-plugin-header": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "eslint": ">=7.7.0"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.28.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.findlastindex": "^1.2.2",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
- "eslint-module-utils": "^2.8.0",
- "has": "^1.0.3",
- "is-core-module": "^2.13.0",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.6",
- "object.groupby": "^1.0.0",
- "object.values": "^1.1.6",
- "semver": "^6.3.1",
- "tsconfig-paths": "^3.14.2"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/semver": {
- "version": "6.3.1",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/eslint-plugin-jest": {
- "version": "28.6.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz",
- "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/utils": "^6.0.0 || ^7.0.0"
- },
- "engines": {
- "node": "^16.10.0 || ^18.12.0 || >=20.0.0"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0",
- "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0",
- "jest": "*"
- },
- "peerDependenciesMeta": {
- "@typescript-eslint/eslint-plugin": {
- "optional": true
- },
- "jest": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-n": {
- "version": "16.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "builtins": "^5.0.1",
- "eslint-plugin-es-x": "^7.1.0",
- "get-tsconfig": "^4.7.0",
- "ignore": "^5.2.4",
- "is-core-module": "^2.12.1",
- "minimatch": "^3.1.2",
- "resolve": "^1.22.2",
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=7.0.0"
- }
- },
- "node_modules/eslint-plugin-promise": {
- "version": "6.1.1",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/eslint-scope": {
- "version": "7.2.2",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint/node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.5.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esquery/node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/events": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
- "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
- "dev": true,
- "engines": {
- "node": ">=0.8.x"
- }
- },
- "node_modules/execa": {
- "version": "5.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/exit": {
- "version": "0.1.2",
- "dev": true,
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/expand-template": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
- "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/expect": {
- "version": "29.7.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/expect-utils": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fb-watchman": {
- "version": "2.0.2",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "bser": "2.1.1"
- }
- },
- "node_modules/fd-slicer": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
- "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "dev": true,
- "dependencies": {
- "pend": "~1.2.0"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^3.0.4"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "dev": true,
- "license": "BSD-3-Clause",
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/flat-cache": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.7",
- "keyv": "^4.5.3",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.7",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/follow-redirects": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
- "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/for-each": {
- "version": "0.3.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.1.3"
- }
- },
- "node_modules/form-data": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
- "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
- "dev": true,
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true,
- "optional": true
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "functions-have-names": "^1.2.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "dev": true,
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-stream": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.7.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/github-from-package": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
- "dev": true,
- "optional": true
- },
- "node_modules/glob": {
- "version": "7.2.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "13.24.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
- "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/globby": {
- "version": "11.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/gopd": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/graphemer": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/has": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
- "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
- "dev": true,
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
- "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "dev": true,
- "license": "MIT",
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
- "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/hosted-git-info/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/hosted-git-info/node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/htmlparser2": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
- "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
- "dev": true,
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "entities": "^4.4.0"
- }
- },
- "node_modules/http-proxy-agent": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
- "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
- "dev": true,
- "dependencies": {
- "agent-base": "^7.1.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz",
- "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==",
- "dev": true,
- "dependencies": {
- "agent-base": "^7.0.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/human-signals": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immediate": {
- "version": "3.0.6",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/import-local": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true,
- "optional": true
- },
- "node_modules/internal-slot": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/is-bigint": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "dependencies": {
- "ci-info": "^2.0.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/is-ci/node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "node_modules/is-core-module": {
- "version": "2.13.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-docker": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
- "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
- "dev": true,
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-fn": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-interactive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
- "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-path-inside": {
- "version": "3.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-regex": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-string": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.12",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.11"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.2.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "6.0.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@babel/core": "^7.12.3",
- "@babel/parser": "^7.14.7",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.2.0",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^4.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/istanbul-reports": {
- "version": "3.1.6",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
- "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/types": "^29.6.3",
- "import-local": "^3.0.2",
- "jest-cli": "^29.7.0"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-changed-files": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
- "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
- "dev": true,
- "dependencies": {
- "execa": "^5.0.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-circus": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
- "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/expect": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "dedent": "^1.0.0",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^29.7.0",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "p-limit": "^3.1.0",
- "pretty-format": "^29.7.0",
- "pure-rand": "^6.0.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-cli": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
- "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "create-jest": "^29.7.0",
- "exit": "^0.1.2",
- "import-local": "^3.0.2",
- "jest-config": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "yargs": "^17.3.1"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
- },
- "peerDependenciesMeta": {
- "node-notifier": {
- "optional": true
- }
- }
- },
- "node_modules/jest-config": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
- "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-jest": "^29.7.0",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-circus": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-runner": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "micromatch": "^4.0.4",
- "parse-json": "^5.2.0",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "peerDependencies": {
- "@types/node": "*",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/jest-diff": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
- "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^29.6.3",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-docblock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
- "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
- "dev": true,
- "dependencies": {
- "detect-newline": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-each": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
- "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "jest-util": "^29.7.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-environment-node": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
- "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-mock": "^29.7.0",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-get-type": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
- "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-haste-map": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
- "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/graceful-fs": "^4.1.3",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.6.3",
- "jest-util": "^29.7.0",
- "jest-worker": "^29.7.0",
- "micromatch": "^4.0.4",
- "walker": "^1.0.8"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "^2.3.2"
- }
- },
- "node_modules/jest-leak-detector": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
- "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
- "dev": true,
- "dependencies": {
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-matcher-utils": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
- "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-message-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
- "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.6.3",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "micromatch": "^4.0.4",
- "pretty-format": "^29.7.0",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-mock": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
- "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "jest-util": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
- "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "peerDependencies": {
- "jest-resolve": "*"
- },
- "peerDependenciesMeta": {
- "jest-resolve": {
- "optional": true
- }
- }
- },
- "node_modules/jest-regex-util": {
- "version": "29.6.3",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
- "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
- "dev": true,
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
- "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.7.0",
- "jest-validate": "^29.7.0",
- "resolve": "^1.20.0",
- "resolve.exports": "^2.0.0",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-resolve-dependencies": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
- "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
- "dev": true,
- "dependencies": {
- "jest-regex-util": "^29.6.3",
- "jest-snapshot": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runner": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
- "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^29.7.0",
- "@jest/environment": "^29.7.0",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "graceful-fs": "^4.2.9",
- "jest-docblock": "^29.7.0",
- "jest-environment-node": "^29.7.0",
- "jest-haste-map": "^29.7.0",
- "jest-leak-detector": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-resolve": "^29.7.0",
- "jest-runtime": "^29.7.0",
- "jest-util": "^29.7.0",
- "jest-watcher": "^29.7.0",
- "jest-worker": "^29.7.0",
- "p-limit": "^3.1.0",
- "source-map-support": "0.5.13"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runtime": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
- "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.7.0",
- "@jest/fake-timers": "^29.7.0",
- "@jest/globals": "^29.7.0",
- "@jest/source-map": "^29.6.3",
- "@jest/test-result": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^1.0.0",
- "collect-v8-coverage": "^1.0.0",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-mock": "^29.7.0",
- "jest-regex-util": "^29.6.3",
- "jest-resolve": "^29.7.0",
- "jest-snapshot": "^29.7.0",
- "jest-util": "^29.7.0",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-runtime/node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-snapshot": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
- "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.11.6",
- "@babel/generator": "^7.7.2",
- "@babel/plugin-syntax-jsx": "^7.7.2",
- "@babel/plugin-syntax-typescript": "^7.7.2",
- "@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.7.0",
- "@jest/transform": "^29.7.0",
- "@jest/types": "^29.6.3",
- "babel-preset-current-node-syntax": "^1.0.0",
- "chalk": "^4.0.0",
- "expect": "^29.7.0",
- "graceful-fs": "^4.2.9",
- "jest-diff": "^29.7.0",
- "jest-get-type": "^29.6.3",
- "jest-matcher-utils": "^29.7.0",
- "jest-message-util": "^29.7.0",
- "jest-util": "^29.7.0",
- "natural-compare": "^1.4.0",
- "pretty-format": "^29.7.0",
- "semver": "^7.5.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-util": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
- "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "ci-info": "^3.2.0",
- "graceful-fs": "^4.2.9",
- "picomatch": "^2.2.3"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-validate": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
- "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^29.6.3",
- "camelcase": "^6.2.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^29.6.3",
- "leven": "^3.1.0",
- "pretty-format": "^29.7.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-watcher": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
- "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
- "dev": true,
- "dependencies": {
- "@jest/test-result": "^29.7.0",
- "@jest/types": "^29.6.3",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "emittery": "^0.13.1",
- "jest-util": "^29.7.0",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker": {
- "version": "29.7.0",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
- "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "jest-util": "^29.7.0",
- "merge-stream": "^2.0.0",
- "supports-color": "^8.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/jest-worker/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/jsonc-parser": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
- "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
- "dev": true
- },
- "node_modules/jsonwebtoken": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
- "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
- "dev": true,
- "dependencies": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^7.5.4"
- },
- "engines": {
- "node": ">=12",
- "npm": ">=6"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dev": true,
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jsonwebtoken/node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dev": true,
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jszip": {
- "version": "3.10.1",
- "dev": true,
- "license": "(MIT OR GPL-3.0-or-later)",
- "dependencies": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/jwa": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
- "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
- "dev": true,
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
- "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
- "dev": true,
- "dependencies": {
- "jwa": "^2.0.0",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/keytar": {
- "version": "7.9.0",
- "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz",
- "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "node-addon-api": "^4.3.0",
- "prebuild-install": "^7.0.1"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lie": {
- "version": "3.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "immediate": "~3.0.5"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/linkify-it": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
- "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
- "dev": true,
- "dependencies": {
- "uc.micro": "^1.0.1"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
- "dev": true
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
- "dev": true
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
- "dev": true
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
- "dev": true
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
- "dev": true
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
- "dev": true
- },
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/make-dir": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/make-error": {
- "version": "1.3.6",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/makeerror": {
- "version": "1.0.12",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "tmpl": "1.0.5"
- }
- },
- "node_modules/markdown-it": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
- "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
- "dev": true,
- "dependencies": {
- "argparse": "^2.0.1",
- "entities": "~2.1.0",
- "linkify-it": "^3.0.1",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
- },
- "bin": {
- "markdown-it": "bin/markdown-it.js"
- }
- },
- "node_modules/markdown-it/node_modules/entities": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
- "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
- "dev": true
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
- "dev": true,
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimatch/node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "dev": true,
- "optional": true
- },
- "node_modules/mocha": {
- "version": "10.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.3",
- "debug": "4.3.4",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.2.0",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "5.0.1",
- "ms": "2.1.3",
- "nanoid": "3.3.3",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "workerpool": "6.2.1",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
- }
- },
- "node_modules/mocha/node_modules/cliui": {
- "version": "7.0.4",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/mocha/node_modules/minimatch": {
- "version": "5.0.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/ms": {
- "version": "2.1.3",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/mocha/node_modules/yargs": {
- "version": "16.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mocha/node_modules/yargs-parser": {
- "version": "20.2.4",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/mute-stream": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
- },
- "node_modules/nanoid": {
- "version": "3.3.3",
- "dev": true,
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-build-utils": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
- "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
- "dev": true,
- "optional": true
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-abi": {
- "version": "3.51.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz",
- "integrity": "sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
- "dev": true,
- "optional": true
- },
- "node_modules/node-int64": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-releases": {
- "version": "2.0.13",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/npm-run-path": {
- "version": "4.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
- "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1"
- }
- },
- "node_modules/object.values": {
- "version": "1.1.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/open": {
- "version": "8.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
- "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
- "dev": true,
- "dependencies": {
- "define-lazy-prop": "^2.0.0",
- "is-docker": "^2.1.1",
- "is-wsl": "^2.2.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@aashutoshrathi/word-wrap": "^1.2.3",
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ora": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz",
- "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==",
- "dev": true,
- "dependencies": {
- "chalk": "^5.3.0",
- "cli-cursor": "^4.0.0",
- "cli-spinners": "^2.9.0",
- "is-interactive": "^2.0.0",
- "is-unicode-supported": "^1.3.0",
- "log-symbols": "^5.1.0",
- "stdin-discarder": "^0.1.0",
- "string-width": "^6.1.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/ora/node_modules/chalk": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
- "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
- "dev": true,
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/ora/node_modules/emoji-regex": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
- "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
- "dev": true
- },
- "node_modules/ora/node_modules/is-unicode-supported": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
- "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora/node_modules/log-symbols": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
- "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
- "dev": true,
- "dependencies": {
- "chalk": "^5.0.0",
- "is-unicode-supported": "^1.1.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora/node_modules/string-width": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz",
- "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==",
- "dev": true,
- "dependencies": {
- "eastasianwidth": "^0.2.0",
- "emoji-regex": "^10.2.1",
- "strip-ansi": "^7.0.1"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora/node_modules/strip-ansi": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
- "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^6.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/ovsx": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.9.1.tgz",
- "integrity": "sha512-faORiHeVdRFXVjvwjGvsGdfw49ocUZwUvjrrObZDzhlkKkrUS8L2afeXF8goeuv1YbTV8lmFfBYAt0C4FaoVuQ==",
- "dev": true,
- "dependencies": {
- "@vscode/vsce": "^2.25.0",
- "commander": "^6.1.0",
- "follow-redirects": "^1.14.6",
- "is-ci": "^2.0.0",
- "leven": "^3.1.0",
- "semver": "^7.6.0",
- "tmp": "^0.2.1"
- },
- "bin": {
- "ovsx": "lib/ovsx"
- },
- "engines": {
- "node": ">= 16"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "dev": true,
- "license": "(MIT AND Zlib)"
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse-semver": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
- "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==",
- "dev": true,
- "dependencies": {
- "semver": "^5.1.0"
- }
- },
- "node_modules/parse-semver/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
- "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
- "dev": true,
- "dependencies": {
- "entities": "^4.4.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/parse5-htmlparser2-tree-adapter": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
- "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
- "dev": true,
- "dependencies": {
- "domhandler": "^5.0.2",
- "parse5": "^7.0.0"
- },
- "funding": {
- "url": "https://github.com/inikulin/parse5?sponsor=1"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pend": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.6",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/find-up": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-dir/node_modules/p-limit": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/prebuild-install": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
- "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "detect-libc": "^2.0.0",
- "expand-template": "^2.0.3",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.3",
- "mkdirp-classic": "^0.5.3",
- "napi-build-utils": "^1.0.1",
- "node-abi": "^3.3.0",
- "pump": "^3.0.0",
- "rc": "^1.2.7",
- "simple-get": "^4.0.0",
- "tar-fs": "^2.0.0",
- "tunnel-agent": "^0.6.0"
- },
- "bin": {
- "prebuild-install": "bin.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/pretty-format": {
- "version": "29.7.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jest/schemas": "^29.6.3",
- "ansi-styles": "^5.0.0",
- "react-is": "^18.0.0"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
- }
- },
- "node_modules/pretty-format/node_modules/ansi-styles": {
- "version": "5.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pure-rand": {
- "version": "6.0.4",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/dubzzz"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fast-check"
- }
- ],
- "license": "MIT"
- },
- "node_modules/qs": {
- "version": "6.12.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.2.tgz",
- "integrity": "sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg==",
- "dev": true,
- "dependencies": {
- "side-channel": "^1.0.6"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/rc/node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-is": {
- "version": "18.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/read": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
- "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
- "dev": true,
- "dependencies": {
- "mute-stream": "~0.0.4"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-cwd/node_modules/resolve-from": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/resolve.exports": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/restore-cursor": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
- "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
- "dev": true,
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "version": "3.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "has-symbols": "^1.0.3",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-array-concat/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-regex-test": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/sax": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
- "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==",
- "dev": true
- },
- "node_modules/semver": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
- "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
- "dev": true,
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "3.0.7",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/simple-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
- "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true
- },
- "node_modules/simple-get": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
- "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "optional": true,
- "dependencies": {
- "decompress-response": "^6.0.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "dev": true,
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.13",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/stack-utils": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/stdin-discarder": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz",
- "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==",
- "dev": true,
- "dependencies": {
- "bl": "^5.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/stdin-discarder/node_modules/bl": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
- "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
- "dev": true,
- "dependencies": {
- "buffer": "^6.0.3",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
- "node_modules/stdin-discarder/node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
- "node_modules/stdin-discarder/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/stoppable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
- "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
- "dev": true,
- "engines": {
- "node": ">=4",
- "npm": ">=6"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.1.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/string-length": {
- "version": "4.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tar-fs": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
- "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar-stream/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/text-table": {
- "version": "0.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/tmp": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
- "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
- "dev": true,
- "dependencies": {
- "rimraf": "^3.0.0"
- },
- "engines": {
- "node": ">=8.17.0"
- }
- },
- "node_modules/tmpl": {
- "version": "1.0.5",
- "dev": true,
- "license": "BSD-3-Clause"
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/ts-api-utils": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
- "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
- "dev": true,
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "typescript": ">=4.2.0"
- }
- },
- "node_modules/ts-jest": {
- "version": "29.1.5",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.5.tgz",
- "integrity": "sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==",
- "dev": true,
- "dependencies": {
- "bs-logger": "0.x",
- "fast-json-stable-stringify": "2.x",
- "jest-util": "^29.0.0",
- "json5": "^2.2.3",
- "lodash.memoize": "4.x",
- "make-error": "1.x",
- "semver": "^7.5.3",
- "yargs-parser": "^21.0.1"
- },
- "bin": {
- "ts-jest": "cli.js"
- },
- "engines": {
- "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
- },
- "peerDependencies": {
- "@babel/core": ">=7.0.0-beta.0 <8",
- "@jest/transform": "^29.0.0",
- "@jest/types": "^29.0.0",
- "babel-jest": "^29.0.0",
- "jest": "^29.0.0",
- "typescript": ">=4.3 <6"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "@jest/transform": {
- "optional": true
- },
- "@jest/types": {
- "optional": true
- },
- "babel-jest": {
- "optional": true
- },
- "esbuild": {
- "optional": true
- }
- }
- },
- "node_modules/ts-jest/node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "3.14.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tunnel": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
- "dev": true,
- "engines": {
- "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
- }
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-rest-client": {
- "version": "1.8.11",
- "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
- "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
- "dev": true,
- "dependencies": {
- "qs": "^6.9.1",
- "tunnel": "0.0.6",
- "underscore": "^1.12.1"
- }
- },
- "node_modules/typescript": {
- "version": "5.2.2",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
- "dev": true
- },
- "node_modules/unbox-primitive": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/underscore": {
- "version": "1.13.6",
- "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
- "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==",
- "dev": true
- },
- "node_modules/undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
- "dev": true
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/v8-to-istanbul": {
- "version": "9.1.3",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.12",
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^2.0.0"
- },
- "engines": {
- "node": ">=10.12.0"
- }
- },
- "node_modules/vscode-oniguruma": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
- "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
- "dev": true
- },
- "node_modules/vscode-textmate": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-7.0.4.tgz",
- "integrity": "sha512-9hJp0xL7HW1Q5OgGe03NACo7yiCTMEk3WU/rtKXUbncLtdg6rVVNJnHwD88UhbIYU2KoxY0Dih0x+kIsmUKn2A==",
- "dev": true
- },
- "node_modules/vscode-tmgrammar-test": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/vscode-tmgrammar-test/-/vscode-tmgrammar-test-0.1.3.tgz",
- "integrity": "sha512-Wg6Pz+ePAT1O+F/A1Fc4wS5vY2X+HNtgN4qMdL+65NLQYd1/zdDWH4fhwsLjX8wTzeXkMy49Cr4ZqWTJ7VnVxg==",
- "dev": true,
- "dependencies": {
- "bottleneck": "^2.19.5",
- "chalk": "^2.4.2",
- "commander": "^9.2.0",
- "diff": "^4.0.2",
- "glob": "^7.1.6",
- "vscode-oniguruma": "^1.5.1",
- "vscode-textmate": "^7.0.1"
- },
- "bin": {
- "vscode-tmgrammar-snap": "dist/snapshot.js",
- "vscode-tmgrammar-test": "dist/unit.js"
- }
- },
- "node_modules/vscode-tmgrammar-test/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/vscode-tmgrammar-test/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/vscode-tmgrammar-test/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/vscode-tmgrammar-test/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/vscode-tmgrammar-test/node_modules/commander": {
- "version": "9.5.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
- "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
- "dev": true,
- "engines": {
- "node": "^12.20.0 || >=14"
- }
- },
- "node_modules/vscode-tmgrammar-test/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/vscode-tmgrammar-test/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/vscode-tmgrammar-test/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/vscode-tmgrammar-test/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/walker": {
- "version": "1.0.8",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "makeerror": "1.0.12"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.0.1",
- "is-boolean-object": "^1.1.0",
- "is-number-object": "^1.0.4",
- "is-string": "^1.0.5",
- "is-symbol": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.11",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/workerpool": {
- "version": "6.2.1",
- "dev": true,
- "license": "Apache-2.0"
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/write-file-atomic": {
- "version": "4.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.7"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/xml2js": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
- "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
- "dev": true,
- "dependencies": {
- "sax": ">=0.6.0",
- "xmlbuilder": "~11.0.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/xmlbuilder": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
- "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
- "dev": true,
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yauzl": {
- "version": "2.10.0",
- "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
- "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "dev": true,
- "dependencies": {
- "buffer-crc32": "~0.2.3",
- "fd-slicer": "~1.1.0"
- }
- },
- "node_modules/yazl": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
- "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
- "dev": true,
- "dependencies": {
- "buffer-crc32": "~0.2.3"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "server": {
- "name": "language-server-bitbake",
- "version": "1.1.2",
- "extraneous": true,
- "license": "MIT",
- "dependencies": {
- "find": "^0.2.7",
- "vscode-languageserver": "^8.1.0",
- "vscode-languageserver-textdocument": "^1.0.8",
- "web-tree-sitter": "^0.20.8",
- "winston": "^2.4.4"
- },
- "devDependencies": {
- "@types/find": "^0.2.2",
- "typescript": "^5.2.2"
- },
- "engines": {
- "node": "*"
- }
- }
- }
+ "name": "yocto-bitbake",
+ "version": "2.8.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "yocto-bitbake",
+ "version": "2.8.0",
+ "hasInstallScript": true,
+ "license": "MIT",
+ "devDependencies": {
+ "@eslint/js": "^9.10.0",
+ "@types/find": "^0.2.4",
+ "@types/glob": "^8.1.0",
+ "@types/jest": "^29.5.14",
+ "@types/mocha": "^10.0.8",
+ "@types/node": "^22.9.0",
+ "@types/vscode": "^1.92.0",
+ "@vscode/test-electron": "^2.4.1",
+ "@vscode/vsce": "^3.2.1",
+ "eslint": "^9.17.0",
+ "eslint-plugin-header": "github:tonyganchev/eslint-plugin-header#36161b3282e088ad2f19657ab0e377651b6886c2",
+ "globals": "^15.14.0",
+ "jest": "^29.7.0",
+ "mocha": "^10.7.3",
+ "ovsx": "^0.9.5",
+ "ts-jest": "^29.2.5",
+ "typescript": "^5.6.2",
+ "typescript-eslint": "^8.19.0",
+ "vscode-tmgrammar-test": "^0.1.3"
+ },
+ "engines": {
+ "vscode": "^1.92.0"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@azure/abort-controller": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-auth": {
+ "version": "1.7.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-util": "^1.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-client": {
+ "version": "1.9.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.9.1",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.6.1",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-client/node_modules/@azure/abort-controller": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline": {
+ "version": "1.16.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "@azure/core-auth": "^1.4.0",
+ "@azure/core-tracing": "^1.0.1",
+ "@azure/core-util": "^1.9.0",
+ "@azure/logger": "^1.0.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-tracing": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-util": {
+ "version": "1.9.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-util/node_modules/@azure/abort-controller": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/identity": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.5.0",
+ "@azure/core-client": "^1.9.2",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^3.11.1",
+ "@azure/msal-node": "^2.9.2",
+ "events": "^3.0.0",
+ "jws": "^4.0.0",
+ "open": "^8.0.0",
+ "stoppable": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/logger": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/msal-browser": {
+ "version": "3.18.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/msal-common": "14.13.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common": {
+ "version": "14.13.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-node": {
+ "version": "2.10.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@azure/msal-common": "14.13.0",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.13",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/highlight": "^7.22.13",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/code-frame/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.23.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.23.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-module-transforms": "^7.23.0",
+ "@babel/helpers": "^7.23.2",
+ "@babel/parser": "^7.23.0",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/json5": {
+ "version": "2.2.3",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.23.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.23.0",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.22.15",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.22.9",
+ "@babel/helper-validator-option": "^7.22.15",
+ "browserslist": "^4.21.9",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.22.20",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.23.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-hoist-variables": {
+ "version": "7.22.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.22.15",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.23.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.22.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-simple-access": {
+ "version": "7.22.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.22.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.22.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.22.15",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.23.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.2",
+ "@babel/types": "^7.23.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.20",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.23.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-async-generators": {
+ "version": "7.8.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-bigint": {
+ "version": "7.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-meta": {
+ "version": "7.10.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.22.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.22.5",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.22.15",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.23.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.23.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz",
+ "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.5",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz",
+ "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.15"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
+ "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.17.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz",
+ "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz",
+ "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz",
+ "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==",
+ "dev": true,
+ "dependencies": {
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
+ "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
+ "dev": true,
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/@isaacs/cliui/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
+ "version": "5.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/console": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/core": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-changed-files": "^29.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/environment": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/expect-utils": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/fake-timers": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/globals": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/reporters": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/source-map": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-result": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/transform": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "babel-plugin-istanbul": "^6.1.1",
+ "chalk": "^4.0.0",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jest/types": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.20",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true
+ },
+ "node_modules/@types/find": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/@types/find/-/find-0.2.4.tgz",
+ "integrity": "sha512-8cw1q8jruVOJoojgx8CimvFC4SP+sevnKOifRJTKXsngeWi/md1womzXRBv/LWNCoDEh4U51zc3r8HUAH2QyEg==",
+ "dev": true
+ },
+ "node_modules/@types/glob": {
+ "version": "8.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/minimatch": "^5.1.2",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/jest": {
+ "version": "29.5.14",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
+ "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
+ "dev": true,
+ "dependencies": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true
+ },
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/mocha": {
+ "version": "10.0.8",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz",
+ "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "22.9.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz",
+ "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~6.19.8"
+ }
+ },
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/vscode": {
+ "version": "1.93.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/yargs": {
+ "version": "17.0.29",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.19.0.tgz",
+ "integrity": "sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.19.0",
+ "@typescript-eslint/type-utils": "8.19.0",
+ "@typescript-eslint/utils": "8.19.0",
+ "@typescript-eslint/visitor-keys": "8.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.19.0.tgz",
+ "integrity": "sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.19.0",
+ "@typescript-eslint/types": "8.19.0",
+ "@typescript-eslint/typescript-estree": "8.19.0",
+ "@typescript-eslint/visitor-keys": "8.19.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.19.0.tgz",
+ "integrity": "sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "8.19.0",
+ "@typescript-eslint/visitor-keys": "8.19.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.19.0.tgz",
+ "integrity": "sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.19.0",
+ "@typescript-eslint/utils": "8.19.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.19.0.tgz",
+ "integrity": "sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.19.0.tgz",
+ "integrity": "sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "8.19.0",
+ "@typescript-eslint/visitor-keys": "8.19.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.19.0.tgz",
+ "integrity": "sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.19.0",
+ "@typescript-eslint/types": "8.19.0",
+ "@typescript-eslint/typescript-estree": "8.19.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.19.0.tgz",
+ "integrity": "sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "8.19.0",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vscode/test-electron": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz",
+ "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==",
+ "dev": true,
+ "dependencies": {
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "jszip": "^3.10.1",
+ "ora": "^7.0.1",
+ "semver": "^7.6.2"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@vscode/vsce": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-3.2.1.tgz",
+ "integrity": "sha512-AY9vBjwExakK1c0cI/3NN2Ey0EgiKLBye/fxl/ue+o4q6RZ7N+xzd1jAD6eI6eBeMVANi617+V2rxIAkDPco2Q==",
+ "dev": true,
+ "dependencies": {
+ "@azure/identity": "^4.1.0",
+ "@vscode/vsce-sign": "^2.0.0",
+ "azure-devops-node-api": "^12.5.0",
+ "chalk": "^2.4.2",
+ "cheerio": "^1.0.0-rc.9",
+ "cockatiel": "^3.1.2",
+ "commander": "^6.2.1",
+ "form-data": "^4.0.0",
+ "glob": "^11.0.0",
+ "hosted-git-info": "^4.0.2",
+ "jsonc-parser": "^3.2.0",
+ "leven": "^3.1.0",
+ "markdown-it": "^14.1.0",
+ "mime": "^1.3.4",
+ "minimatch": "^3.0.3",
+ "parse-semver": "^1.1.1",
+ "read": "^1.0.7",
+ "semver": "^7.5.2",
+ "tmp": "^0.2.3",
+ "typed-rest-client": "^1.8.4",
+ "url-join": "^4.0.1",
+ "xml2js": "^0.5.0",
+ "yauzl": "^2.3.1",
+ "yazl": "^2.2.2"
+ },
+ "bin": {
+ "vsce": "vsce"
+ },
+ "engines": {
+ "node": ">= 20"
+ },
+ "optionalDependencies": {
+ "keytar": "^7.7.0"
+ }
+ },
+ "node_modules/@vscode/vsce-sign": {
+ "version": "2.0.4",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "SEE LICENSE IN LICENSE.txt",
+ "optionalDependencies": {
+ "@vscode/vsce-sign-alpine-arm64": "2.0.2",
+ "@vscode/vsce-sign-alpine-x64": "2.0.2",
+ "@vscode/vsce-sign-darwin-arm64": "2.0.2",
+ "@vscode/vsce-sign-darwin-x64": "2.0.2",
+ "@vscode/vsce-sign-linux-arm": "2.0.2",
+ "@vscode/vsce-sign-linux-arm64": "2.0.2",
+ "@vscode/vsce-sign-linux-x64": "2.0.2",
+ "@vscode/vsce-sign-win32-arm64": "2.0.2",
+ "@vscode/vsce-sign-win32-x64": "2.0.2"
+ }
+ },
+ "node_modules/@vscode/vsce-sign-linux-x64": {
+ "version": "2.0.2",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "SEE LICENSE IN LICENSE.txt",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@vscode/vsce/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@vscode/vsce/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/glob": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz",
+ "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^4.0.1",
+ "minimatch": "^10.0.0",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^2.0.0"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/glob/node_modules/minimatch": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz",
+ "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/azure-devops-node-api": {
+ "version": "12.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "node_modules/babel-jest": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/transform": "^29.7.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.6.3",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
+ }
+ },
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/semver": {
+ "version": "6.3.1",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.8.3",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.8.3",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-top-level-await": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/babel-preset-jest": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/bl/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/bottleneck": {
+ "version": "2.19.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browser-stdout": {
+ "version": "1.3.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/browserslist": {
+ "version": "4.22.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001541",
+ "electron-to-chromium": "^1.4.535",
+ "node-releases": "^2.0.13",
+ "update-browserslist-db": "^1.0.13"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/bs-logger": {
+ "version": "0.2.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-json-stable-stringify": "2.x"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001551",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/cheerio": {
+ "version": "1.0.0-rc.12",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "htmlparser2": "^8.0.1",
+ "parse5": "^7.0.0",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/cheerio-select": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.3",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/ci-info": {
+ "version": "3.9.0",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cjs-module-lexer": {
+ "version": "1.2.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
+ }
+ },
+ "node_modules/cockatiel": {
+ "version": "3.1.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "6.2.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
+ },
+ "bin": {
+ "create-jest": "bin/create-jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-select": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/css-what": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/dedent": {
+ "version": "1.5.1",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
+ },
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.2.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "dev": true,
+ "dependencies": {
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.559",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.17.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz",
+ "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.19.0",
+ "@eslint/core": "^0.9.0",
+ "@eslint/eslintrc": "^3.2.0",
+ "@eslint/js": "9.17.0",
+ "@eslint/plugin-kit": "^0.2.3",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.1",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.2.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-header": {
+ "version": "3.1.1",
+ "resolved": "git+ssh://git@github.com/tonyganchev/eslint-plugin-header.git#36161b3282e088ad2f19657ab0e377651b6886c2",
+ "integrity": "sha512-4HPlYY2Izg5E2hMus5uNEbY4rIneyeqPhPEbZchB07iMJF14n/jjg4u7Rjqg226/fiiCZv3eUE+mbkvQCuZmVQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=7.7.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
+ "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
+ }
+ },
+ "node_modules/exit": {
+ "version": "0.1.2",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "dev": true,
+ "license": "(MIT OR WTFPL)",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz",
+ "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "bser": "2.1.1"
+ }
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat": {
+ "version": "5.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "bin": {
+ "flat": "cli.js"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.6",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/foreground-child/node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-package-type": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "15.14.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz",
+ "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==",
+ "dev": true,
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/he": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "he": "bin/he"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/lru-cache": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/hosted-git-info/node_modules/yallist": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/htmlparser2": {
+ "version": "8.0.2",
+ "dev": true,
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "entities": "^4.4.0"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-local": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pkg-dir": "^4.2.0",
+ "resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "dev": true,
+ "license": "ISC",
+ "optional": true
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-ci": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ci-info": "^2.0.0"
+ },
+ "bin": {
+ "is-ci": "bin.js"
+ }
+ },
+ "node_modules/is-ci/node_modules/ci-info": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-fn": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-obj": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.6",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
+ "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
+ "dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/jake": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
+ "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
+ "dev": true,
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "import-local": "^3.0.2",
+ "jest-cli": "^29.7.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-changed-files": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^5.0.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^1.0.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-environment-node": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-get-type": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-haste-map": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
+ "@types/node": "*",
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-leak-detector": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-matcher-utils": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
+ "@types/stack-utils": "^2.0.0",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-pnp-resolver": "^1.2.2",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runner": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "cjs-module-lexer": "^1.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime/node_modules/strip-bom": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-snapshot": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0",
+ "chalk": "^4.0.0",
+ "expect": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "natural-compare": "^1.4.0",
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "camelcase": "^6.2.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^29.6.3",
+ "leven": "^3.1.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.0.0",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
+ "string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "jest-util": "^29.7.0",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jwa": {
+ "version": "1.4.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jws": {
+ "version": "3.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jszip": {
+ "version": "3.10.1",
+ "dev": true,
+ "license": "(MIT OR GPL-3.0-or-later)",
+ "dependencies": {
+ "lie": "~3.3.0",
+ "pako": "~1.0.2",
+ "readable-stream": "~2.3.6",
+ "setimmediate": "^1.0.5"
+ }
+ },
+ "node_modules/jwa": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/keytar": {
+ "version": "7.9.0",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "node-addon-api": "^4.3.0",
+ "prebuild-install": "^7.0.1"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/kleur": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lie": {
+ "version": "3.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "dev": true,
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.includes": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isboolean": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isinteger": {
+ "version": "4.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isnumber": {
+ "version": "3.0.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isplainobject": {
+ "version": "4.0.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.isstring": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.once": {
+ "version": "4.1.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tmpl": "1.0.5"
+ }
+ },
+ "node_modules/markdown-it": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "dev": true
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime": {
+ "version": "1.6.0",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimatch/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/mocha": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz",
+ "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.3",
+ "browser-stdout": "^1.3.1",
+ "chokidar": "^3.5.3",
+ "debug": "^4.3.5",
+ "diff": "^5.2.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-up": "^5.0.0",
+ "glob": "^8.1.0",
+ "he": "^1.2.0",
+ "js-yaml": "^4.1.0",
+ "log-symbols": "^4.1.0",
+ "minimatch": "^5.1.6",
+ "ms": "^2.1.3",
+ "serialize-javascript": "^6.0.2",
+ "strip-json-comments": "^3.1.1",
+ "supports-color": "^8.1.1",
+ "workerpool": "^6.5.1",
+ "yargs": "^16.2.0",
+ "yargs-parser": "^20.2.9",
+ "yargs-unparser": "^2.0.0"
+ },
+ "bin": {
+ "_mocha": "bin/_mocha",
+ "mocha": "bin/mocha.js"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/cliui": {
+ "version": "7.0.4",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/mocha/node_modules/glob": {
+ "version": "8.1.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/mocha/node_modules/minimatch": {
+ "version": "5.1.6",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/ms": {
+ "version": "2.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mocha/node_modules/supports-color": {
+ "version": "8.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs": {
+ "version": "16.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mocha/node_modules/yargs-parser": {
+ "version": "20.2.9",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.8",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/napi-build-utils": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-abi": {
+ "version": "3.51.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "4.3.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.13",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/ora": {
+ "version": "7.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.3.0",
+ "cli-cursor": "^4.0.0",
+ "cli-spinners": "^2.9.0",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^1.3.0",
+ "log-symbols": "^5.1.0",
+ "stdin-discarder": "^0.1.0",
+ "string-width": "^6.1.0",
+ "strip-ansi": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/chalk": {
+ "version": "5.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/ora/node_modules/emoji-regex": {
+ "version": "10.3.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/ora/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/log-symbols": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^5.0.0",
+ "is-unicode-supported": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/string-width": {
+ "version": "6.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^10.2.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/ovsx": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/ovsx/-/ovsx-0.9.5.tgz",
+ "integrity": "sha512-x8jaFQAA+KLxZ9HAQ8ZBbBxNsrrjjpEnVihfOhb/iuXWCso1n2oKaDJuLbA9O5FtBgtGCy0n23PKf728kOmX8g==",
+ "dev": true,
+ "dependencies": {
+ "@vscode/vsce": "^3.1.0",
+ "commander": "^6.2.1",
+ "follow-redirects": "^1.14.6",
+ "is-ci": "^2.0.0",
+ "leven": "^3.1.0",
+ "semver": "^7.6.0",
+ "tmp": "^0.2.3"
+ },
+ "bin": {
+ "ovsx": "lib/ovsx"
+ },
+ "engines": {
+ "node": ">= 20"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
+ "node_modules/pako": {
+ "version": "1.0.11",
+ "dev": true,
+ "license": "(MIT AND Zlib)"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-semver": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^5.1.0"
+ }
+ },
+ "node_modules/parse-semver/node_modules/semver": {
+ "version": "5.7.2",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.1.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "domhandler": "^5.0.2",
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz",
+ "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^11.0.0",
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": "20 || >=22"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz",
+ "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==",
+ "dev": true,
+ "engines": {
+ "node": "20 || >=22"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pkg-dir": {
+ "version": "4.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/prebuild-install": {
+ "version": "7.1.1",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "kleur": "^3.0.3",
+ "sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.0.4",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/qs": {
+ "version": "6.12.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "dev": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "optional": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/rc/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "18.2.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/read": {
+ "version": "1.0.7",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "mute-stream": "~0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readable-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-cwd": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve.exports": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/sax": {
+ "version": "1.3.0",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/setimmediate": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/simple-concat": {
+ "version": "1.0.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/simple-get": {
+ "version": "4.0.1",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "escape-string-regexp": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/stdin-discarder": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stdin-discarder/node_modules/bl": {
+ "version": "5.1.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/stdin-discarder/node_modules/buffer": {
+ "version": "6.0.3",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "node_modules/stdin-discarder/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/stoppable": {
+ "version": "1.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "char-regex": "^1.0.2",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-final-newline": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "2.1.1",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tar-stream/node_modules/readable-stream": {
+ "version": "3.6.2",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-jest": {
+ "version": "29.2.5",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.5.tgz",
+ "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==",
+ "dev": true,
+ "dependencies": {
+ "bs-logger": "^0.2.6",
+ "ejs": "^3.1.10",
+ "fast-json-stable-stringify": "^2.1.0",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "^4.1.2",
+ "make-error": "^1.3.6",
+ "semver": "^7.6.3",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "ts-jest": "cli.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.0.0-beta.0 <8",
+ "@jest/transform": "^29.0.0",
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.3 <6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "@jest/transform": {
+ "optional": true
+ },
+ "@jest/types": {
+ "optional": true
+ },
+ "babel-jest": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ts-jest/node_modules/json5": {
+ "version": "2.2.3",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.7.0",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/typed-rest-client": {
+ "version": "1.8.11",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
+ "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/typescript-eslint": {
+ "version": "8.19.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.19.0.tgz",
+ "integrity": "sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.19.0",
+ "@typescript-eslint/parser": "8.19.0",
+ "@typescript-eslint/utils": "8.19.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.8.0"
+ }
+ },
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "dev": true
+ },
+ "node_modules/underscore": {
+ "version": "1.13.6",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.13",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "4.0.1",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.1.3",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/vscode-oniguruma": {
+ "version": "1.7.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-textmate": {
+ "version": "7.0.4",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-tmgrammar-test": {
+ "version": "0.1.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bottleneck": "^2.19.5",
+ "chalk": "^2.4.2",
+ "commander": "^9.2.0",
+ "diff": "^4.0.2",
+ "glob": "^7.1.6",
+ "vscode-oniguruma": "^1.5.1",
+ "vscode-textmate": "^7.0.1"
+ },
+ "bin": {
+ "vscode-tmgrammar-snap": "dist/snapshot.js",
+ "vscode-tmgrammar-test": "dist/unit.js"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/chalk": {
+ "version": "2.4.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/color-convert": {
+ "version": "1.9.3",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/color-name": {
+ "version": "1.1.3",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/commander": {
+ "version": "9.5.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || >=14"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/diff": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/has-flag": {
+ "version": "3.0.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/vscode-tmgrammar-test/node_modules/supports-color": {
+ "version": "5.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "makeerror": "1.0.12"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/workerpool": {
+ "version": "6.5.1",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
+ },
+ "node_modules/xml2js": {
+ "version": "0.5.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "11.0.1",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-unparser": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yazl": {
+ "version": "2.5.1",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
}
diff --git a/package.json b/package.json
index e514bb73..e0beacc7 100644
--- a/package.json
+++ b/package.json
@@ -1,923 +1,934 @@
{
- "name": "yocto-bitbake",
- "displayName": "Yocto Project BitBake",
- "description": "Extended Yocto Project and BitBake language support",
- "author": {
- "name": "Savoir-faire Linux",
- "email": "contact@savoirfairelinux.com",
- "url": "https://www.savoirfairelinux.com/"
- },
- "contributors": [
- "Eugen Wiens"
- ],
- "license": "MIT",
- "version": "2.6.0",
- "publisher": "yocto-project",
- "icon": "./client/images/icon.png",
- "bugs": {
- "url": "https://github.com/yoctoproject/vscode-bitbake/issues"
- },
- "homepage": "https://github.com/yoctoproject/vscode-bitbake",
- "repository": {
- "type": "git",
- "url": "https://github.com/yoctoproject/vscode-bitbake.git"
- },
- "engines": {
- "vscode": "^1.75.0"
- },
- "categories": [
- "Programming Languages"
- ],
- "activationEvents": [
- "workspaceContains:**/bblayers.conf",
- "workspaceContains:**/*.bb"
- ],
- "main": "./client/out/extension",
- "browser": "./client/out/extension-web",
- "contributes": {
- "languages": [
- {
- "id": "bitbake",
- "aliases": [
- "BitBake",
- "bitbake"
- ],
- "extensions": [
- ".bb",
- ".bbappend",
- ".bbclass"
- ],
- "configuration": "./client/language-configuration.json",
- "icon": {
- "dark": "./client/images/yocto-file-icon.svg",
- "light": "./client/images/yocto-file-icon.svg"
- }
- }
- ],
- "grammars": [
- {
- "language": "bitbake",
- "scopeName": "source.bb",
- "path": "./client/syntaxes/bitbake.tmLanguage.json"
- }
- ],
- "semanticTokenScopes": [
- {
- "language": "bitbake",
- "scopes": {
- "operator.readonly": [
- "keyword.other.bitbake-operator.bb"
- ]
- }
- }
- ],
- "configuration": {
- "type": "object",
- "title": "BitBake",
- "properties": {
- "bitbake.loggingLevel": {
- "type": "string",
- "enum": [
- "error",
- "info",
- "debug"
- ],
- "default": "error",
- "markdownDescription": "Adjust the logging level: `error` for reporting only errors, `info` for displaying information useful to the user, and `debug` for the same information as `info,` but with additional debugging details."
- },
- "bitbake.parseOnSave": {
- "type": "boolean",
- "default": true,
- "description": "Activate parsing on save. When a recipe is saved, bitbake will automatically be run to parse it."
- },
- "bitbake.eSDKMode": {
- "type": "boolean",
- "default": false,
- "deprecationMessage": "eSDK mode is now automatically detected. This setting is deprecated and will be removed in a future release.",
- "markdownDescription": "Activate eSDK only mode. This tells the extension that devtool is available but not bitbake, which will disable unavailable features. You should point the `bitbake.pathToEnvScript` setting to the environment script of the eSDK."
- },
- "bitbake.pathToEnvScript": {
- "type": "string",
- "examples": [
- "${workspaceFolder}/sources/poky/oe-init-build-env"
- ],
- "markdownDescription": "Set the path to the environment script to configure the BitBake project. _(Optional)_, see the commandWrapper setting.\n\nExample: `${workspaceFolder}/sources/poky/oe-init-build-env`"
- },
- "bitbake.pathToBuildFolder": {
- "type": "string",
- "examples": [
- "${workspaceFolder}/build"
- ],
- "description": "Set the build folder for the BitBake project. _(Optional)_, see the commandWrapper setting.\n\nExample: '${workspaceFolder}/build'"
- },
- "bitbake.pathToBitbakeFolder": {
- "type": "string",
- "default": "${workspaceFolder}/sources/poky/bitbake",
- "description": "Set the path to the BitBake folder. Used to provide Python embedded language features."
- },
- "bitbake.commandWrapper": {
- "type": "string",
- "examples": [
- "docker run --rm -v ${workspaceFolder}:${workspaceFolder} crops/poky --workdir=${workspaceFolder} /bin/bash -c",
- "kas shell -c",
- "cqfd run",
- "${workspaceFolder}/build.sh --"
- ],
- "markdownDescription": "An optional build tool command to wrap around BitBake commands.\n\nVarious tools provide ways to automatically configure the BitBake environment, or even call it inside containers. This option allows you to use them through this extension by wrapping around the bitbake invocation.\n\nThe resulting commands generated by this extension will be for example:\n\n `$ 'bitbake core-image-minimal'`\n\n `$ '. && bitbake core-image-minimal'`\n\nSee examples:\n\n`docker run --rm -v ${workspaceFolder}:${workspaceFolder} crops/poky --workdir=${workspaceFolder} /bin/bash -c`\n\n`kas shell -c`\n\n`cqfd run`\n\n`${workspaceFolder}/build.sh --`\n\nNote: Relative paths must be relative to the workingDirectory folder, where the command will be run."
- },
- "bitbake.workingDirectory": {
- "type": "string",
- "default": "${workspaceFolder}",
- "description": "Set the working directory for running BitBake command."
- },
- "bitbake.shellEnv": {
- "type": "object",
- "default": {},
- "description": "Environment variables to set before running the BitBake command.",
- "examples": [
- {
- "BB_ENV_PASSTHROUGH": "SSTATE_DIR",
- "SSTATE_DIR": "/mnt/yocto-sstate-cache"
- }
- ]
- },
- "bitbake.sshTarget": {
- "type": "string",
- "markdownDescription": "Hostname or IP address of the SSH target for deploying recipes or SDK builds to a remote target. _(Optional)_\n\nExample: `root@192.168.0.50`\n\nAdditional SSH options must be defined through your SSH configuration file (`~/.ssh/config`).",
- "examples": [
- "root@192.168.0.50"
- ]
- },
- "bitbake.sdkImage": {
- "type": "string",
- "markdownDescription": "SDK image to use for cross-compilation and debugging.\n\nExample: `core-image-minimal`",
- "examples": "core-image-minimal"
- },
- "bitbake.disableEmbeddedLanguagesFiles": {
- "type": "boolean",
- "markdownDescription": "Disables temporary files generated for BitBake's embedded languages. This action will turn off most features within Shell and Python regions of BitBake code. This is intended for users who don't want temporary files to be saved on their drive, or do not want to see the diagnostics of these temporary files polluting their 'PROBLEMS' tab. Please note a reload of VS Code might be required after activating or deactivating this setting for the full change to take effect.",
- "default": false
- },
- "bitbake.buildConfigurations": {
- "type": "array",
- "description": "Array of alternative configurations for starting bitbake. It can be useful to handle multiple build folders for multiple targets (MACHINE configurations). If an option is not defined, the value from the main configuration will be used.",
- "items": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string",
- "markdownDescription": "Name of the configuration."
- },
- "pathToEnvScript": {
- "type": "string",
- "markdownDescription": "Sub-configuration specific setting to replace the main `pathToEnvScript`. See the `bitbake.pathToEnvScript` setting."
- },
- "pathToBuildFolder": {
- "type": "string",
- "markdownDescription": "Sub-configuration specific setting to replace the main `pathToBuildFolder`. See the `bitbake.pathToBuildFolder` setting."
- },
- "commandWrapper": {
- "type": "string",
- "markdownDescription": "Sub-configuration specific setting to replace the main `commandWrapper`. See the `bitbake.commandWrapper` setting."
- },
- "workingDirectory": {
- "type": "string",
- "markdownDescription": "Sub-configuration specific setting to replace the main `workingDirectory`. See the `bitbake.workingDirectory` setting."
- },
- "shellEnv": {
- "type": "object",
- "markdownDescription": "Sub-configuration specific setting to replace the main `shellEnv`. See the `bitbake.shellEnv` setting."
- },
- "sshTarget": {
- "type": "string",
- "markdownDescription": "Sub-configuration specific setting to replace the main `sshTarget`. See the `bitbake.sshTarget` setting."
- },
- "sdkImage": {
- "type": "string",
- "markdownDescription": "Sub-configuration specific setting to replace the main `sdkImage`. See the `bitbake.sdkImage` setting."
- }
- },
- "required": [
- "name"
- ]
- }
- },
- "bitbake.disableConfigModification":{
- "type": "boolean",
- "default": false,
- "description": "Turn on this setting to stop this extension from modifying the VS Code configuration of the workspace. Note that this will also disable some features related to embedded Python and Shell code."
- }
- }
- },
- "configurationDefaults": {
- "[shellscript]": {
- "files.trimTrailingWhitespace": false
- },
- "[python]": {
- "files.trimTrailingWhitespace": false
- }
- },
- "taskDefinitions": [
- {
- "type": "bitbake",
- "properties": {
- "recipes": {
- "description": "Bitbake recipe(s)",
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "task": {
- "type": "string",
- "description": "Bitbake task to run (build by default)"
- },
- "options": {
- "type": "object",
- "description": "Additional options to pass to the bitbake command",
- "properties": {
- "continue": {
- "type": "boolean",
- "description": "Continue as much as possible after an error (-k)"
- },
- "force": {
- "type": "boolean",
- "description": "Force the specified targets/task to run (-f)."
- },
- "parseOnly": {
- "type": "boolean",
- "description": "Run bitbake in parse-only mode (-p)."
- }
- }
- },
- "specialCommand": {
- "type": "string",
- "description": "Special command to run instead of bitbake. Intended for internal use by the extension.",
- "pattern": "^devtool\\s.*$"
- }
- }
- }
- ],
- "problemMatchers": [
- {
- "name": "bitbake-ParseError",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": [
- {
- "regexp": "^.*ParseError (at|in) (.+?):(\\d+)?:? (unparsed line: '(.+)')$",
- "file": 2,
- "line": 3,
- "message": 4,
- "code": 5,
- "column": 0
- }
- ]
- },
- {
- "name": "bitbake-UnableToParse",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": {
- "regexp": "(ERROR): (Unable to parse (.+))$",
- "severity": 1,
- "file": 3,
- "message": 2,
- "kind": "File"
- }
- },
- {
- "name": "bitbake-Variable",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": {
- "regexp": "(^Parsing recipes...)?(ERROR): (.+?): (.*?) file: (.+) line: (\\d+) (.*)$",
- "file": 2,
- "line": 5,
- "severity": 1,
- "message": 6
- }
- },
- {
- "name": "bitbake-non-existent-uri",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": {
- "regexp": "(ERROR): (.+?): (.*non-existent-uri: file could not be found)$",
- "file": 2,
- "severity": 1,
- "message": 3
- }
- },
- {
- "name": "bitbake-compilation-python-function",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": {
- "regexp": "(ERROR): (.+): (Error in compiling python function) in (.*), line (\\d+):$",
- "file": 2,
- "severity": 1,
- "line": 5,
- "message": 3
- }
- },
- {
- "name": "bitbake-execution-error",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": {
- "regexp": "(^Parsing recipes...)?(ERROR): (.+?): (.*):?$",
- "file": 3,
- "severity": 2,
- "message": 4
- }
- },
- {
- "name": "bitbake-task-error",
- "source": "bitbake",
- "owner": "bitbake",
- "fileLocation": [
- "autoDetect",
- "${cwd}"
- ],
- "pattern": {
- "regexp": "^(ERROR): Task \\((.*):(.*\\) .*)$",
- "file": 2,
- "message": 3,
- "severity": 1
- }
- }
- ],
- "commands": [
- {
- "command": "bitbake.rescan-project",
- "title": "BitBake: Rescan Project",
- "description": "This command rescans the bitbake project.",
- "icon": "$(refresh)"
- },
- {
- "command": "bitbake.pick-configuration",
- "title": "BitBake: Pick configuration",
- "description": "Select the active build configuration from the settings to use for bitbake commands."
- },
- {
- "command": "bitbake.build-recipe",
- "title": "BitBake: Build recipe",
- "description": "Build a recipe or an image.",
- "icon": "$(gear)"
- },
- {
- "command": "bitbake.clean-recipe",
- "title": "BitBake: Clean recipe",
- "description": "Clean a recipe or an image (bitbake -c clean).",
- "icon": "$(exclude)"
- },
- {
- "command": "bitbake.run-task",
- "title": "BitBake: Run task for recipe",
- "description": "Run a specific task for a bitbake recipe."
- },
- {
- "command": "bitbake.scan-recipe-env",
- "title": "BitBake: Scan Recipe",
- "description": "Run 'bitbake -e' on the chosen recipe to improve the language services such as hover definition"
- },
- {
- "command": "bitbake.open-recipe-workdir",
- "title": "BitBake: Open recipe's workdir",
- "description": "Open a recipe's workdir in VSCode.",
- "icon": "$(file-symlink-directory)"
- },
- {
- "command": "bitbake.drop-recipe",
- "title": "BitBake: Drop a recipe from the active workspace",
- "description": "Stop watching or suggesting a recipe in bitbake commands.",
- "icon": "$(close)"
- },
- {
- "command": "bitbake.watch-recipe",
- "title": "BitBake: Add a recipe to the active workspace",
- "icon": "$(add)",
- "description": "Start watching or suggesting a recipe in bitbake commands."
- },
- {
- "command": "bitbake.drop-all-recipes",
- "title": "BitBake: Drop all recipes from the active workspace",
- "description": "Clear all recipes in the recipes view and from all command suggestions.",
- "icon": "$(close-all)"
- },
- {
- "command": "bitbake.parse-recipes",
- "title": "BitBake: Parse all recipes",
- "description": "This command runs bitbake in parse-only mode."
- },
- {
- "command": "bitbake.start-toaster-in-browser",
- "title": "BitBake: Start toaster in browser",
- "description": "Start Toaster and reveal it in the browser.",
- "icon": "$(preview)"
- },
- {
- "command": "bitbake.stop-toaster",
- "title": "BitBake: Stop Toaster",
- "description": "This stops Toaster by running `source toaster stop`.",
- "icon": "$(stop-circle)"
- },
- {
- "command": "bitbake.clear-workspace-state",
- "title": "BitBake: Clear workspace State",
- "description": "This clears all the data stored in the workspace state which would persist between sessions. This can potentially solve the crash caused by downgrading the extension to a version that is not able to handle the new workspace state data format."
- },
- {
- "command": "bitbake.examine-dependency-taskexp",
- "title": "BitBake: Examine recipe's dependencies with taskexp",
- "description": "Examine the recipe's dependencies with taskexp."
- },
- {
- "command": "bitbake.devtool-modify",
- "title": "BitBake: Devtool: Modify recipe",
- "description": "Open a new devtool workspace to modify a recipe's sources.",
- "icon": "$(add)"
- },
- {
- "command": "bitbake.devtool-ide-sdk",
- "title": "BitBake: Devtool: Configure VSCode SDK",
- "description": "Configure a devtool sources' workspace for cross-compilation and debugging."
- },
- {
- "command": "bitbake.devtool-sdk-fallback",
- "title": "BitBake: Devtool: Configure devtool SDK fallback",
- "description": "Configure a devtool sources' workspace to use `devtool build` and `devtool deploy-target` if `devtool ide-sdk` is not available."
- },
- {
- "command": "bitbake.devtool-open-workspace",
- "title": "BitBake: Devtool: Open Workspace",
- "description": "Open a devtool sources workspace in a new VSCode window.",
- "icon": "$(file-symlink-directory)"
- },
- {
- "command": "bitbake.devtool-reset",
- "title": "BitBake: Devtool: Reset",
- "description": "Remove a devtool workspace.",
- "icon": "$(trash)"
- },
- {
- "command": "bitbake.devtool-update",
- "title": "BitBake: Devtool: Update recipe",
- "description": "Update a recipe from a devtool workspace's modifications.",
- "icon": "$(save-as)"
- },
- {
- "command": "bitbake.devtool-build",
- "title": "Bitbake: Devtool: Build recipe",
- "description": "Build a recipe through devtool.",
- "icon": "$(gear)"
- },
- {
- "command": "bitbake.devtool-deploy",
- "title": "Bitbake: Devtool: Deploy recipe",
- "description": "Deploy a devtool package on an SSH target."
- },
- {
- "command": "bitbake.devtool-clean",
- "title": "BitBake: Devtool: Clean recipe",
- "description": "Clean a recipe using devtool.",
- "icon": "$(exclude)"
- },
- {
- "command": "bitbake.terminal-profile",
- "title": "BitBake: Open interactive terminal",
- "description": "Open an interactive terminal with the bitbake environment."
- },
- {
- "command": "bitbake.recipe-devshell",
- "title": "BitBake: Open recipe's devshell",
- "description": "Open an interactive BitBake devshell for a recipe."
- },
- {
- "command": "bitbake.collapse-list",
- "title": "BitBake: Collapse list",
- "description": "Collapse the focused list of recipes or devtool workspaces.",
- "icon": "$(collapse-all)"
- }
- ],
- "viewsContainers": {
- "activitybar": [
- {
- "id": "bitbakeView",
- "title": "Bitbake",
- "icon": "./client/images/yocto-view-icon.svg"
- }
- ]
- },
- "views": {
- "bitbakeView": [
- {
- "id": "bitbakeRecipes",
- "name": "Recipes Explorer",
- "contextualTitle": "Recipes explorer",
- "icon": "$(library)",
- "when": "bitbake.active"
- },
- {
- "id": "devtoolWorkspaces",
- "name": "Devtool Workspaces",
- "contextualTitle": "Devtool workspaces",
- "icon": "$(symbol-property)",
- "when": "bitbake.active"
- }
- ]
- },
- "submenus": [
- {
- "id": "bitbake/main",
- "label": "BitBake",
- "icon": "$(ellipsis)"
- },
- {
- "id": "devtool/main",
- "label": "BitBake",
- "icon": "$(ellipsis)"
- }
- ],
- "menus": {
- "bitbake/main": [
- {
- "command": "bitbake.build-recipe",
- "group": "0@bitbake_build@0"
- },
- {
- "command": "bitbake.clean-recipe",
- "group": "0@bitbake_build@1"
- },
- {
- "command": "bitbake.run-task",
- "group": "0@bitbake_build@2"
- },
- {
- "command": "bitbake.drop-recipe",
- "group": "0@bitbake_build@3"
- },
- {
- "command": "bitbake.scan-recipe-env",
- "group": "1@bitbake_dev@0"
- },
- {
- "command": "bitbake.recipe-devshell",
- "group": "1@bitbake_dev@1"
- },
- {
- "command": "bitbake.terminal-profile",
- "group": "1@bitbake_dev@2"
- },
- {
- "command": "bitbake.open-recipe-workdir",
- "group": "1@bitbake_dev@3"
- },
- {
- "command": "bitbake.start-toaster-in-browser",
- "group": "1@bitbake_dev@4"
- },
- {
- "command": "bitbake.examine-dependency-taskexp",
- "group": "1@bitbake_dev@5"
- },
- {
- "command": "bitbake.devtool-modify",
- "group": "2@bitbake_devtool@0"
- }
- ],
- "devtool/main": [
- {
- "command": "bitbake.devtool-build",
- "group": "0@devtool_build@0"
- },
- {
- "command": "bitbake.devtool-clean",
- "group": "0@devtool_build@1"
- },
- {
- "command": "bitbake.devtool-deploy",
- "group": "0@devtool_build@2"
- },
- {
- "command": "bitbake.devtool-open-workspace",
- "group": "1@devtool_dev@0"
- },
- {
- "command": "bitbake.devtool-ide-sdk",
- "group": "1@devtool_dev@1"
- },
- {
- "command": "bitbake.devtool-sdk-fallback",
- "group": "1@devtool_dev@2"
- },
- {
- "command": "bitbake.terminal-profile",
- "group": "1@devtool_dev@3"
- },
- {
- "command": "bitbake.devtool-update",
- "group": "1@devtool_finalize@0"
- },
- {
- "command": "bitbake.devtool-reset",
- "group": "1@devtool_finalize@1"
- }
- ],
- "explorer/context": [
- {
- "submenu": "bitbake/main",
- "group": "bitbake",
- "when": "resourceLangId == bitbake"
- }
- ],
- "editor/context": [
- {
- "submenu": "bitbake/main",
- "group": "bitbake@0",
- "when": "editorLangId == bitbake"
- }
- ],
- "editor/title/context": [
- {
- "submenu": "bitbake/main",
- "group": "bitbake",
- "when": "resourceLangId == bitbake"
- }
- ],
- "view/title": [
- {
- "command": "bitbake.watch-recipe",
- "group": "navigation@0",
- "when": "view == bitbakeRecipes"
- },
- {
- "command": "bitbake.rescan-project",
- "group": "navigation@1",
- "when": "view == bitbakeRecipes"
- },
- {
- "command": "bitbake.collapse-list",
- "group": "navigation@2",
- "when": "view == bitbakeRecipes"
- },
- {
- "command": "bitbake.drop-all-recipes",
- "group": "navigation@3",
- "when": "view == bitbakeRecipes"
- },
- {
- "submenu": "bitbake/main",
- "group": "navigation@99",
- "when": "view == bitbakeRecipes"
- },
- {
- "command": "bitbake.devtool-modify",
- "group": "navigation@0",
- "when": "view == devtoolWorkspaces"
- },
- {
- "command": "bitbake.rescan-project",
- "group": "navigation@1",
- "when": "view == devtoolWorkspaces"
- },
- {
- "submenu": "devtool/main",
- "group": "navigation@99",
- "when": "view == devtoolWorkspaces"
- }
- ],
- "view/item/context": [
- {
- "command": "bitbake.build-recipe",
- "group": "inline@0",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.clean-recipe",
- "group": "inline@1",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.drop-recipe",
- "group": "inline@2",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "submenu": "bitbake/main",
- "group": "inline@99",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.devtool-build",
- "group": "inline@0",
- "when": "viewItem == devtoolWorskpaceCtx"
- },
- {
- "command": "bitbake.devtool-update",
- "group": "inline@1",
- "when": "viewItem == devtoolWorskpaceCtx"
- },
- {
- "command": "bitbake.devtool-reset",
- "group": "inline@2",
- "when": "viewItem == devtoolWorskpaceCtx"
- },
- {
- "submenu": "devtool/main",
- "group": "inline@99",
- "when": "viewItem == devtoolWorskpaceCtx"
- },
- {
- "command": "bitbake.build-recipe",
- "group": "0@bitbake_build@0",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.clean-recipe",
- "group": "0@bitbake_build@1",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.run-task",
- "group": "0@bitbake_build@2",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.drop-recipe",
- "group": "0@bitbake_build@3",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.scan-recipe-env",
- "group": "1@bitbake_dev@0",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.recipe-devshell",
- "group": "1@bitbake_dev@1",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.terminal-profile",
- "group": "1@bitbake_dev@2",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.open-recipe-workdir",
- "group": "1@bitbake_dev@3",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.examine-dependency-taskexp",
- "group": "1@bitbake_dev@4",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.devtool-modify",
- "group": "2@bitbake_devtool@0",
- "when": "viewItem == bitbakeRecipeCtx"
- },
- {
- "command": "bitbake.devtool-build",
- "group": "0@devtool_build@0",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-clean",
- "group": "0@devtool_build@1",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-deploy",
- "group": "0@devtool_build@2",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-open-workspace",
- "group": "1@devtool_dev@0",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-ide-sdk",
- "group": "1@devtool_dev@1",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-sdk-fallback",
- "group": "1@devtool_dev@2",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.terminal-profile",
- "group": "1@devtool_dev@3",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-update",
- "group": "1@devtool_finalize@0",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- },
- {
- "command": "bitbake.devtool-reset",
- "group": "1@devtool_finalize@1",
- "when": "viewItem == devtoolWorskpaceCtx"
-
- }
- ]
- },
- "terminal": {
- "profiles": [
- {
- "id": "bitbake.terminal",
- "title": "bitbake"
- }
- ]
- }
- },
- "scripts": {
- "postinstall": "cd server && npm install && cd ../client && npm install && cd ..",
- "fetch": "npm run fetch:poky && npm run fetch:docs && npm run fetch:wasm && npm run fetch:spdx-licenses",
- "fetch:docs": "sh scripts/fetch-docs.sh",
- "fetch:poky": "sh scripts/fetch-poky.sh",
- "fetch:wasm": "bash ./scripts/build-tree-sitter-wasm.sh",
- "fetch:spdx-licenses": "sh scripts/fetch-spdx-licenses.sh",
- "compile": "tsc -b",
- "watch": "tsc -b -w && npm run postcompile",
- "vscode:prepublish": "cd server && npm install --omit=dev && cd ../client && npm install --omit=dev && cd ..",
- "package": "vsce package",
- "clean:server": "rm -fr ./server/node_modules ./server/out ./server/resources server/tsconfig.tsbuildinfo server/.vscode-test server/*.tgz ./server/tree-sitter-bash.wasm ./server/tree-sitter-bitbake.wasm",
- "clean:client": "rm -fr ./client/node_modules ./client/out client/tsconfig.tsbuildinfo client/.vscode-test",
- "clean:lib": "rm -fr ./lib/node_modules",
- "clean": "npm run clean:lib && npm run clean:server && npm run clean:client && rm -fr node_modules integration-tests/out integration-tests/project-folder/build* .vscode-test .eslintcache resources coverage ./out *.vsix",
- "lint": "eslint . --ext js,ts --cache",
- "jest": "jest",
- "test": "npm run jest && npm run test:integration && npm run test:grammar",
- "test:integration": "xvfb-run node ./integration-tests/out/runTest.js",
- "test:watch": "jest --watchAll",
- "test:grammar": "vscode-tmgrammar-test ./client/test/grammars/test-cases/*.bb",
- "snap-grammar": "vscode-tmgrammar-snap ./client/test/grammars/snaps/*.bb -u",
- "dev:vsix": "npm run clean && npm install && npm run fetch:wasm && npm run fetch:docs && npm run compile && npm run package",
- "dev:npm": "npm run clean && npm install && npm run fetch:wasm && npm run fetch:docs && cd server && npm pack"
- },
- "devDependencies": {
- "@types/glob": "^8.1.0",
- "@types/jest": "^29.5.12",
- "@types/mocha": "^10.0.1",
- "@types/node": "^20.14.9",
- "@types/vscode": "^1.75.1",
- "@vscode/test-electron": "^2.4.0",
- "@vscode/vsce": "^2.3.5",
- "eslint": "^8.51.0",
- "eslint-config-standard-with-typescript": "^39.1.1",
- "eslint-plugin-deprecation": "^3.0.0",
- "eslint-plugin-header": "^3.1.1",
- "eslint-plugin-import": "^2.28.1",
- "eslint-plugin-jest": "^28.6.0",
- "eslint-plugin-n": "^16.2.0",
- "eslint-plugin-promise": "^6.1.1",
- "jest": "^29.7.0",
- "mocha": "^10.2.0",
- "ovsx": "^0.9.1",
- "ts-jest": "^29.1.5",
- "typescript": "^5.1.3",
- "vscode-tmgrammar-test": "^0.1.3"
- },
- "vsce": {
- "baseContentUrl": "https://github.com/yoctoproject/vscode-bitbake/raw/HEAD/",
- "baseImageUrl": "https://github.com/yoctoproject/vscode-bitbake/raw/HEAD/"
- }
+ "name": "yocto-bitbake",
+ "displayName": "Yocto Project BitBake",
+ "description": "Extended Yocto Project and BitBake language support",
+ "author": {
+ "name": "Savoir-faire Linux",
+ "email": "contact@savoirfairelinux.com",
+ "url": "https://www.savoirfairelinux.com/"
+ },
+ "contributors": [
+ "Eugen Wiens"
+ ],
+ "license": "MIT",
+ "version": "2.8.0",
+ "publisher": "yocto-project",
+ "icon": "./client/images/icon.png",
+ "bugs": {
+ "url": "https://github.com/yoctoproject/vscode-bitbake/issues"
+ },
+ "homepage": "https://github.com/yoctoproject/vscode-bitbake",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/yoctoproject/vscode-bitbake.git"
+ },
+ "engines": {
+ "vscode": "^1.92.0"
+ },
+ "categories": [
+ "Programming Languages"
+ ],
+ "activationEvents": [
+ "workspaceContains:**/bblayers.conf",
+ "workspaceContains:**/*.bb"
+ ],
+ "main": "./client/out/extension",
+ "browser": "./client/out/extension-web",
+ "contributes": {
+ "languages": [
+ {
+ "id": "bitbake",
+ "aliases": [
+ "BitBake",
+ "bitbake"
+ ],
+ "extensions": [
+ ".bb",
+ ".bbappend",
+ ".bbclass"
+ ],
+ "configuration": "./client/language-configuration.json",
+ "icon": {
+ "dark": "./client/images/yocto-file-icon.svg",
+ "light": "./client/images/yocto-file-icon.svg"
+ }
+ }
+ ],
+ "grammars": [
+ {
+ "language": "bitbake",
+ "scopeName": "source.bb",
+ "path": "./client/syntaxes/bitbake.tmLanguage.json"
+ }
+ ],
+ "semanticTokenScopes": [
+ {
+ "language": "bitbake",
+ "scopes": {
+ "operator.readonly": [
+ "keyword.other.bitbake-operator.bb"
+ ]
+ }
+ }
+ ],
+ "configuration": {
+ "type": "object",
+ "title": "BitBake",
+ "properties": {
+ "bitbake.loggingLevel": {
+ "type": "string",
+ "enum": [
+ "error",
+ "info",
+ "debug"
+ ],
+ "default": "error",
+ "markdownDescription": "Adjust the logging level: `error` for reporting only errors, `info` for displaying information useful to the user, and `debug` for the same information as `info,` but with additional debugging details."
+ },
+ "bitbake.parseOnSave": {
+ "type": "boolean",
+ "default": true,
+ "description": "Activate parsing on save. When a recipe is saved, bitbake will automatically be run to parse it."
+ },
+ "bitbake.eSDKMode": {
+ "type": "boolean",
+ "default": false,
+ "deprecationMessage": "eSDK mode is now automatically detected. This setting is deprecated and will be removed in a future release.",
+ "markdownDescription": "Activate eSDK only mode. This tells the extension that devtool is available but not bitbake, which will disable unavailable features. You should point the `bitbake.pathToEnvScript` setting to the environment script of the eSDK."
+ },
+ "bitbake.pathToEnvScript": {
+ "type": "string",
+ "examples": [
+ "${workspaceFolder}/sources/poky/oe-init-build-env"
+ ],
+ "markdownDescription": "Set the path to the environment script to configure the BitBake project. _(Optional)_, see the commandWrapper setting.\n\nExample: `${workspaceFolder}/sources/poky/oe-init-build-env`"
+ },
+ "bitbake.pathToBuildFolder": {
+ "type": "string",
+ "examples": [
+ "${workspaceFolder}/build"
+ ],
+ "description": "Set the build folder for the BitBake project. _(Optional)_, see the commandWrapper setting.\n\nExample: '${workspaceFolder}/build'"
+ },
+ "bitbake.pathToBitbakeFolder": {
+ "type": "string",
+ "default": "${workspaceFolder}/sources/poky/bitbake",
+ "description": "Set the path to the BitBake folder. Used to provide Python embedded language features."
+ },
+ "bitbake.commandWrapper": {
+ "type": "string",
+ "examples": [
+ "docker run --rm -v ${workspaceFolder}:${workspaceFolder} crops/poky --workdir=${workspaceFolder} /bin/bash -c",
+ "kas-container --ssh-agent shell -c",
+ "cqfd run",
+ "${workspaceFolder}/build.sh --"
+ ],
+ "markdownDescription": "An optional build tool command to wrap around BitBake commands.\n\nVarious tools provide ways to automatically configure the BitBake environment, or even call it inside containers. This option allows you to use them through this extension by wrapping around the bitbake invocation.\n\nThe resulting commands generated by this extension will be for example:\n\n `$ 'bitbake core-image-minimal'`\n\n `$ '. && bitbake core-image-minimal'`\n\nSee examples:\n\n`docker run --rm -v ${workspaceFolder}:${workspaceFolder} crops/poky --workdir=${workspaceFolder} /bin/bash -c`\n\n`kas shell -c`\n\n`cqfd run`\n\n`${workspaceFolder}/build.sh --`\n\nNote: Relative paths must be relative to the workingDirectory folder, where the command will be run."
+ },
+ "bitbake.workingDirectory": {
+ "type": "string",
+ "default": "${workspaceFolder}",
+ "description": "Set the working directory for running BitBake command."
+ },
+ "bitbake.shellEnv": {
+ "type": "object",
+ "default": {},
+ "description": "Environment variables to set before running the BitBake command.",
+ "examples": [
+ {
+ "BB_ENV_PASSTHROUGH": "SSTATE_DIR",
+ "SSTATE_DIR": "/mnt/yocto-sstate-cache"
+ }
+ ]
+ },
+ "bitbake.sshTarget": {
+ "type": "string",
+ "markdownDescription": "Hostname or IP address of the SSH target for deploying recipes or SDK builds to a remote target. _(Optional)_\n\nExample: `root@192.168.0.50`\n\nAdditional SSH options must be defined through your SSH configuration file (`~/.ssh/config`).",
+ "examples": [
+ "root@192.168.0.50"
+ ]
+ },
+ "bitbake.sdkImage": {
+ "type": "string",
+ "markdownDescription": "SDK image to use for cross-compilation and debugging.\n\nExample: `core-image-minimal`",
+ "examples": "core-image-minimal"
+ },
+ "bitbake.disableEmbeddedLanguagesFiles": {
+ "type": "boolean",
+ "markdownDescription": "Disables temporary files generated for BitBake's embedded languages. This action will turn off most features within Shell and Python regions of BitBake code. This is intended for users who don't want temporary files to be saved on their drive, or do not want to see the diagnostics of these temporary files polluting their 'PROBLEMS' tab. Please note a reload of VS Code might be required after activating or deactivating this setting for the full change to take effect.",
+ "default": false
+ },
+ "bitbake.buildConfigurations": {
+ "type": "array",
+ "description": "Array of alternative configurations for starting bitbake. It can be useful to handle multiple build folders for multiple targets (MACHINE configurations). If an option is not defined, the value from the main configuration will be used.",
+ "items": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string",
+ "markdownDescription": "Name of the configuration."
+ },
+ "pathToEnvScript": {
+ "type": "string",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `pathToEnvScript`. See the `bitbake.pathToEnvScript` setting."
+ },
+ "pathToBuildFolder": {
+ "type": "string",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `pathToBuildFolder`. See the `bitbake.pathToBuildFolder` setting."
+ },
+ "commandWrapper": {
+ "type": "string",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `commandWrapper`. See the `bitbake.commandWrapper` setting."
+ },
+ "workingDirectory": {
+ "type": "string",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `workingDirectory`. See the `bitbake.workingDirectory` setting."
+ },
+ "shellEnv": {
+ "type": "object",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `shellEnv`. See the `bitbake.shellEnv` setting."
+ },
+ "sshTarget": {
+ "type": "string",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `sshTarget`. See the `bitbake.sshTarget` setting."
+ },
+ "sdkImage": {
+ "type": "string",
+ "markdownDescription": "Sub-configuration specific setting to replace the main `sdkImage`. See the `bitbake.sdkImage` setting."
+ }
+ },
+ "required": [
+ "name"
+ ]
+ }
+ },
+ "bitbake.disableConfigModification": {
+ "type": "boolean",
+ "default": false,
+ "description": "Turn on this setting to stop this extension from modifying the VS Code configuration of the workspace. Note that this will also disable some features related to embedded Python and Shell code."
+ },
+ "bitbake.disableDevtoolDebugBuild": {
+ "type": "boolean",
+ "default": false,
+ "description": "Turn off `--debug-build` for the `bitbake.devtool-modify` command."
+ }
+ }
+ },
+ "configurationDefaults": {
+ "[shellscript]": {
+ "files.trimTrailingWhitespace": false
+ },
+ "[python]": {
+ "files.trimTrailingWhitespace": false
+ }
+ },
+ "taskDefinitions": [
+ {
+ "type": "bitbake",
+ "properties": {
+ "recipes": {
+ "description": "Bitbake recipe(s)",
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "task": {
+ "type": "string",
+ "description": "Bitbake task to run (build by default)"
+ },
+ "options": {
+ "type": "object",
+ "description": "Additional options to pass to the bitbake command",
+ "properties": {
+ "continue": {
+ "type": "boolean",
+ "description": "Continue as much as possible after an error (-k)"
+ },
+ "force": {
+ "type": "boolean",
+ "description": "Force the specified targets/task to run (-f)."
+ },
+ "parseOnly": {
+ "type": "boolean",
+ "description": "Run bitbake in parse-only mode (-p)."
+ }
+ }
+ },
+ "specialCommand": {
+ "type": "string",
+ "description": "Special command to run instead of bitbake. Intended for internal use by the extension.",
+ "pattern": "^devtool\\s.*$"
+ }
+ }
+ }
+ ],
+ "problemMatchers": [
+ {
+ "name": "bitbake-ParseError",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": [
+ {
+ "regexp": "^.*ParseError (at|in) (.+?):(\\d+)?:? (unparsed line: '(.+)')$",
+ "file": 2,
+ "line": 3,
+ "message": 4,
+ "code": 5,
+ "column": 0
+ }
+ ]
+ },
+ {
+ "name": "bitbake-UnableToParse",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": {
+ "regexp": "(ERROR): (Unable to parse (.+))$",
+ "severity": 1,
+ "file": 3,
+ "message": 2,
+ "kind": "File"
+ }
+ },
+ {
+ "name": "bitbake-Variable",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": {
+ "regexp": "(^Parsing recipes...)?(ERROR): (.+?): (.*?) file: (.+) line: (\\d+) (.*)$",
+ "file": 2,
+ "line": 5,
+ "severity": 1,
+ "message": 6
+ }
+ },
+ {
+ "name": "bitbake-non-existent-uri",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": {
+ "regexp": "(ERROR): (.+?): (.*non-existent-uri: file could not be found)$",
+ "file": 2,
+ "severity": 1,
+ "message": 3
+ }
+ },
+ {
+ "name": "bitbake-compilation-python-function",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": {
+ "regexp": "(ERROR): (.+): (Error in compiling python function) in (.*), line (\\d+):$",
+ "file": 2,
+ "severity": 1,
+ "line": 5,
+ "message": 3
+ }
+ },
+ {
+ "name": "bitbake-execution-error",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": {
+ "regexp": "(^Parsing recipes...)?(ERROR): (.+?): (.*):?$",
+ "file": 3,
+ "severity": 2,
+ "message": 4
+ }
+ },
+ {
+ "name": "bitbake-task-error",
+ "source": "bitbake",
+ "owner": "bitbake",
+ "fileLocation": [
+ "autoDetect",
+ "${cwd}"
+ ],
+ "pattern": {
+ "regexp": "^(ERROR): Task \\((.*):(.*\\) .*)$",
+ "file": 2,
+ "message": 3,
+ "severity": 1
+ }
+ }
+ ],
+ "commands": [
+ {
+ "command": "bitbake.rescan-project",
+ "title": "BitBake: Rescan Project",
+ "description": "This command rescans the bitbake project.",
+ "icon": "$(refresh)"
+ },
+ {
+ "command": "bitbake.pick-configuration",
+ "title": "BitBake: Change active buildConfiguration",
+ "description": "Select the active build configuration from the settings to use for bitbake commands."
+ },
+ {
+ "command": "bitbake.build-recipe",
+ "title": "BitBake: Build recipe",
+ "description": "Build a recipe or an image.",
+ "icon": "$(gear)"
+ },
+ {
+ "command": "bitbake.clean-recipe",
+ "title": "BitBake: Clean recipe",
+ "description": "Clean a recipe or an image (bitbake -c clean).",
+ "icon": "$(exclude)"
+ },
+ {
+ "command": "bitbake.run-task",
+ "title": "BitBake: Run task for recipe",
+ "description": "Run a specific task for a bitbake recipe."
+ },
+ {
+ "command": "bitbake.scan-recipe-env",
+ "title": "BitBake: Scan Recipe",
+ "description": "Run 'bitbake -e' on the chosen recipe to improve the language services such as hover definition"
+ },
+ {
+ "command": "bitbake.scan-global-env",
+ "title": "BitBake: Scan global environment",
+ "description": "Run 'bitbake -e' for the global environment to improve the language features such as hover definition on conf files"
+ },
+ {
+ "command": "bitbake.open-recipe-workdir",
+ "title": "BitBake: Open recipe's workdir",
+ "description": "Open a recipe's workdir in VSCode.",
+ "icon": "$(file-symlink-directory)"
+ },
+ {
+ "command": "bitbake.drop-recipe",
+ "title": "BitBake: Drop a recipe from the active workspace",
+ "description": "Stop watching or suggesting a recipe in bitbake commands.",
+ "icon": "$(close)"
+ },
+ {
+ "command": "bitbake.watch-recipe",
+ "title": "BitBake: Add a recipe to the active workspace",
+ "icon": "$(add)",
+ "description": "Start watching or suggesting a recipe in bitbake commands."
+ },
+ {
+ "command": "bitbake.drop-all-recipes",
+ "title": "BitBake: Drop all recipes from the active workspace",
+ "description": "Clear all recipes in the recipes view and from all command suggestions.",
+ "icon": "$(close-all)"
+ },
+ {
+ "command": "bitbake.parse-recipes",
+ "title": "BitBake: Parse all recipes",
+ "description": "This command runs bitbake in parse-only mode."
+ },
+ {
+ "command": "bitbake.start-toaster-in-browser",
+ "title": "BitBake: Start toaster in browser",
+ "description": "Start Toaster and reveal it in the browser.",
+ "icon": "$(preview)"
+ },
+ {
+ "command": "bitbake.stop-toaster",
+ "title": "BitBake: Stop Toaster",
+ "description": "This stops Toaster by running `source toaster stop`.",
+ "icon": "$(stop-circle)"
+ },
+ {
+ "command": "bitbake.clear-workspace-state",
+ "title": "BitBake: Clear workspace State",
+ "description": "This clears all the data stored in the workspace state which would persist between sessions. This can potentially solve the crash caused by downgrading the extension to a version that is not able to handle the new workspace state data format."
+ },
+ {
+ "command": "bitbake.examine-dependency-taskexp",
+ "title": "BitBake: Examine recipe's dependencies with taskexp",
+ "description": "Examine the recipe's dependencies with taskexp."
+ },
+ {
+ "command": "bitbake.devtool-modify",
+ "title": "BitBake: Devtool: Modify recipe",
+ "description": "Open a new devtool workspace to modify a recipe's sources.",
+ "icon": "$(add)"
+ },
+ {
+ "command": "bitbake.devtool-ide-sdk",
+ "title": "BitBake: Devtool: Configure VSCode SDK",
+ "description": "Configure a devtool sources' workspace for cross-compilation and debugging."
+ },
+ {
+ "command": "bitbake.devtool-sdk-fallback",
+ "title": "BitBake: Devtool: Configure devtool SDK fallback",
+ "description": "Configure a devtool sources' workspace to use `devtool build` and `devtool deploy-target` if `devtool ide-sdk` is not available."
+ },
+ {
+ "command": "bitbake.devtool-open-workspace",
+ "title": "BitBake: Devtool: Open Workspace",
+ "description": "Open a devtool sources workspace in a new VSCode window.",
+ "icon": "$(file-symlink-directory)"
+ },
+ {
+ "command": "bitbake.devtool-reset",
+ "title": "BitBake: Devtool: Reset",
+ "description": "Remove a devtool workspace.",
+ "icon": "$(trash)"
+ },
+ {
+ "command": "bitbake.devtool-update",
+ "title": "BitBake: Devtool: Update recipe",
+ "description": "Update a recipe from a devtool workspace's modifications.",
+ "icon": "$(save-as)"
+ },
+ {
+ "command": "bitbake.devtool-build",
+ "title": "Bitbake: Devtool: Build recipe",
+ "description": "Build a recipe through devtool.",
+ "icon": "$(gear)"
+ },
+ {
+ "command": "bitbake.devtool-deploy",
+ "title": "Bitbake: Devtool: Deploy recipe",
+ "description": "Deploy a devtool package on an SSH target."
+ },
+ {
+ "command": "bitbake.devtool-clean",
+ "title": "BitBake: Devtool: Clean recipe",
+ "description": "Clean a recipe using devtool.",
+ "icon": "$(exclude)"
+ },
+ {
+ "command": "bitbake.terminal-profile",
+ "title": "BitBake: Open interactive terminal",
+ "description": "Open an interactive terminal with the bitbake environment."
+ },
+ {
+ "command": "bitbake.recipe-devshell",
+ "title": "BitBake: Open recipe's devshell",
+ "description": "Open an interactive BitBake devshell for a recipe."
+ },
+ {
+ "command": "bitbake.collapse-list",
+ "title": "BitBake: Collapse list",
+ "description": "Collapse the focused list of recipes or devtool workspaces.",
+ "icon": "$(collapse-all)"
+ }
+ ],
+ "viewsContainers": {
+ "activitybar": [
+ {
+ "id": "bitbakeView",
+ "title": "Bitbake",
+ "icon": "./client/images/yocto-view-icon.svg"
+ }
+ ]
+ },
+ "views": {
+ "bitbakeView": [
+ {
+ "id": "bitbakeRecipes",
+ "name": "Recipes Explorer",
+ "contextualTitle": "Recipes explorer",
+ "icon": "$(library)",
+ "when": "bitbake.active"
+ },
+ {
+ "id": "devtoolWorkspaces",
+ "name": "Devtool Workspaces",
+ "contextualTitle": "Devtool workspaces",
+ "icon": "$(symbol-property)",
+ "when": "bitbake.active"
+ }
+ ]
+ },
+ "submenus": [
+ {
+ "id": "bitbake/main",
+ "label": "BitBake",
+ "icon": "$(ellipsis)"
+ },
+ {
+ "id": "devtool/main",
+ "label": "BitBake",
+ "icon": "$(ellipsis)"
+ }
+ ],
+ "menus": {
+ "bitbake/main": [
+ {
+ "command": "bitbake.build-recipe",
+ "group": "0@bitbake_build@0"
+ },
+ {
+ "command": "bitbake.clean-recipe",
+ "group": "0@bitbake_build@1"
+ },
+ {
+ "command": "bitbake.run-task",
+ "group": "0@bitbake_build@2"
+ },
+ {
+ "command": "bitbake.drop-recipe",
+ "group": "0@bitbake_build@3"
+ },
+ {
+ "command": "bitbake.scan-recipe-env",
+ "group": "1@bitbake_dev@0",
+ "when": "resourceExtname == .bb || resourceExtname == .bbappend || resourceExtname == .inc"
+ },
+ {
+ "command": "bitbake.scan-global-env",
+ "group": "1@bitbake_dev@0",
+ "when": "resourceExtname == .conf || resourceExtname == .bbclass"
+ },
+ {
+ "command": "bitbake.recipe-devshell",
+ "group": "1@bitbake_dev@1"
+ },
+ {
+ "command": "bitbake.terminal-profile",
+ "group": "1@bitbake_dev@2"
+ },
+ {
+ "command": "bitbake.open-recipe-workdir",
+ "group": "1@bitbake_dev@3"
+ },
+ {
+ "command": "bitbake.start-toaster-in-browser",
+ "group": "1@bitbake_dev@4"
+ },
+ {
+ "command": "bitbake.examine-dependency-taskexp",
+ "group": "1@bitbake_dev@5"
+ },
+ {
+ "command": "bitbake.pick-configuration",
+ "group": "1@bitbake_dev@6"
+ },
+ {
+ "command": "bitbake.devtool-modify",
+ "group": "2@bitbake_devtool@0"
+ }
+ ],
+ "devtool/main": [
+ {
+ "command": "bitbake.devtool-build",
+ "group": "0@devtool_build@0"
+ },
+ {
+ "command": "bitbake.devtool-clean",
+ "group": "0@devtool_build@1"
+ },
+ {
+ "command": "bitbake.devtool-deploy",
+ "group": "0@devtool_build@2"
+ },
+ {
+ "command": "bitbake.devtool-open-workspace",
+ "group": "1@devtool_dev@0"
+ },
+ {
+ "command": "bitbake.devtool-ide-sdk",
+ "group": "1@devtool_dev@1"
+ },
+ {
+ "command": "bitbake.devtool-sdk-fallback",
+ "group": "1@devtool_dev@2"
+ },
+ {
+ "command": "bitbake.terminal-profile",
+ "group": "1@devtool_dev@3"
+ },
+ {
+ "command": "bitbake.devtool-update",
+ "group": "1@devtool_finalize@0"
+ },
+ {
+ "command": "bitbake.devtool-reset",
+ "group": "1@devtool_finalize@1"
+ }
+ ],
+ "explorer/context": [
+ {
+ "submenu": "bitbake/main",
+ "group": "bitbake",
+ "when": "resourceLangId == bitbake"
+ }
+ ],
+ "editor/context": [
+ {
+ "submenu": "bitbake/main",
+ "group": "bitbake@0",
+ "when": "editorLangId == bitbake"
+ }
+ ],
+ "editor/title/context": [
+ {
+ "submenu": "bitbake/main",
+ "group": "bitbake",
+ "when": "resourceLangId == bitbake"
+ }
+ ],
+ "view/title": [
+ {
+ "command": "bitbake.watch-recipe",
+ "group": "navigation@0",
+ "when": "view == bitbakeRecipes"
+ },
+ {
+ "command": "bitbake.rescan-project",
+ "group": "navigation@1",
+ "when": "view == bitbakeRecipes"
+ },
+ {
+ "command": "bitbake.collapse-list",
+ "group": "navigation@2",
+ "when": "view == bitbakeRecipes"
+ },
+ {
+ "command": "bitbake.drop-all-recipes",
+ "group": "navigation@3",
+ "when": "view == bitbakeRecipes"
+ },
+ {
+ "submenu": "bitbake/main",
+ "group": "navigation@99",
+ "when": "view == bitbakeRecipes"
+ },
+ {
+ "command": "bitbake.devtool-modify",
+ "group": "navigation@0",
+ "when": "view == devtoolWorkspaces"
+ },
+ {
+ "command": "bitbake.rescan-project",
+ "group": "navigation@1",
+ "when": "view == devtoolWorkspaces"
+ },
+ {
+ "submenu": "devtool/main",
+ "group": "navigation@99",
+ "when": "view == devtoolWorkspaces"
+ }
+ ],
+ "view/item/context": [
+ {
+ "command": "bitbake.build-recipe",
+ "group": "inline@0",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.clean-recipe",
+ "group": "inline@1",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.drop-recipe",
+ "group": "inline@2",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "submenu": "bitbake/main",
+ "group": "inline@99",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.devtool-build",
+ "group": "inline@0",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-update",
+ "group": "inline@1",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-reset",
+ "group": "inline@2",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "submenu": "devtool/main",
+ "group": "inline@99",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.build-recipe",
+ "group": "0@bitbake_build@0",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.clean-recipe",
+ "group": "0@bitbake_build@1",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.run-task",
+ "group": "0@bitbake_build@2",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.drop-recipe",
+ "group": "0@bitbake_build@3",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.scan-recipe-env",
+ "group": "1@bitbake_dev@0",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.recipe-devshell",
+ "group": "1@bitbake_dev@1",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.terminal-profile",
+ "group": "1@bitbake_dev@2",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.open-recipe-workdir",
+ "group": "1@bitbake_dev@3",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.examine-dependency-taskexp",
+ "group": "1@bitbake_dev@4",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.devtool-modify",
+ "group": "2@bitbake_devtool@0",
+ "when": "viewItem == bitbakeRecipeCtx"
+ },
+ {
+ "command": "bitbake.devtool-build",
+ "group": "0@devtool_build@0",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-clean",
+ "group": "0@devtool_build@1",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-deploy",
+ "group": "0@devtool_build@2",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-open-workspace",
+ "group": "1@devtool_dev@0",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-ide-sdk",
+ "group": "1@devtool_dev@1",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-sdk-fallback",
+ "group": "1@devtool_dev@2",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.terminal-profile",
+ "group": "1@devtool_dev@3",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-update",
+ "group": "1@devtool_finalize@0",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ },
+ {
+ "command": "bitbake.devtool-reset",
+ "group": "1@devtool_finalize@1",
+ "when": "viewItem == devtoolWorskpaceCtx"
+ }
+ ]
+ },
+ "terminal": {
+ "profiles": [
+ {
+ "id": "bitbake.terminal",
+ "title": "bitbake"
+ }
+ ]
+ }
+ },
+ "scripts": {
+ "postinstall": "cd server && npm install && cd ../client && npm install && cd ..",
+ "fetch": "npm run fetch:poky && npm run fetch:docs && npm run fetch:wasm && npm run fetch:spdx-licenses",
+ "fetch:docs": "sh scripts/fetch-docs.sh",
+ "fetch:poky": "sh scripts/fetch-poky.sh",
+ "fetch:wasm": "bash ./scripts/build-tree-sitter-wasm.sh",
+ "fetch:spdx-licenses": "sh scripts/fetch-spdx-licenses.sh",
+ "compile": "tsc -b",
+ "watch": "tsc -b -w && npm run postcompile",
+ "vscode:prepublish": "cd server && npm install --omit=dev && cd ../client && npm install --omit=dev && cd ..",
+ "package": "vsce package --follow-symlinks",
+ "clean:server": "rm -fr ./server/node_modules ./server/out ./server/resources server/tsconfig.tsbuildinfo server/.vscode-test server/*.tgz ./server/tree-sitter-bash.wasm ./server/tree-sitter-bitbake.wasm",
+ "clean:client": "rm -fr ./client/node_modules ./client/out client/tsconfig.tsbuildinfo client/.vscode-test",
+ "clean:lib": "rm -fr ./lib/node_modules",
+ "clean": "npm run clean:lib && npm run clean:server && npm run clean:client && rm -fr node_modules integration-tests/out integration-tests/project-folder/build* .vscode-test .eslintcache resources coverage ./out *.vsix tsconfig.tsbuildinfo",
+ "lint": "eslint . --cache",
+ "jest": "jest",
+ "test": "npm run jest && npm run test:integration && npm run test:grammar",
+ "test:integration": "xvfb-run node ./integration-tests/out/runTest.js",
+ "test:watch": "jest --watchAll",
+ "test:grammar": "vscode-tmgrammar-test ./client/test/grammars/test-cases/*.bb",
+ "snap-grammar": "vscode-tmgrammar-snap ./client/test/grammars/snaps/*.bb -u",
+ "dev:vsix": "npm run clean && npm install && npm run fetch:wasm && npm run fetch:docs && npm run fetch:spdx-licenses && npm run compile && npm run package",
+ "dev:npm": "npm run clean && npm install && npm run fetch:wasm && npm run fetch:docs && npm run fetch:spdx-licenses && cd server && npm pack"
+ },
+ "//": "TODO Bump eslint-plugin-header when rules is compatible with eslint 9",
+ "//": "See https://github.com/Stuk/eslint-plugin-header/issues/57",
+ "devDependencies": {
+ "@eslint/js": "^9.10.0",
+ "eslint-plugin-header": "github:tonyganchev/eslint-plugin-header#36161b3282e088ad2f19657ab0e377651b6886c2",
+ "@types/find": "^0.2.4",
+ "@types/glob": "^8.1.0",
+ "@types/jest": "^29.5.14",
+ "@types/mocha": "^10.0.8",
+ "@types/node": "^22.9.0",
+ "@types/vscode": "^1.92.0",
+ "@vscode/test-electron": "^2.4.1",
+ "@vscode/vsce": "^3.2.1",
+ "eslint": "^9.17.0",
+ "globals": "^15.14.0",
+ "jest": "^29.7.0",
+ "mocha": "^10.7.3",
+ "ovsx": "^0.9.5",
+ "ts-jest": "^29.2.5",
+ "typescript": "^5.6.2",
+ "typescript-eslint": "^8.19.0",
+ "vscode-tmgrammar-test": "^0.1.3"
+ },
+ "vsce": {
+ "baseContentUrl": "https://github.com/yoctoproject/vscode-bitbake/raw/HEAD/",
+ "baseImageUrl": "https://github.com/yoctoproject/vscode-bitbake/raw/HEAD/"
+ }
}
diff --git a/scripts/fetch-docs.sh b/scripts/fetch-docs.sh
index 6a3995a6..8322397e 100755
--- a/scripts/fetch-docs.sh
+++ b/scripts/fetch-docs.sh
@@ -1,9 +1,9 @@
#!/bin/bash
-# Tag: yocto-5.0.1
-BITBAKE_DOCS_COMMIT=8f90d10f9efc9a32e13f6bd031992aece79fe7cc
-# Tag: yocto-5.0.1
-YOCTO_DOCS_COMMIT=875dfe69e93bf8fee3b8c07818a6ac059f228a13
+# Tag: yocto-5.1.1
+BITBAKE_DOCS_COMMIT=846cf0555c1e56c8cdfa86fbfb5fdb1a46d7cbcf
+# Tag: yocto-5.1.1
+YOCTO_DOCS_COMMIT=9d9fde97364655b1b29398cc2f3742b44839fb39
BITBAKE_DOCS_LIST="bitbake-user-manual-metadata.rst bitbake-user-manual-ref-variables.rst"
YOCTO_DOCS_LIST=" tasks.rst variables.rst"
diff --git a/scripts/fetch-poky.sh b/scripts/fetch-poky.sh
index 893182a4..dee768c2 100644
--- a/scripts/fetch-poky.sh
+++ b/scripts/fetch-poky.sh
@@ -1,7 +1,7 @@
#!/bin/bash
-# Tag: yocto-5.0.1
-COMMIT=4b07a5316ed4b858863dfdb7cab63859d46d1810
+# Tag: yocto-5.1.1
+COMMIT=7e081bd98fdc5435e850d1df79a5e0f1e30293d0
set -e
diff --git a/scripts/fetch-spdx-licenses.sh b/scripts/fetch-spdx-licenses.sh
index b9323508..43a0c699 100644
--- a/scripts/fetch-spdx-licenses.sh
+++ b/scripts/fetch-spdx-licenses.sh
@@ -1,7 +1,7 @@
#!/bin/bash
-# Tag: v3.24.0
-SPDX_LICENSES_COMMIT=ddf4c0fe8ec024714fb97812abc378eb9a4d83be
+# Tag: v3.26.0
+SPDX_LICENSES_COMMIT=558c64b2e0a93fa86aab8a6dcbd84a565846a48e
set -e
cd "$(dirname "$(readlink -f "$0")")/.."
diff --git a/scripts/update-ref.sh b/scripts/update-ref.sh
index 2ee07635..e48b356b 100755
--- a/scripts/update-ref.sh
+++ b/scripts/update-ref.sh
@@ -2,109 +2,52 @@
# Update the fetch-poky.sh script
FILE="scripts/fetch-poky.sh"
-TMP_FILE="tmp.txt"
-tail -n +6 $FILE > $TMP_FILE
-
-echo "#!/bin/bash" > $FILE
-echo "" >> $FILE
-
-git clone --depth 1 --filter=blob:none --sparse https://github.com/yoctoproject/poky.git
-cd poky
-git fetch --tags
-TMP_TAG=$(git tag | grep "yocto-" | tail -n 1) # There is a tag: yocto_1.5_M5.rc8 which will take the tail, thus adding a hyphen
-LASTEST_RELEASE=$(git show $TMP_TAG | grep commit | sed "s/^commit //")
-echo "# Tag: $TMP_TAG" >> ../$FILE
-echo "COMMIT=$LASTEST_RELEASE" >> ../$FILE
-echo "" >> ../$FILE
-cd ..
-rm -rf poky
-
-cat $TMP_FILE >> $FILE
-rm $TMP_FILE
+LATEST_REF=$(git ls-remote --tags https://github.com/yoctoproject/poky.git | grep "yocto-" | tail -n 1)
+LATEST_COMMIT=$(echo $LATEST_REF | awk '{print $1}')
+LATEST_TAG=$(echo $LATEST_REF | awk '{print $2}' | sed -e "s/refs\\/tags\\///" -e "s/\^.*//")
+sed -i $FILE \
+ -e "s/^\(# Tag: \).*/\1$LATEST_TAG/" \
+ -e "s/^\(COMMIT=\).*/\1$LATEST_COMMIT/"
# Update the version.ts
-DEST="integration-tests/src/utils/version.ts"
-
-# Keep the header
-TOTAL_LINES=$(wc -l < $DEST)
-LINES_TO_KEEP=$(($TOTAL_LINES - 2))
-TMP="tmp.ts"
-head -n $LINES_TO_KEEP $DEST > $TMP
+FILE="integration-tests/src/utils/version.ts"
-git clone --depth 1 --filter=blob:none --sparse https://github.com/bash-lsp/bash-language-server
-cd bash-language-server
-git fetch --tags
-echo "export const bashVersion = '$(git tag --sort=-v:refname | head -n 1 | sed "s/^vscode-client-//")'" >> ../$TMP
-cd ..
-rm -rf bash-language-server
+LATEST_COMMIT=$(git ls-remote --refs --sort=-v:refname https://github.com/bash-lsp/bash-language-server | grep client | head -n 1 | awk '{print $2}' | sed s/refs\\/tags\\/vscode-client-//)
+sed -e "s/^\(export const bashVersion =\).*/\1 '$LATEST_COMMIT'/" -i $FILE
-git clone --depth 1 --filter=blob:none --sparse https://github.com/Microsoft/vscode-python
-cd vscode-python
-git fetch --tags
-echo "export const pythonVersion = '$(git tag --sort=-v:refname | head -n 1 | sed "s/^v//")'" >> ../$TMP
-cd ..
-rm -rf vscode-python
-
-cp $TMP $DEST
-rm $TMP
+LATEST_COMMIT=$(git ls-remote --refs --sort=-v:refname https://github.com/Microsoft/vscode-python | head -n 1 | awk '{print $2}' | sed s/refs\\/tags\\/v//)
+sed -e "s/^\(export const pythonVersion =\).*/\1 '$LATEST_COMMIT'/" -i $FILE
# Update the fetch-docs.sh script
FILE="scripts/fetch-docs.sh"
-TMP_FILE="tmp.txt"
-tail -n +8 $FILE > $TMP_FILE
-
-echo "#!/bin/bash" > $FILE
-echo "" >> $FILE
-git clone --depth 1 --filter=blob:none --sparse https://github.com/openembedded/bitbake.git
-cd bitbake
-git fetch --tags
-TMP_TAG=$(git tag --sort=-v:refname | head -n 1)
-LASTEST_RELEASE=$(git show $TMP_TAG | grep commit | sed "s/^commit //")
-echo "# Tag: $TMP_TAG" >> ../$FILE
-echo "BITBAKE_DOCS_COMMIT=$LASTEST_RELEASE" >> ../$FILE
-cd ..
-rm -rf bitbake
+LATEST_REF=$(git ls-remote --refs --sort=-v:refname https://github.com/openembedded/bitbake.git | head -n 1)
+LATEST_COMMIT=$(echo $LATEST_REF | awk '{print $1}')
+LATEST_TAG=$(echo $LATEST_REF | awk '{print $2}' | sed s/refs\\/tags\\///)
+sed -i $FILE \
+ -e "s/^\(# Tag: \).*/\1$LATEST_TAG/" \
+ -e "s/^\(BITBAKE_DOCS_COMMIT=\).*/\1$LATEST_COMMIT/"
-git clone --depth 1 --filter=blob:none --sparse https://git.yoctoproject.org/yocto-docs
-cd yocto-docs
-git fetch --tags
-TMP_TAG=$(git tag --sort=-v:refname | head -n 1)
-LASTEST_RELEASE=$(git show $TMP_TAG | grep commit | sed "s/^commit //")
-echo "# Tag: $TMP_TAG" >> ../$FILE
-echo "YOCTO_DOCS_COMMIT=$LASTEST_RELEASE" >> ../$FILE
-echo "" >> ../$FILE
-cd ..
-rm -rf yocto-docs
+LATEST_REF=$(git ls-remote --refs --sort=-v:refname https://git.yoctoproject.org/yocto-docs | head -n 1)
+LATEST_COMMIT=$(echo $LATEST_REF | awk '{print $1}')
+LATEST_TAG=$(echo $LATEST_REF | awk '{print $2}' | sed s/refs\\/tags\\///)
+sed -i $FILE \
+ -e "s/^\(# Tag: \).*/\1$LATEST_TAG/" \
+ -e "s/^\(YOCTO_DOCS_COMMIT=\).*/\1$LATEST_COMMIT/"
-git clone --depth 1 --filter=blob:none --sparse https://github.com/microsoft/vscode.git
-cd vscode
-git fetch --tags
-TMP_TAG=$(git tag --sort=-v:refname | grep -E '^[0-9.]+$' | head -n 1)
-sed -e "s/vscodeVersion = '.*'/vscodeVersion = '$TMP_TAG'/" -i ../integration-tests/src/runTest.ts
-cd ..
-rm -rf vscode
+# Update vscodeVersion in runTest.ts
+FILE="integration-tests/src/runTest.ts"
-cat $TMP_FILE >> $FILE
-rm $TMP_FILE
+LATEST_TAG=$(git ls-remote --tags --sort=-v:refname https://github.com/microsoft/vscode.git | grep "refs/tags/[0-9.]" | head -n 1 | awk '{print $2}' | sed s/refs\\/tags\\///)
+sed -e "s/vscodeVersion = '.*'/vscodeVersion = '$LATEST_TAG'/" -i $FILE
# Update the fetch-spdx-licenses.sh script
FILE="scripts/fetch-spdx-licenses.sh"
-TMP_FILE="tmp.txt"
-tail -n +5 $FILE > $TMP_FILE
-
-echo "#!/bin/bash" > $FILE
-echo "" >> $FILE
-git clone --depth 1 --filter=blob:none --sparse https://github.com/spdx/license-list-data.git
-cd license-list-data
-git fetch --tags
-TMP_TAG=$(git tag --sort=-v:refname | head -n 1)
-LATEST_RELEASE=$(git show $TMP_TAG | grep commit -m 1 | sed "s/^commit //")
-echo "# Tag: $TMP_TAG" >> ../$FILE
-echo "SPDX_LICENSES_COMMIT=$LATEST_RELEASE" >> ../$FILE
-cd ..
-rm -rf license-list-data
+LATEST_REF=$(git ls-remote --refs --sort=-v:refname https://github.com/spdx/license-list-data.git | head -n 1)
+LATEST_COMMIT=$(echo $LATEST_REF | awk '{print $1}')
+LATEST_TAG=$(echo $LATEST_REF | awk '{print $2}' | sed s/refs\\/tags\\///)
+sed -i $FILE \
+ -e "s/^\(# Tag: \).*/\1$LATEST_TAG/" \
+ -e "s/^\(SPDX_LICENSES_COMMIT=\).*/\1$LATEST_COMMIT/"
-cat $TMP_FILE >> $FILE
-rm $TMP_FILE
diff --git a/scripts/update-tree-sitter-bash-wasm.sh b/scripts/update-tree-sitter-bash-wasm.sh
deleted file mode 100644
index aacebbd7..00000000
--- a/scripts/update-tree-sitter-bash-wasm.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-. "$(dirname "$0")/update-tree-sitter-wasm.sh"
-
-repo_name=tree-sitter-bash
-repo_owner=tree-sitter
-
-update-tree-sitter-wasm $repo_name $repo_owner
diff --git a/scripts/update-tree-sitter-bash.sh b/scripts/update-tree-sitter-bash.sh
new file mode 100644
index 00000000..f2f230e0
--- /dev/null
+++ b/scripts/update-tree-sitter-bash.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -e
+
+. "$(dirname "$0")/update-tree-sitter.sh"
+
+repo_name=tree-sitter-bash
+repo_owner=tree-sitter
+
+update-tree-sitter $repo_name $repo_owner
diff --git a/scripts/update-tree-sitter-bitbake-wasm.sh b/scripts/update-tree-sitter-bitbake-wasm.sh
deleted file mode 100644
index 190c679e..00000000
--- a/scripts/update-tree-sitter-bitbake-wasm.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-. "$(dirname "$0")/update-tree-sitter-wasm.sh"
-
-repo_name=tree-sitter-bitbake
-repo_owner=tree-sitter-grammars
-
-update-tree-sitter-wasm $repo_name $repo_owner
diff --git a/scripts/update-tree-sitter-bitbake.sh b/scripts/update-tree-sitter-bitbake.sh
new file mode 100644
index 00000000..7d34c28c
--- /dev/null
+++ b/scripts/update-tree-sitter-bitbake.sh
@@ -0,0 +1,9 @@
+#!/usr/bin/env bash
+set -e
+
+. "$(dirname "$0")/update-tree-sitter.sh"
+
+repo_name=tree-sitter-bitbake
+repo_owner=tree-sitter-grammars
+
+update-tree-sitter $repo_name $repo_owner
diff --git a/scripts/update-tree-sitter-wasm.sh b/scripts/update-tree-sitter.sh
similarity index 95%
rename from scripts/update-tree-sitter-wasm.sh
rename to scripts/update-tree-sitter.sh
index e714ab1e..1bb6fa72 100755
--- a/scripts/update-tree-sitter-wasm.sh
+++ b/scripts/update-tree-sitter.sh
@@ -5,7 +5,7 @@
set -euox pipefail
-update-tree-sitter-wasm() {
+update-tree-sitter() {
local repo_name=$1
local repo_owner=$2
local info_file="$repo_name.info"
diff --git a/server/package-lock.json b/server/package-lock.json
index fd77e24d..e21fe39c 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "language-server-bitbake",
- "version": "2.6.0",
+ "version": "2.8.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "language-server-bitbake",
- "version": "2.6.0",
+ "version": "2.8.0",
"license": "MIT",
"workspaces": [
"../client/src/lib"
@@ -14,14 +14,14 @@
"dependencies": {
"node-cache": "^5.1.2",
"vscode-languageserver": "^9.0.1",
- "vscode-languageserver-textdocument": "^1.0.8",
- "web-tree-sitter": "^0.22.6"
+ "vscode-languageserver-textdocument": "^1.0.12",
+ "web-tree-sitter": "^0.24.3"
},
"bin": {
"language-server-bitbake": "out/server.js"
},
"devDependencies": {
- "@types/vscode": "^1.75.1"
+ "@types/vscode": "^1.92.0"
},
"engines": {
"node": "*"
@@ -36,9 +36,9 @@
}
},
"node_modules/@types/vscode": {
- "version": "1.90.0",
- "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.90.0.tgz",
- "integrity": "sha512-oT+ZJL7qHS9Z8bs0+WKf/kQ27qWYR3trsXpq46YDjFqBsMLG4ygGGjPaJ2tyrH0wJzjOEmDyg9PDJBBhWg9pkQ==",
+ "version": "1.96.0",
+ "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.96.0.tgz",
+ "integrity": "sha512-qvZbSZo+K4ZYmmDuaodMbAa67Pl6VDQzLKFka6rq+3WUTY4Kro7Bwoi0CuZLO/wema0ygcmpwow7zZfPJTs5jg==",
"dev": true
},
"node_modules/clone": {
@@ -93,8 +93,9 @@
}
},
"node_modules/vscode-languageserver-textdocument": {
- "version": "1.0.11",
- "license": "MIT"
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+ "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
},
"node_modules/vscode-languageserver-types": {
"version": "3.17.5",
@@ -102,9 +103,9 @@
"integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
},
"node_modules/web-tree-sitter": {
- "version": "0.22.6",
- "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.22.6.tgz",
- "integrity": "sha512-hS87TH71Zd6mGAmYCvlgxeGDjqd9GTeqXNqTT+u0Gs51uIozNIaaq/kUAbV/Zf56jb2ZOyG8BxZs2GG9wbLi6Q=="
+ "version": "0.24.6",
+ "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.6.tgz",
+ "integrity": "sha512-NVG40wwFerkvOSsrY2NE56nKpzwCpn8VT51gqZZaIfkBCMu+0JZLFVwJlZLPO01Ewfq3+Xg+NY4Bot5GD0L03g=="
}
}
}
diff --git a/server/package.json b/server/package.json
index b6d75341..bfaf0ca4 100644
--- a/server/package.json
+++ b/server/package.json
@@ -1,7 +1,7 @@
{
"name": "language-server-bitbake",
"description": "Implementation of a language server for bitbake.",
- "version": "2.6.0",
+ "version": "2.8.0",
"author": "Eugen Wiens",
"contributors": [
"Savoir-faire Linux"
@@ -22,14 +22,14 @@
"dependencies": {
"node-cache": "^5.1.2",
"vscode-languageserver": "^9.0.1",
- "vscode-languageserver-textdocument": "^1.0.8",
- "web-tree-sitter": "^0.22.6"
+ "vscode-languageserver-textdocument": "^1.0.12",
+ "web-tree-sitter": "^0.24.3"
},
"scripts": {
"prepack": "cd .. && npm run compile"
},
"devDependencies": {
- "@types/vscode": "^1.75.1"
+ "@types/vscode": "^1.92.0"
},
"workspaces": [
"../client/src/lib"
diff --git a/server/src/BitBakeDocScanner.ts b/server/src/BitBakeDocScanner.ts
index 70b99b46..65a2542d 100644
--- a/server/src/BitBakeDocScanner.ts
+++ b/server/src/BitBakeDocScanner.ts
@@ -21,7 +21,6 @@ export interface VariableInfo extends DocInfo {
validFiles?: RegExp[] // Files on which the variable is defined. If undefined, the variable is defined in all files.
suffixType?: SuffixType
}
-export interface VariableFlagInfo extends DocInfo {}
type SuffixType = 'layer' | 'providedItem' | undefined
type VariableInfosOverride = Partial
@@ -72,7 +71,7 @@ const KEYWORDS = [
export class BitBakeDocScanner {
private _bitbakeVariableInfo: VariableInfo[] = []
private _yoctoVariableInfo: VariableInfo[] = []
- private _variableFlagInfo: VariableFlagInfo[] = []
+ private _variableFlagInfo: DocInfo[] = []
private _yoctoTaskInfo: DocInfo[] = []
private _pythonDatastoreFunction: string[] = []
private readonly _docPath: string = path.join(__dirname, '../resources/docs')
@@ -86,7 +85,7 @@ export class BitBakeDocScanner {
return this._yoctoVariableInfo
}
- get variableFlagInfo (): VariableFlagInfo[] {
+ get variableFlagInfo (): DocInfo[] {
return this._variableFlagInfo
}
@@ -220,7 +219,6 @@ export class BitBakeDocScanner {
definition: taskDescription ?? '',
insertText: [
`${taskName}(){`,
- /* eslint-disable no-template-curly-in-string */
'\t${1:# Your code here}',
'}'
].join('\n'),
@@ -248,7 +246,7 @@ export class BitBakeDocScanner {
return
}
- const variableFlagInfo: VariableFlagInfo[] = []
+ const variableFlagInfo: DocInfo[] = []
for (const match of variableFlagSection[0].matchAll(variableFlagRegex)) {
const name = match.groups?.name
const description = match.groups?.description
diff --git a/server/src/BitbakeProjectScannerClient.ts b/server/src/BitbakeProjectScannerClient.ts
index 02237d72..41f92e40 100644
--- a/server/src/BitbakeProjectScannerClient.ts
+++ b/server/src/BitbakeProjectScannerClient.ts
@@ -15,7 +15,8 @@ export class BitBakeProjectScannerClient {
_recipes: [],
_overrides: [],
_confFiles: [],
- _workspaces: []
+ _workspaces: [],
+ _bitbakeVersion: ''
}
public setScanResults (scanResults: BitbakeScanResult): void {
diff --git a/server/src/__tests__/analyzer.test.ts b/server/src/__tests__/analyzer.test.ts
index 0378a0ae..84cc8259 100644
--- a/server/src/__tests__/analyzer.test.ts
+++ b/server/src/__tests__/analyzer.test.ts
@@ -67,7 +67,6 @@ describe('analyze', () => {
uri: DUMMY_URI
},
name: 'BAR',
- // eslint-disable-next-line no-template-curly-in-string
overrides: ['o1', 'o2', '${PN}'],
commentsAbove: []
},
@@ -455,7 +454,6 @@ describe('resolveSymbol', () => {
},
kind: 13,
commentsAbove: [],
- // eslint-disable-next-line no-template-curly-in-string
overrides: ['override1', 'override2', '${PN}', '${PN}-foo']
}
@@ -464,7 +462,6 @@ describe('resolveSymbol', () => {
overrides: []
}
- // eslint-disable-next-line no-template-curly-in-string
const symbol3 = 'recipe_${PV}.bb'
const lookUpSymbolList: BitbakeSymbolInformation[] = [
diff --git a/server/src/__tests__/completions.test.ts b/server/src/__tests__/completions.test.ts
index 204078df..853a4e73 100644
--- a/server/src/__tests__/completions.test.ts
+++ b/server/src/__tests__/completions.test.ts
@@ -12,6 +12,7 @@ import { bitBakeProjectScannerClient } from '../BitbakeProjectScannerClient'
import path from 'path'
import { extractRecipeName } from '../lib/src/utils/files'
import { licenseOperators } from '../completions/spdx-licenses'
+import { BitbakeScanResult } from '../lib/src/types/BitbakeScanResult'
/**
* The onCompletion handler doesn't allow other parameters, so we can't pass the analyzer and therefore the same
@@ -85,7 +86,6 @@ describe('On Completion', () => {
})
// Yocto tasks
expect(resultAfterDocScan).toEqual(
- /* eslint-disable no-template-curly-in-string */
expect.arrayContaining([
{
documentation: {
@@ -161,7 +161,6 @@ describe('On Completion', () => {
// Variables from Yocto docs but not in bitbake docs
expect(resultAfterDocScan).toEqual(
- /* eslint-disable no-template-curly-in-string */
expect.arrayContaining([
{
documentation: {
@@ -797,9 +796,8 @@ describe('On Completion', () => {
_layers: [],
_overrides: [],
_recipes: [],
- _confFiles: [],
- _workspaces: []
- }
+ _confFiles: []
+ } as unknown as BitbakeScanResult
analyzer.analyze({
uri: FIXTURE_URI.DIRECTIVE,
@@ -818,7 +816,9 @@ describe('On Completion', () => {
// Show only one completion item for each symbol
let occurances = 0
result.forEach(item => {
- item.label === 'DESCRIPTION' && occurances++
+ if (item.label === 'DESCRIPTION') {
+ occurances++
+ }
})
expect(occurances).toEqual(1)
@@ -939,7 +939,6 @@ describe('On Completion', () => {
// string_start does not have task among the completion items
expect(resultOnStringStart).not.toEqual(
- /* eslint-disable no-template-curly-in-string */
expect.arrayContaining([
{
documentation: {
@@ -998,7 +997,6 @@ describe('On Completion', () => {
// string_content does not have task among the completion items
expect(resultOnStringContent).not.toEqual(
- /* eslint-disable no-template-curly-in-string */
expect.arrayContaining([
{
documentation: {
diff --git a/server/src/__tests__/definition.test.ts b/server/src/__tests__/definition.test.ts
index 10106e02..34b005b1 100644
--- a/server/src/__tests__/definition.test.ts
+++ b/server/src/__tests__/definition.test.ts
@@ -10,6 +10,7 @@ import { FIXTURE_DOCUMENT, DUMMY_URI, FIXTURE_URI } from './fixtures/fixtures'
import path from 'path'
import { bitBakeProjectScannerClient } from '../BitbakeProjectScannerClient'
import { extractRecipeName } from '../lib/src/utils/files'
+import { BitbakeScanResult } from '../lib/src/types/BitbakeScanResult'
describe('on definition', () => {
beforeAll(async () => {
@@ -55,9 +56,6 @@ describe('on definition', () => {
extraInfo: 'layer: core'
}
],
- _layers: [],
- _overrides: [],
- _recipes: [],
_confFiles: [
{
name: parsedBitbakeConfPath.name,
@@ -65,8 +63,7 @@ describe('on definition', () => {
extraInfo: 'layer: core'
}
],
- _workspaces: []
- }
+ } as BitbakeScanResult
analyzer.analyze({
uri: FIXTURE_URI.DIRECTIVE,
@@ -201,9 +198,8 @@ describe('on definition', () => {
path: parsedBarPath,
extraInfo: 'layer: core'
}
- ],
- _workspaces: []
- }
+ ]
+ } as unknown as BitbakeScanResult
analyzer.analyze({
uri: DUMMY_URI,
diff --git a/server/src/__tests__/embedded-languages.test.ts b/server/src/__tests__/embedded-languages.test.ts
index 9360e9c7..97ba4d52 100644
--- a/server/src/__tests__/embedded-languages.test.ts
+++ b/server/src/__tests__/embedded-languages.test.ts
@@ -39,7 +39,6 @@ describe('Create basic embedded bash documents', () => {
],
[
'with inline python',
- // eslint-disable-next-line no-template-curly-in-string
'foo(){\n${@FOO}\n}',
`${bashHeader}foo(){\n\${? }\n}`
],
@@ -115,37 +114,31 @@ describe('Create Python embedded language content with inline Python', () => {
test.each([
[
'basic',
- // eslint-disable-next-line no-template-curly-in-string
'FOO = \'${@"BAR"}\'',
`${pythonHeader} \n\n"BAR"\n `
],
[
'with spacing',
- // eslint-disable-next-line no-template-curly-in-string
'FOO = \'${@ "BAR" }\'',
`${pythonHeader} \n \n"BAR" \n `
],
[
'multiline',
- // eslint-disable-next-line no-template-curly-in-string
'FOO = \'${@"BAR"}\' \\\n1 \\\n2"',
`${pythonHeader} \n\n"BAR"\n \n \n `
],
[
'with two embedded python regions',
- // eslint-disable-next-line no-template-curly-in-string
'FOO = \'${@"BAR"}${@"BAR"}\'',
`${pythonHeader} \n\n"BAR"\n \n\n"BAR"\n `
],
[
'without surrounding quotes',
- // eslint-disable-next-line no-template-curly-in-string
'inherit ${@"test"}',
`${pythonHeader} \n\n"test"\n`
],
[
'inside bash function',
- // eslint-disable-next-line no-template-curly-in-string
'foo(){\n${@FOO}\n}',
`${pythonHeader} \n \n\nFOO\n\n `
]
@@ -192,14 +185,12 @@ describe('Finds proper embedded language type', () => {
],
[
'Inline Python',
- // eslint-disable-next-line no-template-curly-in-string
'FOO = "${@BAR}"',
{ line: 0, character: 11 },
'python'
],
[
'Inline Python into Bash function',
- // eslint-disable-next-line no-template-curly-in-string
'foo(){\n ${@BAR}\n}',
{ line: 1, character: 6 },
'python'
diff --git a/server/src/__tests__/fixtures/fixtures.ts b/server/src/__tests__/fixtures/fixtures.ts
index b7cfb3f4..0f599071 100644
--- a/server/src/__tests__/fixtures/fixtures.ts
+++ b/server/src/__tests__/fixtures/fixtures.ts
@@ -14,8 +14,6 @@ import { TextDocument } from 'vscode-languageserver-textdocument'
const FIXTURE_FOLDER = path.join(__dirname, './')
-type FIXTURE_URI_KEY = keyof typeof FIXTURE_URI
-
function getDocument (uri: string): TextDocument {
return TextDocument.create(
uri,
@@ -40,11 +38,20 @@ export const FIXTURE_URI = {
BITBAKE_CONF: `file://${path.join(FIXTURE_FOLDER, 'conf', 'bitbake.conf')}`
}
-export const FIXTURE_DOCUMENT: Record = (
- Object.keys(FIXTURE_URI) as FIXTURE_URI_KEY[]
-).reduce((acc, cur: FIXTURE_URI_KEY) => {
- acc[cur] = getDocument(FIXTURE_URI[cur])
- return acc
-}, {})
+
+export const FIXTURE_DOCUMENT = {
+ CORRECT: getDocument(FIXTURE_URI.CORRECT),
+ DECLARATION: getDocument(FIXTURE_URI.DECLARATION),
+ COMPLETION: getDocument(FIXTURE_URI.COMPLETION),
+ HOVER: getDocument(FIXTURE_URI.HOVER),
+ EMBEDDED: getDocument(FIXTURE_URI.EMBEDDED),
+ SEMANTIC_TOKENS: getDocument(FIXTURE_URI.SEMANTIC_TOKENS),
+ DIRECTIVE: getDocument(FIXTURE_URI.DIRECTIVE),
+ RENAME: getDocument(FIXTURE_URI.RENAME),
+ BAZ_BBCLASS: getDocument(FIXTURE_URI.BAZ_BBCLASS),
+ BAR_INC: getDocument(FIXTURE_URI.BAR_INC),
+ FOO_INC: getDocument(FIXTURE_URI.FOO_INC),
+ BITBAKE_CONF: getDocument(FIXTURE_URI.BITBAKE_CONF)
+}
export const DUMMY_URI = 'file://dummy_uri.bb'
diff --git a/server/src/__tests__/hover.test.ts b/server/src/__tests__/hover.test.ts
index ab0b4efd..efd55a83 100644
--- a/server/src/__tests__/hover.test.ts
+++ b/server/src/__tests__/hover.test.ts
@@ -11,6 +11,7 @@ import { onHoverHandler } from '../connectionHandlers/onHover'
import path from 'path'
import { bitBakeProjectScannerClient } from '../BitbakeProjectScannerClient'
import { extractRecipeName } from '../lib/src/utils/files'
+import { BitbakeScanResult } from '../lib/src/types/BitbakeScanResult'
describe('on hover', () => {
beforeAll(async () => {
@@ -580,9 +581,8 @@ describe('on hover', () => {
_layers: [],
_overrides: [],
_recipes: [],
- _confFiles: [],
- _workspaces: []
- }
+ _confFiles: []
+ } as unknown as BitbakeScanResult
analyzer.analyze({
uri: DUMMY_URI,
diff --git a/server/src/__tests__/onReference.test.ts b/server/src/__tests__/onReference.test.ts
index b33c26bf..d9fe012d 100644
--- a/server/src/__tests__/onReference.test.ts
+++ b/server/src/__tests__/onReference.test.ts
@@ -9,7 +9,8 @@ import { analyzer } from '../tree-sitter/analyzer'
import { generateBashParser, generateBitBakeParser } from '../tree-sitter/parser'
import { DUMMY_URI, FIXTURE_DOCUMENT, FIXTURE_URI } from './fixtures/fixtures'
import { bitBakeProjectScannerClient } from '../BitbakeProjectScannerClient'
-import path = require('path')
+import path from 'path'
+import { BitbakeScanResult } from '../lib/src/types/BitbakeScanResult'
describe('onReferenceHandler', () => {
beforeAll(async () => {
@@ -53,18 +54,14 @@ describe('onReferenceHandler', () => {
extraInfo: 'layer: core'
}
],
- _layers: [],
- _overrides: [],
- _recipes: [],
_confFiles: [
{
name: parsedBitbakeConfPath.name,
path: parsedBitbakeConfPath,
extraInfo: 'layer: core'
}
- ],
- _workspaces: []
- }
+ ]
+ } as BitbakeScanResult
analyzer.analyze({
uri: DUMMY_URI,
diff --git a/server/src/completions/snippet-utils.ts b/server/src/completions/snippet-utils.ts
index 9aa4175f..527e7cb1 100644
--- a/server/src/completions/snippet-utils.ts
+++ b/server/src/completions/snippet-utils.ts
@@ -10,7 +10,6 @@
import { InsertTextFormat, type CompletionItem, CompletionItemKind, MarkupKind } from 'vscode-languageserver'
-/* eslint-disable no-template-curly-in-string */
export function formatCompletionItems (completions: CompletionItem[], completionItemKind?: CompletionItemKind): CompletionItem[] {
return completions.map((item) => {
@@ -34,6 +33,7 @@ export function formatCompletionItems (completions: CompletionItem[], completion
kind: item.kind ?? completionItemKind ?? CompletionItemKind.Snippet
}
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
const { data, ...filtered } = formatted
return filtered
diff --git a/server/src/completions/spdx-licenses.ts b/server/src/completions/spdx-licenses.ts
index f1dc399c..cee268ae 100644
--- a/server/src/completions/spdx-licenses.ts
+++ b/server/src/completions/spdx-licenses.ts
@@ -69,7 +69,7 @@ export const getSpdxLicenseCompletionResolve = async (item: CompletionItem): Pro
documentation: spdxLicenseDetails.licenseText
}
return resolvedItem
- } catch (error: any) {
+ } catch (error) {
logger.error(`[getSpdxLicenseCompletionResolve] error: ${error}`)
return item
}
diff --git a/server/src/connectionHandlers/onCompletion.ts b/server/src/connectionHandlers/onCompletion.ts
index 565109b4..2a5124c2 100644
--- a/server/src/connectionHandlers/onCompletion.ts
+++ b/server/src/connectionHandlers/onCompletion.ts
@@ -24,7 +24,6 @@ import path from 'path'
import { commonDirectoriesVariables } from '../lib/src/availableVariables'
import { mergeArraysDistinctly } from '../lib/src/utils/arrays'
import { type BitbakeSymbolInformation } from '../tree-sitter/declarations'
-import { extractRecipeName } from '../lib/src/utils/files'
import { getSpdxLicenseCompletionResolve, getLicenseCompletionItems, spdxLicenseDescription } from '../completions/spdx-licenses'
let documentUri = ''
@@ -132,7 +131,6 @@ async function getBitBakeCompletionItems (textDocumentPositionParams: TextDocume
const bitbakeOverridesCompletionItems: CompletionItem[] = bitBakeProjectScannerClient.bitbakeScanResult._overrides.map((override, index) => {
let label = override
if (override === 'pn-defaultpkgname') {
- // eslint-disable-next-line no-template-curly-in-string
label = '${PN}'
}
return {
@@ -440,7 +438,7 @@ function convertExtraSymbolsToCompletionItems (uri: string): CompletionItem[] {
})
// Add supplement variables and function completions from the scan results (bitbake -e)
- const lastScanResult = analyzer.getLastScanResult(extractRecipeName(documentUri))
+ const lastScanResult = analyzer.getLastScanResult(documentUri)
if (lastScanResult !== undefined) {
const scanResultCompletionItems = lastScanResult.symbols.filter((symbol) => !completionItems.some((item) => item.label === symbol.name)).map((symbol) => {
const completionItem: CompletionItem = {
diff --git a/server/src/connectionHandlers/onDefinition.ts b/server/src/connectionHandlers/onDefinition.ts
index 3d07c90a..46c41efe 100644
--- a/server/src/connectionHandlers/onDefinition.ts
+++ b/server/src/connectionHandlers/onDefinition.ts
@@ -11,7 +11,6 @@ import { bitBakeProjectScannerClient } from '../BitbakeProjectScannerClient'
import { type ParsedPath } from 'path'
import { type ElementInfo } from '../lib/src/types/BitbakeScanResult'
import { type BitbakeSymbolInformation } from '../tree-sitter/declarations'
-import { extractRecipeName } from '../lib/src/utils/files'
let connection: Connection | undefined
@@ -38,7 +37,7 @@ export async function onDefinitionHandler (textDocumentPositionParams: TextDocum
return []
}
- const lastScanResult = analyzer.getLastScanResult(extractRecipeName(uri))
+ const lastScanResult = analyzer.getLastScanResult(uri)
const definitions: Definition = []
diff --git a/server/src/connectionHandlers/onHover.ts b/server/src/connectionHandlers/onHover.ts
index 9f69d6aa..c356fd0c 100644
--- a/server/src/connectionHandlers/onHover.ts
+++ b/server/src/connectionHandlers/onHover.ts
@@ -10,7 +10,6 @@ import { logger } from '../lib/src/utils/OutputLogger'
import { DIRECTIVE_STATEMENT_KEYWORDS } from '../lib/src/types/directiveKeywords'
import path from 'path'
import type { BitbakeSymbolInformation } from '../tree-sitter/declarations'
-import { extractRecipeName } from '../lib/src/utils/files'
import { getSpdxLicense, getSpdxLicenseDetails } from '../utils/spdx-licenses'
import { getRangeOfWord } from '../utils/textDocument'
@@ -55,7 +54,7 @@ export async function onHoverHandler (params: HoverParams): Promise symbol.name === word).filter((symbol) => symbol.commentsAbove.length > 0)
const externalSymbolsWithComments: BitbakeSymbolInformation[] = []
diff --git a/server/src/server.ts b/server/src/server.ts
index df8de211..ef889744 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -170,12 +170,17 @@ disposables.push(
}),
connection.onRequest(RequestMethod.ProcessRecipeScanResults, (param: RequestParams['ProcessRecipeScanResults']) => {
- logger.debug(`[onNotification] uri: ${JSON.stringify(param.uri)} recipe: ${param.chosenRecipe}`)
+ logger.debug(`[onRequest] uri: ${JSON.stringify(param.uri)} recipe: ${param.chosenRecipe}`)
analyzer.processRecipeScanResults(param.scanResults, param.chosenRecipe)
}),
+ connection.onRequest(RequestMethod.ProcessGlobalEnvScanResults, (param: RequestParams['ProcessGlobalEnvScanResults']) => {
+ logger.debug('[onRequest] ')
+ analyzer.processGlobalEnvScanResults(param.scanResults)
+ }),
+
connection.onRequest(RequestMethod.getVar, async (params: RequestParams['getVar']) => {
- const scanResult = analyzer.getLastScanResult(params.recipe)
+ const scanResult = analyzer.getRecipeLastScanResult(params.recipe)
return scanResult?.symbols.find(symbolInfo => symbolInfo.name === params.variable)?.finalValue
}),
@@ -207,7 +212,7 @@ disposables.push(
} catch (error) {
// When using the language server without the client, custom requests are not supported
// The CoC.nvim client will disable the server if an exception is thrown
- logger.error(`Error while getting recipe local files: ${error as any}`)
+ logger.error(`Error while getting recipe local files: ${error}`)
}
}
})
diff --git a/server/src/tree-sitter/analyzer.ts b/server/src/tree-sitter/analyzer.ts
index 3d0b8369..4aca48e4 100644
--- a/server/src/tree-sitter/analyzer.ts
+++ b/server/src/tree-sitter/analyzer.ts
@@ -31,6 +31,7 @@ import { bitBakeDocScanner } from '../BitBakeDocScanner'
import { type ElementInfo } from '../lib/src/types/BitbakeScanResult'
import { type RequestResult } from '../lib/src/types/requests'
import { generateBashEmbeddedLanguageDoc } from '../embedded-languages/bash-support'
+import { extractRecipeName } from '../lib/src/utils/files'
export interface AnalyzedDocument {
version: number // TextDocument is mutable and its version updates as the document updates
@@ -60,6 +61,7 @@ export default class Analyzer {
private bashParser?: Parser
private uriToAnalyzedDocument: Record = {}
private readonly uriToLastScanResult: Record = {} // Store the results of the last scan for each recipe
+ private lastGlobalEnvScanResult: LastScanResult | undefined = undefined
private uriToRecipeLocalFiles: Record = {}
public getDocumentTexts (uri: string): string[] | undefined {
@@ -70,7 +72,17 @@ export default class Analyzer {
return this.uriToAnalyzedDocument[uri]
}
- public getLastScanResult (recipe: string): LastScanResult | undefined {
+ /**
+ * Get the scan result for the current file if it is a recipe file or get the global scan result if it is a .conf or .bbclass file.
+ */
+ public getLastScanResult (uri: string): LastScanResult | undefined {
+ if (['.conf', '.bbclass'].includes(path.extname(uri))) return this.lastGlobalEnvScanResult
+ const recipe = extractRecipeName(uri)
+ if (this.uriToLastScanResult[recipe] !== undefined) return this.uriToLastScanResult[recipe]
+ return undefined
+ }
+
+ public getRecipeLastScanResult (recipe: string): LastScanResult | undefined {
return this.uriToLastScanResult[recipe]
}
@@ -120,6 +132,10 @@ export default class Analyzer {
this.uriToLastScanResult[recipe] = undefined
}
+ public removeLastGlobalEnvScanResult (): void {
+ this.lastGlobalEnvScanResult = undefined
+ }
+
public initialize (bitBakeParser: Parser, bashParser: Parser): void {
this.bitBakeParser = bitBakeParser
this.bashParser = bashParser
@@ -160,7 +176,7 @@ export default class Analyzer {
bashTree
}
- return this.executeAnalyzation(document, uri, bitBakeTree)
+ return this.executeAnalyzation()
}
private generateBitBakeTree (document: TextDocument): Parser.Tree | undefined {
@@ -187,7 +203,7 @@ export default class Analyzer {
return this.bashParser.parse(bashContent)
}
- private executeAnalyzation (document: TextDocument, uri: string, bitBakeTree: Tree): Diagnostic[] {
+ private executeAnalyzation (): Diagnostic[] {
const diagnostics: Diagnostic[] = []
// It was used to provide diagnostics from bitBakeTree-sitter, but it is not yet reliable.
@@ -219,7 +235,9 @@ export default class Analyzer {
if (isNonEmptyVariableExpansion) {
const symbol = nodeToSymbolInformation({ node, uri, getFinalValue: false, isBitBakeVariableExpansion: true })
- symbol !== null && variableExpansionSymbols.push(symbol)
+ if (symbol !== null) {
+ variableExpansionSymbols.push(symbol)
+ }
}
if (isPythonDatastoreVariable) {
@@ -1114,27 +1132,31 @@ export default class Analyzer {
}
/**
- *
- * @param scanResult
- * @param uri
- *
* Process scan results sent from the client. The scan results are generated by bitbake -e command
*/
public processRecipeScanResults (scanResult: string, chosenRecipe: string): void {
- if (this.bitBakeParser === undefined) {
- logger.debug('[ProcessRecipeScanResults] The analyzer is not initialized with a parser')
- return undefined
- }
-
if (chosenRecipe === undefined) {
- logger.error('[ProcessRecipeScanResults] The chosenRecipe is undefined, abort processing scan results')
+ logger.error(`[${this.processRecipeScanResults.name}] The chosenRecipe is undefined, abort processing scan results`)
return
}
+ this.uriToLastScanResult[chosenRecipe] = this.processEnvScanResults(scanResult)
+ }
+
+ public processGlobalEnvScanResults (scanResult: string): void {
+ this.lastGlobalEnvScanResult = this.processEnvScanResults(scanResult)
+ }
+
+ private processEnvScanResults (scanResult: string): LastScanResult | undefined {
+ if (this.bitBakeParser === undefined) {
+ logger.debug(`[${this.processEnvScanResults.name}] The analyzer is not initialized with a parser`)
+ return undefined
+ }
+
const lines = scanResult.split(/\r?\n/g)
const index = lines.findIndex((line) => line.includes('INCLUDE HISTORY'))
if (index === -1) {
- logger.debug('[ProcessRecipeScanResults] Cannot find INCLUDE HISTORY in scan results, abort processing scan results')
+ logger.debug(`[${this.processEnvScanResults.name}] Cannot find INCLUDE HISTORY in scan results, abort processing scan results`)
return undefined
}
@@ -1144,7 +1166,7 @@ export default class Analyzer {
const scanResultGlobalDeclarations = getGlobalDeclarations({ bitBakeTree: scanResultParsedTree, uri: 'scanResultDummyUri', getFinalValue: true })
const scanResultSymbols = this.getAllSymbolsFromGlobalDeclarations(scanResultGlobalDeclarations)
- this.uriToLastScanResult[chosenRecipe] = {
+ return {
symbols: scanResultSymbols,
includeHistory: this.extractIncludeHistory(scanResult, index)
}
@@ -1223,7 +1245,9 @@ export default class Analyzer {
const variable = match.groups?.variable
if (variable !== undefined) {
const value = lookUpSymbolList.find((symbol) => symbol.name === variable)?.finalValue
- value !== undefined && (resolvedSymbol = resolvedSymbol.replace(new RegExp('\\$\\{' + variable + '\\}', 'g'), value.endsWith('+git') ? value.replace('+git', '') : value)) // PV usually has +git appended to it
+ if (value !== undefined) {
+ resolvedSymbol = resolvedSymbol.replace(new RegExp('\\$\\{' + variable + '\\}', 'g'), value.endsWith('+git') ? value.replace('+git', '') : value) // PV usually has +git appended to it
+ }
}
}
diff --git a/server/tree-sitter-bash.info b/server/tree-sitter-bash.info
index ea9164e9..4bdea89f 100644
--- a/server/tree-sitter-bash.info
+++ b/server/tree-sitter-bash.info
@@ -1,2 +1,2 @@
-"https://api.github.com/repos/tree-sitter/tree-sitter-bash/git/commits/2fbd860f802802ca76a6661ce025b3a3bca2d3ed"
-tree-sitter-cli "^0.22.6"
+"https://api.github.com/repos/tree-sitter/tree-sitter-bash/git/commits/49c31006d8307dcb12bc5770f35b6d5b9e2be68e"
+tree-sitter-cli 0.24.6
diff --git a/server/tree-sitter-bitbake.info b/server/tree-sitter-bitbake.info
index 022587e0..7caef0bd 100644
--- a/server/tree-sitter-bitbake.info
+++ b/server/tree-sitter-bitbake.info
@@ -1,2 +1,2 @@
-"https://api.github.com/repos/idillon-sfl/tree-sitter-bitbake/git/commits/821169a172bfe3c7125927ca151e299a1f43759b"
+"https://api.github.com/repos/idillon-sfl/tree-sitter-bitbake/git/commits/bc577daab90b551ad1dc42c3373db2cb7c43857d"
tree-sitter-cli "^0.22.6"